diff --git a/pkg/balancer-js/src/pool-stable/encoder.ts b/pkg/balancer-js/src/pool-stable/encoder.ts index a51141d0b8..299ef3672a 100644 --- a/pkg/balancer-js/src/pool-stable/encoder.ts +++ b/pkg/balancer-js/src/pool-stable/encoder.ts @@ -5,11 +5,13 @@ export enum StablePoolJoinKind { INIT = 0, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT, + ALL_TOKENS_IN_FOR_EXACT_BPT_OUT, } export enum StablePoolExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT = 0, BPT_IN_FOR_EXACT_TOKENS_OUT, + EXACT_BPT_IN_FOR_ALL_TOKENS_OUT, } export class StablePoolEncoder { @@ -49,10 +51,17 @@ export class StablePoolEncoder { [StablePoolJoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT, bptAmountOut, enterTokenIndex] ); + /** + * Encodes the userData parameter for joining a StablePool proportionally + * @param bptAmountOut - the amount of BPT to be minted + */ + static joinAllTokensInForExactBptOut = (bptAmountOut: BigNumberish): string => + defaultAbiCoder.encode(['uint256', 'uint256'], [StablePoolJoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT, bptAmountOut]); + /** * Encodes the userData parameter for exiting a StablePool by removing a single token in return for an exact amount of BPT * @param bptAmountIn - the amount of BPT to be burned - * @param enterTokenIndex - the index of the token to removed from the pool + * @param exitTokenIndex - the index of the token to removed from the pool */ static exitExactBPTInForOneTokenOut = (bptAmountIn: BigNumberish, exitTokenIndex: number): string => defaultAbiCoder.encode( @@ -70,4 +79,11 @@ export class StablePoolEncoder { ['uint256', 'uint256[]', 'uint256'], [StablePoolExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT, amountsOut, maxBPTAmountIn] ); + + /** + * Encodes the userData parameter for exiting a StablePool proportionally + * @param bptAmountIn - the amount of BPT to burn in exchange for withdrawn tokens + */ + static exitExactBptInForTokensOut = (bptAmountIn: BigNumberish): string => + defaultAbiCoder.encode(['uint256', 'uint256'], [StablePoolExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT, bptAmountIn]); } diff --git a/pkg/deployments/README.md b/pkg/deployments/README.md index edef7f30e0..4fc4a9d5df 100644 --- a/pkg/deployments/README.md +++ b/pkg/deployments/README.md @@ -104,6 +104,7 @@ Returns an object with all contracts from a deployment and their addresses. | Protocol Fee Splitter | [`20221027-fee-splitter`](./tasks/20221027-fee-splitter) | | Linear Pools for Aave aTokens with built-in rebalancing | [`20221115-aave-rebalanced-linear-pool`](./tasks/20221115-aave-rebalanced-linear-pool) | | Pool Recovery Helper | [`20221123-pool-recovery-helper`](./tasks/20221123-pool-recovery-helper) | +| Composable Stable Pools V2 | [`20221122-composable-stable-pool-v2`](./tasks/20221122-composable-stable-pool-v2) | | Authorizer Adaptor Entrypoint | [`20221124-authorizer-adaptor-entrypoint`](./tasks/20221124-authorizer-adaptor-entrypoint) | | Timelock Authorizer, governance contract | [`20221202-timelock-authorizer`](./tasks/20221202-timelock-authorizer) | @@ -151,4 +152,5 @@ Go to each deprecated deployment's readme file to learn more about why it is dep | Optimism Root Gauges, for veBAL voting | [`20220628-optimism-root-gauge-factory`](./tasks/deprecated/20220628-optimism-root-gauge-factory) | | Batch Relayer V3 | [`20220720-batch-relayer-v3`](./tasks/deprecated/20220720-batch-relayer-v3) | | Linear Pools for Aave aTokens with built-in rebalancing | [`20220817-aave-rebalanced-linear-pool`](./tasks/deprecated/20220817-aave-rebalanced-linear-pool) | +| Composable Stable Pools | [`20220906-composable-stable-pool`](./tasks/deprecated/20220906-composable-stable-pool) | | Managed Pool | [`20221021-managed-pool`](./tasks/deprecated/20221021-managed-pool) | diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/abi/ComposableStablePoolFactory.json b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/abi/ComposableStablePoolFactory.json new file mode 100644 index 0000000000..1dcb461dca --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/abi/ComposableStablePoolFactory.json @@ -0,0 +1,278 @@ +[ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "protocolFeeProvider", + "type": "address" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "poolVersion", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + }, + { + "internalType": "contract IRateProvider[]", + "name": "rateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "contract ComposableStablePool", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCodeContracts", + "outputs": [ + { + "internalType": "address", + "name": "contractA", + "type": "address" + }, + { + "internalType": "address", + "name": "contractB", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseConfiguration", + "outputs": [ + { + "internalType": "uint256", + "name": "pauseWindowDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodDuration", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolVersion", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeePercentagesProvider", + "outputs": [ + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/artifact/ComposableStablePoolFactory.json b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/artifact/ComposableStablePoolFactory.json new file mode 100644 index 0000000000..0da8ddd16e --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/artifact/ComposableStablePoolFactory.json @@ -0,0 +1,287 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ComposableStablePoolFactory", + "sourceName": "contracts/ComposableStablePoolFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "protocolFeeProvider", + "type": "address" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "poolVersion", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + }, + { + "internalType": "contract IRateProvider[]", + "name": "rateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "contract ComposableStablePool", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCodeContracts", + "outputs": [ + { + "internalType": "address", + "name": "contractA", + "type": "address" + }, + { + "internalType": "address", + "name": "contractB", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseConfiguration", + "outputs": [ + { + "internalType": "uint256", + "name": "pauseWindowDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodDuration", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolVersion", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeePercentagesProvider", + "outputs": [ + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101806040523480156200001257600080fd5b50604051620097243803806200972483398101604081905262000035916200036d565b83836040518060200162000049906200021c565b601f1982820381018352601f90910116604052805183903090839060006002820460a081905280830360e08190528185529091508362000095816200013d602090811b6200067c17901c565b60601b6001600160601b0319166080528285018051838252620000c4826200013d602090811b6200067c17901c565b6001600160601b0319606091821b811660c05296909352905261010095909552505092821b831661012052509290921b909116610140525050426276a700016101605281516200011c9060029060208501906200022a565b508051620001329060039060208401906200022a565b505050505062000415565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506200018b6001600160a01b03831615156101ac62000191565b50919050565b81620001a257620001a281620001a6565b5050565b620001b8816210905360ea1b620001bb565b50565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b617ff3806200173183390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029d57825182559160200191906001019062000280565b50620002ab929150620002af565b5090565b5b80821115620002ab5760008155600101620002b0565b600082601f830112620002d7578081fd5b81516001600160401b0380821115620002ee578283fd5b6040516020601f8401601f191682018101838111838210171562000310578586fd5b806040525081945083825286818588010111156200032d57600080fd5b600092505b8383101562000351578583018101518284018201529182019162000332565b83831115620003635760008185840101525b5050505092915050565b6000806000806080858703121562000383578384fd5b84516200039081620003ff565b6020860151909450620003a381620003ff565b60408601519093506001600160401b0380821115620003c0578384fd5b620003ce88838901620002c6565b93506060870151915080821115620003e4578283fd5b50620003f387828801620002c6565b91505092959194509250565b6001600160a01b0381168114620001b857600080fd5b60805160601c60a05160c05160601c60e051610100516101205160601c6101405160601c610160516112a36200048e60003980610232528061025b52508061055d5250806105d35250806105835250806106e3525080610209528061075f5250806107045250806101e8528061073b52506112a36000f3fe608060405234801561001057600080fd5b50600436106100de5760003560e01c80636634b7531161008c578063739238d611610066578063739238d61461018f578063851c1bb3146101975780638d928af8146101b7578063aaabadc5146101bf576100de565b80636634b7531461014757806366b59f6c146101675780636c57f5a914610187576100de565b80632f2770db116100bd5780632f2770db1461012d5780633f819b6f1461013757806354fd4d501461013f576100de565b8062c194db146100e3578063174481fa146101015780632da47c4014610117575b600080fd5b6100eb6101c7565b6040516100f89190611050565b60405180910390f35b6101096101e6565b6040516100f8929190610fe9565b61011f61022c565b6040516100f89291906111e8565b610135610296565b005b6100eb6102fb565b6100eb6103af565b61015a610155366004610cdd565b61042b565b6040516100f89190611010565b61017a610175366004610d71565b610456565b6040516100f89190611063565b61015a610552565b61017a61055b565b6101aa6101a5366004610d15565b61057f565b6040516100f8919061101b565b61017a6105d1565b61017a6105f5565b60606101e1604051806020016040528060008152506106db565b905090565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009091565b600080427f000000000000000000000000000000000000000000000000000000000000000081101561028857807f000000000000000000000000000000000000000000000000000000000000000003925062278d009150610291565b60009250600091505b509091565b61029e6107b4565b6102a66107fd565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790556040517f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d5090600090a1565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b5050505050905090565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600080600061046361022c565b91509150610542604051806101c0016040528061047e6105d1565b73ffffffffffffffffffffffffffffffffffffffff1681526020016104a161055b565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018a81526020018981526020018881526020018b81526020018781526020018481526020018381526020018673ffffffffffffffffffffffffffffffffffffffff16815260200161051c6102fb565b905260405161052e9190602001611084565b604051602081830303815290604052610812565b9c9b505050505050505050505050565b60015460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016105b4929190610fb9565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105ff6105d1565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e19190610d55565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506106d573ffffffffffffffffffffffffffffffffffffffff831615156101ac6108a6565b50919050565b8051604080517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000818101858101848101602090810190965280855293957f00000000000000000000000000000000000000000000000000000000000000009592947f000000000000000000000000000000000000000000000000000000000000000094938801866000828a3c846000888301883c50602089810190898501016107a68183866108b8565b505050505050505050919050565b60006107e36000357fffffffff000000000000000000000000000000000000000000000000000000001661057f565b90506107fa6107f28233610932565b6101916108a6565b50565b610810610808610552565b1560d36108a6565b565b600061081c6107fd565b6000610827836109d1565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555192935090917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a292915050565b816108b4576108b481610a19565b5050565b5b602081106108f65781518352602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016108b9565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b600061093c6105f5565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161097893929190611024565b60206040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190610cf9565b90505b92915050565b600060606109de836106db565b905060008151602083016000f0905073ffffffffffffffffffffffffffffffffffffffff8116610a12573d6000803e3d6000fd5b9392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818106603090810160081b83860601918390049283060160101b016642414c230000300160c81b6044526107fa917f42414c0000000000000000000000000000000000000000000000000000000000906242414c90606490fd5b80356109cb8161123d565b600082601f830112610ac3578081fd5b8135610ad6610ad18261121d565b6111f6565b818152915060208083019084810181840286018201871015610af757600080fd5b60005b84811015610b1f578135610b0d8161125f565b84529282019290820190600101610afa565b505050505092915050565b600082601f830112610b3a578081fd5b8135610b48610ad18261121d565b818152915060208083019084810181840286018201871015610b6957600080fd5b60005b84811015610b1f578135610b7f8161123d565b84529282019290820190600101610b6c565b600082601f830112610ba1578081fd5b8135610baf610ad18261121d565b818152915060208083019084810181840286018201871015610bd057600080fd5b60005b84811015610b1f578135610be68161123d565b84529282019290820190600101610bd3565b600082601f830112610c08578081fd5b8135610c16610ad18261121d565b818152915060208083019084810181840286018201871015610c3757600080fd5b60005b84811015610b1f57813584529282019290820190600101610c3a565b600082601f830112610c66578081fd5b813567ffffffffffffffff811115610c7c578182fd5b610cad60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016111f6565b9150808252836020828501011115610cc457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610cee578081fd5b8135610a128161123d565b600060208284031215610d0a578081fd5b8151610a128161125f565b600060208284031215610d26578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a12578182fd5b600060208284031215610d66578081fd5b8151610a128161123d565b60008060008060008060008060006101208a8c031215610d8f578485fd5b893567ffffffffffffffff80821115610da6578687fd5b610db28d838e01610c56565b9a5060208c0135915080821115610dc7578687fd5b610dd38d838e01610c56565b995060408c0135915080821115610de8578687fd5b610df48d838e01610b2a565b985060608c0135975060808c0135915080821115610e10578687fd5b610e1c8d838e01610b91565b965060a08c0135915080821115610e31578586fd5b610e3d8d838e01610bf8565b955060c08c0135915080821115610e52578485fd5b50610e5f8c828d01610ab3565b93505060e08a01359150610e778b6101008c01610aa8565b90509295985092959850929598565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208085019450808401835b83811015610ed1578151151587529582019590820190600101610eb3565b509495945050505050565b6000815180845260208085019450808401835b83811015610ed157815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610eef565b6000815180845260208085019450808401835b83811015610ed157815187529582019590820190600101610f34565b60008151808452815b81811015610f7557602081850181015186830182015201610f59565b81811115610f865782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b6000602082526109c86020830184610f50565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060208252611098602083018451610e86565b60208301516110aa6040840182610e86565b5060408301516101c08060608501526110c76101e0850183610f50565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030160808701526111038483610f50565b935060808701519150808685030160a08701526111208483610edc565b935060a08701519150808685030160c087015261113d8483610edc565b935060c08701519150808685030160e087015261115a8483610f21565b935060e087015191506101008187860301818801526111798584610ea0565b908801516101208881019190915288015161014080890191909152880151610160808901919091528801516101808089019190915288015190945091506101a06111c581880184610e86565b8701518685039091018387015290506111de8382610f50565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561121557600080fd5b604052919050565b600067ffffffffffffffff821115611233578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff811681146107fa57600080fd5b80151581146107fa57600080fdfea2646970667358221220139c11f5919330a49b431e9ec65da6abcaecfa2895b17cea9c855010670ff62c64736f6c634300070100336105006040523480156200001257600080fd5b5060405162007ff338038062007ff3833981016040819052620000359162001b55565b6020810151600019620000488362000d93565b620000538462000dcc565b8461010001518560000151600087604001518860600151620000808a608001513062000e1560201b60201c565b8a60800151516001016001600160401b03811180156200009f57600080fd5b50604051908082528060200260200182016040528015620000ca578160200160208202803683370190505b508b61012001518c61014001518d61016001518e6101800151828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200012c929190620017f2565b50805162000142906004906020840190620017f2565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001c090506276a70083111561019462000faf565b620001d462278d0082111561019562000faf565b4290910161014081905201610160528551620001f6906002111560c862000faf565b620002106200020462000fc4565b8751111560c962000faf565b620002268662000fc960201b6200154e1760201c565b620002318462000fd5565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f9062000262908d9060040162001ddb565b602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062001b1d565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002ed9084908b908b9060040162001d3f565b600060405180830381600087803b1580156200030857600080fd5b505af11580156200031d573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036457600080fd5b505afa15801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f919062001b36565b60601b6001600160601b0319166101a05250620003d1995050506001891015965061012c955062000faf945050505050565b620003e461138882111561012d62000faf565b6000620003ff826103e86200106960201b620015581760201c565b90506200040c8162001098565b5050805151620004216002821160c862000faf565b6200044660018203836020015151846040015151620010d760201b620015831760201c565b6101c0819052815180516000906200045a57fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200049157fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004c857fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620004fe57600062000517565b8151805160039081106200050e57fe5b60200260200101515b60601b6001600160601b03191661026052600481116200053957600062000552565b8151805160049081106200054957fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005745760006200058d565b8151805160059081106200058457fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005c69190600090620005b257fe5b6020026020010151620010f760201b60201c565b6102c05281518051620005e091906001908110620005b257fe5b6102e05281518051620005fa91906002908110620005b257fe5b61030052600381116200060f57600062000625565b620006258260000151600381518110620005b257fe5b61032052600481116200063a57600062000650565b620006508260000151600481518110620005b257fe5b6103405260058111620006655760006200067b565b6200067b8260000151600581518110620005b257fe5b61036052815151600019015b600081118015620006b857508251805130919083908110620006a557fe5b60200260200101516001600160a01b0316115b15620006c8576000190162000687565b6101e08190528251516060906001600160401b0381118015620006ea57600080fd5b5060405190808252806020026020018201604052801562000715578160200160208202803683370190505b50905060008080805b8751518110156200093857858110156200085457876020015181815181106200074357fe5b60200260200101518582815181106200075857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007c160006001600160a01b03168683815181106200079457fe5b60200260200101516001600160a01b031614158260060186620011c660201b620015a0179092919060201c565b935087604001518181518110620007d457fe5b60200260200101511562000849576200082060006001600160a01b0316868381518110620007fe57fe5b60200260200101516001600160a01b0316141561015562000faf60201b60201c565b6200083d60018286620011c660201b620015a0179092919060201c565b9350600192506200084e565b600191505b6200092f565b8581146200092f57876020015160018203815181106200087057fe5b60200260200101518582815181106200088557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008c160006001600160a01b03168683815181106200079457fe5b935087604001516001820381518110620008d757fe5b6020026020010151156200092a576200090160006001600160a01b0316868381518110620007fe57fe5b6200091e60018286620011c660201b620015a0179092919060201c565b9350600192506200092f565b600191505b6001016200071e565b50811560f890811b610460528115901b61048052835184906000906200095a57fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200098d57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009c057fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003845111620009f757600062000a0e565b8360038151811062000a0557fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a3157600062000a48565b8360048151811062000a3f57fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a6b57600062000a82565b8360058151811062000a7957fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000ac595509293509190620010d7811b6200158317901c565b805160609062000ad6903062000e15565b8051909150600019015b60008111801562000b165750306001600160a01b031682828151811062000b0357fe5b60200260200101516001600160a01b0316115b1562000b26576000190162000ae0565b6000805b84515181101562000c3f578281141562000b4357600191505b60208501518051828401916000918490811062000b5c57fe5b60200260200101516001600160a01b03161462000c355762000bb6818760200151848151811062000b8957fe5b60200260200101518860400151858151811062000ba257fe5b6020026020010151620011ef60201b60201c565b8560200151828151811062000bc757fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000c0b57fe5b602002602001015160405162000c22919062001df0565b60405180910390a362000c3581620012ea565b5060010162000b2a565b5050505050600019811460f881901b6104c0526001600160601b0319606084901b166104a05262000c7283600262001329565b62000c7f83600362001329565b801562000c995762000c9383600062001329565b62000d58565b60405163178b2b9360e21b815262000d2d906001600160a01b03851690635e2cae4c9062000ccd9060009060040162001df0565b60206040518083038186803b15801562000ce657600080fd5b505afa15801562000cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d21919062001b1d565b83111561025862000faf565b600060008051602062007fd38339815191528360405162000d4f919062001df0565b60405180910390a25b8062000d65578162000d68565b60005b6104e0525050506101a0810151805162000d8b91600d91602090910190620017f2565b505062001e62565b62000d9d62001873565b6040518060600160405280836080015181526020018360a0015181526020018360c0015181525090505b919050565b62000dd662001873565b604051806060016040528062000df784608001513062000e1560201b60201c565b81526020018360a0015181526020018360e001518152509050919050565b606082516001016001600160401b038111801562000e3257600080fd5b5060405190808252806020026020018201604052801562000e5d578160200160208202803683370190505b50905082516000141562000ea057818160008151811062000e7a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000fa9565b82515b60008111801562000edc5750826001600160a01b031684600183038151811062000ec957fe5b60200260200101516001600160a01b0316115b1562000f295783600182038151811062000ef257fe5b602002602001015182828151811062000f0757fe5b6001600160a01b03909216602092830291909101909101526000190162000ea3565b60005b8181101562000f785784818151811062000f4257fe5b602002602001015183828151811062000f5757fe5b6001600160a01b039092166020928302919091019091015260010162000f2c565b508282828151811062000f8757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000fc05762000fc081620014d4565b5050565b600690565b8062000fc081620014e9565b62000fee62000fe362001570565b82101560cb62000faf565b6200100762000ffc62001579565b82111560ca62000faf565b620010298160c0603f6008546200158560201b620015c717909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200105e90839062001df0565b60405180910390a150565b600082820262001091841580620010895750838583816200108657fe5b04145b600362000faf565b9392505050565b620010a681804280620015aa565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516200105e919062001df0565b620010f28284148015620010ea57508183145b606762000faf565b505050565b60006001600160a01b0382163014156200111b5750670de0b6b3a764000062000dc7565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200115757600080fd5b505afa1580156200116c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001192919062001d1c565b60ff1690506000620011b16012836200161d60201b620015ef1760201c565b600a0a670de0b6b3a764000002949350505050565b60006001821b1984168284620011de576000620011e1565b60015b60ff16901b17949350505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200122b57600080fd5b505afa15801562001240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001266919062001b1d565b6000858152600a602090815260409091205491925062001295908290849086906200160562001635821b17901c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620012db90859062001df0565b60405180910390a25050505050565b6000818152600a602090815260409091205490620013139082906200163d62001691821b17901c565b6000928352600a60205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200135a90859060040162001df0565b60206040518083038186803b1580156200137357600080fd5b505afa15801562001388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ae919062001b1d565b905081620013f257620013cc81620016bc60201b620016551760201c565b600b80546001600160401b0319166001600160401b0392909216919091179055620014a6565b600282141562001448576200141281620016bc60201b620016551760201c565b600b80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620014a6565b600382141562001499576200146881620016bc60201b620016551760201c565b600b80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620014a6565b620014a66101bb620014d4565b8160008051602062007fd383398151915282604051620014c7919062001df0565b60405180910390a2505050565b620014e6816210905360ea1b620016da565b50565b600281511015620014fa57620014e6565b6000816000815181106200150a57fe5b602002602001015190506000600190505b8251811015620010f25760008382815181106200153457fe5b6020026020010151905062001565816001600160a01b0316846001600160a01b031610606562000faf60201b60201c565b91506001016200151b565b64e8d4a5100090565b67016345785d8a000090565b6000620015948484846200173b565b506001901b60001901811b1992909216911b1790565b620015c48160c060406200179660201b620016721760201c565b620015de83608060406200179660201b620016721760201c565b620015f7856040806200179660201b620016721760201c565b6200161187600060406200179660201b620016721760201c565b17171760095550505050565b60006200162f83831115600162000faf565b50900390565b60006200164a606084901c1561014962000faf565b6200168942830160e06020620016738660c083838c8c60006060620015c762001585871b17861c565b6200158560201b620015c717909392919060201c565b949350505050565b600062000fa9620016a283620017ab565b606080856200158560201b620015c717909392919060201c565b6000620016d66001600160401b038311156101ba62000faf565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6200174c6101008310606462000faf565b62001785600182101580156200177d57506200177960ff8461010003620017cb60201b620016851760201c565b8211155b606462000faf565b620010f283821c156101b462000faf565b6000620017a58484846200173b565b50501b90565b600062000fa96000606084620017e360201b6200169b179092919060201c565b6000818310620017dc578162001091565b5090919050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200183557805160ff191683800117855562001865565b8280016001018555821562001865579182015b828111156200186557825182559160200191906001019062001848565b50620016d692915062001894565b60405180606001604052806060815260200160608152602001606081525090565b5b80821115620016d6576000815560010162001895565b805162000fa98162001e4c565b600082601f830112620018c9578081fd5b8151620018e0620018da8262001e20565b62001df9565b8181529150602080830190848101818402860182018710156200190257600080fd5b6000805b858110156200193257825180151581146200191f578283fd5b8552938301939183019160010162001906565b50505050505092915050565b600082601f8301126200194f578081fd5b815162001960620018da8262001e20565b8181529150602080830190848101818402860182018710156200198257600080fd5b60005b84811015620019ae5781516200199b8162001e4c565b8452928201929082019060010162001985565b505050505092915050565b600082601f830112620019ca578081fd5b8151620019db620018da8262001e20565b818152915060208083019084810181840286018201871015620019fd57600080fd5b60005b84811015620019ae57815162001a168162001e4c565b8452928201929082019060010162001a00565b600082601f83011262001a3a578081fd5b815162001a4b620018da8262001e20565b81815291506020808301908481018184028601820187101562001a6d57600080fd5b60005b84811015620019ae5781518452928201929082019060010162001a70565b600082601f83011262001a9f578081fd5b81516001600160401b0381111562001ab5578182fd5b602062001acb601f8301601f1916820162001df9565b9250818352848183860101111562001ae257600080fd5b60005b8281101562001b0257848101820151848201830152810162001ae5565b8281111562001b145760008284860101525b50505092915050565b60006020828403121562001b2f578081fd5b5051919050565b60006020828403121562001b48578081fd5b8151620010918162001e4c565b60006020828403121562001b67578081fd5b81516001600160401b038082111562001b7e578283fd5b81840191506101c080838703121562001b95578384fd5b62001ba08162001df9565b905062001bae8684620018ab565b815262001bbf8660208501620018ab565b602082015260408301518281111562001bd6578485fd5b62001be48782860162001a8e565b60408301525060608301518281111562001bfc578485fd5b62001c0a8782860162001a8e565b60608301525060808301518281111562001c22578485fd5b62001c30878286016200193e565b60808301525060a08301518281111562001c48578485fd5b62001c5687828601620019b9565b60a08301525060c08301518281111562001c6e578485fd5b62001c7c8782860162001a29565b60c08301525060e08301518281111562001c94578485fd5b62001ca287828601620018b8565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018062001ce587828601620018ab565b908201526101a0838101518381111562001cfd578586fd5b62001d0b8882870162001a8e565b918301919091525095945050505050565b60006020828403121562001d2e578081fd5b815160ff8116811462001091578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001d8b5762001d78855162001e40565b8352938301939183019160010162001d63565b505084810360408601528551808252908201925081860190845b8181101562001dcd5762001dba835162001e40565b8552938301939183019160010162001da5565b509298975050505050505050565b602081016003831062001dea57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001e1857600080fd5b604052919050565b60006001600160401b0382111562001e36578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620014e657600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6104a05160601c6104c05160f81c6104e051615fb36200202060003980610e2552508061090a52508061088a52806108b552806108e05250806147a9525080614785525080612b3c52806143fe525080611c5c525080611c2c525080611bfc525080611bcc525080611b9c525080611b6c525080612fcc525080612f9c525080612f6c525080612f3c525080612f0c525080612edc525080611eb9525080611e77525080611e35525080611df3525080611db1525080611d6f52508061104e5250806116ca525080611279525080610be4525080611b40525080611b1c52508061114e52508061112a525080611086525080612d4a525080612d8c525080612d6b5250615fb36000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806370464016116101d3578063a457c2d711610104578063d505accf116100a2578063ddf4627b1161007c578063ddf4627b146106e3578063eb0f24d6146106eb578063ed24911d146106f3578063f4b7964d146106fb57610378565b8063d505accf146106aa578063d5c096c4146106bd578063dd62ed3e146106d057610378565b8063ab7759f1116100de578063ab7759f11461067f578063b35056b814610692578063b7b814fc1461069a578063d2946c2b146106a257610378565b8063a457c2d714610651578063a9059cbb14610664578063aaabadc51461067757610378565b8063851c1bb311610171578063893d20e81161014b578063893d20e8146106195780638d928af81461062e57806390193b7c1461063657806395d89b411461064957610378565b8063851c1bb3146105eb578063876f303b146105fe57806387ec68171461060657610378565b80637ecebe00116101ad5780637ecebe00146105a55780637f1260d1146105b857806382687a56146105db5780638456cb59146105e357610378565b8063704640161461055e57806370a082311461057157806374f3b0091461058457610378565b80633644e515116102ad57806354a844ba1161024b57806355c676281161022557806355c67628146105165780636028bfd41461051e578063679aefce1461053f5780636daccffa1461054757610378565b806354a844ba146104f357806354dea00a146104fb57806354fd4d501461050e57610378565b8063395093511161028757806339509351146104af5780633c975d51146104c25780633f4ba83a146104d857806350dd6ed9146104e057610378565b80633644e5151461048c57806338e9922e1461049457806338fff2d0146104a757610378565b80631c0de0511161031a57806323b872dd116102f457806323b872dd1461043e5780632df2c7c0146104515780632f1a0bc914610464578063313ce5671461047757610378565b80631c0de051146103fd5780631dd746ea14610414578063238a2d591461042957610378565b8063095ea7b311610356578063095ea7b3146103c35780630da0669c146103e357806315b0015b146103ed57806318160ddd146103f557610378565b806301ec954a1461037d57806304842d4c146103a657806306fdde03146103ae575b600080fd5b61039061038b366004615a13565b61070e565b60405161039d9190615dc3565b60405180910390f35b6103906107b4565b6103b66107c3565b60405161039d9190615e99565b6103d66103d1366004615638565b610859565b60405161039d9190615da0565b6103eb610870565b005b6103d6610908565b61039061092c565b610405610932565b60405161039d93929190615dab565b61041c61095b565b60405161039d9190615d68565b610431610965565b60405161039d9190615d1b565b6103d661044c366004615588565b610a00565b6103eb61045f366004615534565b610a74565b6103eb610472366004615b62565b610ad0565b61047f610bb3565b60405161039d9190615f04565b610390610bbc565b6103eb6104a2366004615b32565b610bc6565b610390610be2565b6103d66104bd366004615638565b610c06565b6104ca610c41565b60405161039d929190615edb565b6103eb610c6c565b6103eb6104ee36600461584e565b610c7e565b6103eb610c9c565b610390610509366004615534565b610cae565b6103b6610cc9565b610390610d2a565b61053161052c36600461574f565b610d3d565b60405161039d929190615eac565b610390610d74565b61054f610de0565b60405161039d93929190615ec5565b61039061056c366004615b32565b610dfb565b61039061057f366004615534565b610ec1565b61059761059236600461574f565b610edc565b60405161039d929190615d7b565b6103906105b3366004615534565b610fdf565b6105cb6105c6366004615534565b610fea565b60405161039d9493929190615ee9565b61039061104c565b6103eb611070565b6103906105f93660046157f2565b611082565b6103906110d4565b61053161061436600461574f565b611102565b610621611128565b60405161039d9190615d07565b61062161114c565b610390610644366004615534565b611170565b6103b661118b565b6103d661065f366004615638565b6111ec565b6103d6610672366004615638565b61122a565b610621611237565b6103d661068d366004615534565b611241565b6103d6611254565b6103eb611265565b610621611277565b6103eb6106b83660046155c8565b61129b565b6105976106cb36600461574f565b611326565b6103906106de366004615550565b611449565b610390611486565b6103eb61148c565b6103906114b8565b6103eb610709366004615638565b6114c2565b6000846080015161073b61072061114c565b6001600160a01b0316336001600160a01b03161460cd6116aa565b610750610746610be2565b82146101f46116aa565b6107586116b8565b61076a84846107656116c8565b6116ec565b6060610774611704565b905060008751600181111561078557fe5b1461079c57610797878787878561179d565b6107a9565b6107a987878787856117f6565b979650505050505050565b60006107be611831565b905090565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b6000610866338484611838565b5060015b92915050565b6108786118a0565b610880610908565b156108b0576108b07f0000000000000000000000000000000000000000000000000000000000000000600061190d565b6108db7f0000000000000000000000000000000000000000000000000000000000000000600261190d565b6109067f0000000000000000000000000000000000000000000000000000000000000000600361190d565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b600080600061093f611afd565b15925061094a611b1a565b9150610954611b3e565b9050909192565b60606107be611704565b606060006109716116c8565b905060608167ffffffffffffffff8111801561098c57600080fd5b506040519080825280602002602001820160405280156109b6578160200160208202803683370190505b50905060005b828110156109f9576109cd81611b62565b8282815181106109d957fe5b6001600160a01b03909216602092830291909101909101526001016109bc565b5091505090565b600080610a0d8533611449565b9050610a31336001600160a01b0387161480610a295750838210155b61019e6116aa565b610a3c858585611c8b565b336001600160a01b03861614801590610a5757506000198114155b15610a6957610a698533858403611838565b506001949350505050565b6000610a7f82611d6b565b90506000610a8c82611b62565b9050610aa56001600160a01b03821615156101556116aa565b6000828152600a6020526040812054610abd90611ef9565b9050610aca838383611f08565b50505050565b610ad8611feb565b610ae8600183101561012c6116aa565b610af961138883111561012d6116aa565b6000610b0582426115ef565b9050610b196201518082101561013d6116aa565b600080610b24612031565b91509150610b35811561013e6116aa565b6000610b43866103e8611558565b90506000838211610b7257610b6d610b5e6201518086611558565b610b688488611558565b6120a5565b610b8c565b610b8c610b826201518084611558565b610b688688611558565b9050610b9e600282111561013f6116aa565b610baa848342896120d8565b50505050505050565b60055460ff1690565b60006107be6114b8565b610bce611feb565b610bd6612127565b610bdf8161213a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610866918590610c3c90866121b3565b611838565b600c546000908190610c568160e9601761169b565b9250610c6581600060e961169b565b9150509091565b610c74611feb565b61090660006121c5565b610c86611feb565b610c8e612127565b610c988282612256565b5050565b610ca4611feb565b6109066001612364565b6000610cc1610cbc83611d6b565b6123bb565b90505b919050565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6008546000906107be9060c0603f61169b565b60006060610d538651610d4e6116c8565b61240e565b610d688989898989898961241b61243d6124a6565b97509795505050505050565b60006060600080600080610d8661263d565b9398509196509450925090506000610d9e85856121b3565b90506000610daa612031565b5090506000848214610dc557610dc0828961272d565b610dc7565b835b9050610dd3818461288f565b9850505050505050505090565b6000806000610ded612031565b90949093506103e892509050565b6000610e05611254565b15610e1257506000610cc4565b81610e5e57610e1f610908565b610e49577f0000000000000000000000000000000000000000000000000000000000000000610e57565b600b5467ffffffffffffffff165b9050610cc4565b6002821415610e865750600b5468010000000000000000900467ffffffffffffffff16610cc4565b6003821415610eb65750600b54700100000000000000000000000000000000900467ffffffffffffffff16610cc4565b610cc46101bb6128e0565b6001600160a01b031660009081526020819052604090205490565b60608088610eeb61072061114c565b610ef6610746610be2565b60606000610f038661290a565b15610f2b57610f10612939565b610f2289610f1c61092c565b8861294c565b92509050610f7d565b610f336116b8565b6060610f3d611704565b9050610f498a82612990565b610f6d8d8d8d8d8d610f59611254565b610f63578d610f66565b60005b878e61241b565b93509150610f7b838261243d565b505b610f878b826129f9565b81895167ffffffffffffffff81118015610fa057600080fd5b50604051908082528060200260200182016040528015610fca578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610cc182611170565b6000806000806000600a6000610fff88611d6b565b815260208101919091526040016000205490506110208115156101556116aa565b61102981612a03565b945061103481612a11565b935061103f81612a1f565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611078611feb565b61090660016121c5565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016110b7929190615c91565b604051602081830303815290604052805190602001209050919050565b60008060006110e161263d565b505092509250506110fb81836121b390919063ffffffff16565b9250505090565b600060606111138651610d4e6116c8565b610d6889898989898989612a41612a526124a6565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6000806111f93385611449565b90508083106112135761120e33856000611838565b611220565b6112203385858403611838565b5060019392505050565b6000610866338484611c8b565b60006107be612abb565b6000610cc161124f83611d6b565b612b35565b6008546000906107be9060ff612b5d565b61126d611feb565b6109066000612364565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112ca8c611170565b896040516020016112e096959493929190615deb565b6040516020818303038152906040528051906020012090506113118882611308878787612b67565b886101f8612ba6565b61131c888888611838565b5050505050505050565b6060808861133561072061114c565b611340610746610be2565b6113486116b8565b6060611352611704565b905061135c61092c565b61140957600060606113718d8d8d868b612bfd565b9150915061138a611380611831565b83101560cc6116aa565b61139c6000611397611831565b612cd6565b6113af8b6113a8611831565b8403612cd6565b6113b98184612a52565b808a5167ffffffffffffffff811180156113d257600080fd5b506040519080825280602002602001820160405280156113fc578160200160208202803683370190505b5095509550505050610fd2565b6114138882612990565b6000606061143b8d8d8d8d8d611427611254565b611431578d611434565b60005b898e612a41565b915091506113af8b83612cd6565b600061145361114c565b6001600160a01b0316826001600160a01b03161415611475575060001961086a565b61147f8383612ce0565b905061086a565b60001981565b611494611feb565b60008061149f612031565b915091506114af816101406116aa565b610c9882612d0b565b60006107be612d46565b6114ca611feb565b60006114d583611d6b565b905060006114e282611b62565b90506114fb6001600160a01b03821615156101556116aa565b611506828285611f08565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516115409190615dc3565b60405180910390a350505050565b80610c9881612de3565b600082820261157c84158061157557508385838161157257fe5b04145b60036116aa565b9392505050565b61159b828414801561159457508183145b60676116aa565b505050565b60006001821b19841682846115b65760006115b9565b60015b60ff16901b17949350505050565b60006115d4848484612e5c565b5082821b6000196001831b01831b198516175b949350505050565b60006115ff8383111560016116aa565b50900390565b6000611618606084901c156101496116aa565b6115e742830160e060206116358660c083838c8c600060606115c7565b9291906115c7565b6000610cc161164b83612a03565b83906060806115c7565b600061166e67ffffffffffffffff8311156101ba6116aa565b5090565b600061167f848484612e5c565b50501b90565b6000818310611694578161157c565b5090919050565b6001901b6000190191901c1690565b81610c9857610c98816128e0565b6116c0612ea2565b610906612eaa565b7f000000000000000000000000000000000000000000000000000000000000000090565b61159b81841080156116fd57508183105b60646116aa565b606060006117106116c8565b905060608167ffffffffffffffff8111801561172b57600080fd5b50604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b828110156109f95761177e61176f826123bb565b61177883612ed2565b90612ff0565b82828151811061178a57fe5b602090810291909101015260010161175b565b60208501516000906001600160a01b03163014806117c7575060408601516001600160a01b031630145b6117dd576117d8868686868661301c565b6117ea565b6117ea8686868686613086565b90505b95945050505050565b60208501516000906001600160a01b0316301480611820575060408601516001600160a01b031630145b6117dd576117d8868686868661318a565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611893908590615dc3565b60405180910390a3505050565b6118a8612127565b606060008060006118b761263d565b94509450945050935060008311156118d2576118d2836131e1565b60006118dc612031565b50905060008382146118f7576118f2828761272d565b6118f9565b825b905061190582826131f2565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611955908590600401615dc3565b60206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190615b4a565b9050816119f3576119b581611655565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611ac0565b6002821415611a5057611a0581611655565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611ac0565b6003821415611ab557611a6281611655565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611ac0565b611ac06101bb6128e0565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611af09190615dc3565b60405180910390a2505050565b6000611b07611b3e565b4211806107be57505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611b9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415611bc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415611bf057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415611c2057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415611c5057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b610cc46101356128e0565b611ca26001600160a01b03841615156101986116aa565b611cb96001600160a01b03831615156101996116aa565b611cc483838361159b565b6001600160a01b038316600090815260208190526040902054611cea90826101a0613218565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d1990826121b3565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611893908590615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611daf57506000610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611df157506001610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e3357506002610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e7557506003610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611eb757506004610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c8057506005610cc4565b6000610cc18260c0602061169b565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615b4a565b6000858152600a6020526040902054909150611f98818385611605565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611fdc908590615dc3565b60405180910390a25050505050565b600061201a6000357fffffffff0000000000000000000000000000000000000000000000000000000016611082565b9050610bdf612029823361322e565b6101916116aa565b600080600080600080612042613317565b93509350935093508042101561209557600194508383111561207957818103824203858503028161206f57fe5b0484019550612090565b818103824203848603028161208a57fe5b04840395505b61209d565b600094508295505b505050509091565b60006120b482151560046116aa565b826120c15750600061086a565b8160018403816120cd57fe5b04600101905061086a565b6120e484848484613376565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516121199493929190615ee9565b60405180910390a150505050565b610906612132611afd565b6101926116aa565b61214f6121456133b5565b82101560cb6116aa565b61216461215a6133be565b82111560ca6116aa565b600854612175908260c0603f6115c7565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906121a8908390615dc3565b60405180910390a150565b600082820161157c84821015836116aa565b80156121e5576121e06121d6611b1a565b42106101936116aa565b6121fa565b6121fa6121f0611b3e565b42106101a96116aa565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906121a8908390615da0565b6000612260610be2565b9050600061226c61114c565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401612299929190615e64565b60806040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615b83565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250612336915085908790600401615e4b565b600060405180830381600087803b15801561235057600080fd5b505af115801561131c573d6000803e3d6000fd5b600854612373908260ff6115a0565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906123a6908390615da0565b60405180910390a180610bdf57610bdf6133ca565b60006123c561104c565b8214156123db5750670de0b6b3a7640000610cc4565b6000828152600a602052604090205480156123fe576123f981612a03565b61157c565b670de0b6b3a76400009392505050565b610c9881831460676116aa565b6000606061242c600088868661349c565b915091509850989650505050505050565b8151815161244c90829061240e565b60005b81811015610aca5761248784828151811061246657fe5b602002602001015184838151811061247a57fe5b602002602001015161288f565b84828151811061249357fe5b602090810291909101015260010161244f565b333014612595576000306001600160a01b03166000366040516124ca929190615cc1565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050806000811461251b57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612577573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61259d6116b8565b60606125a7611704565b90506125b38782612990565b600060606125cb8c8c8c8c8c8c898d8d63ffffffff16565b915091506125dd81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6060600080600080606061264f61114c565b6001600160a01b031663f94d4668612665610be2565b6040518263ffffffff1660e01b81526004016126819190615dc3565b60006040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190615663565b509150506126ea816126e5611704565b612990565b6126f38161354a565b965094506000612701610c41565b90945090506000612713888684613583565b945090506127218782613610565b95505050509091929394565b80516000908190815b8181101561276e5761276485828151811061274d57fe5b6020026020010151846121b390919063ffffffff16565b9250600101612736565b508161277f5760009250505061086a565b600082868302825b60ff811015612878578260005b868110156127d5576127cb6127a98387611558565b6127c68c84815181106127b857fe5b60200260200101518a611558565b613628565b9150600101612794565b5083945061282e61280d6128076127ec848a611558565b6128016127f9888d611558565b6103e8613628565b906121b3565b86611558565b6127c661281d8960010185611558565b6128016127f96103e889038a611558565b93508484111561285657600185850311612851578397505050505050505061086a565b61286f565b60018486031161286f578397505050505050505061086a565b50600101612787565b506128846101416128e0565b505050505092915050565b600061289e82151560046116aa565b826128ab5750600061086a565b670de0b6b3a7640000838102906128ce908583816128c557fe5b041460056116aa565b8281816128d757fe5b0491505061086a565b610bdf817f42414c0000000000000000000000000000000000000000000000000000000000613648565b6000808251118015610cc1575060ff80168280602001905181019061292f9190615bc3565b60ff161492915050565b610906612944611254565b6101b66116aa565b600060606000606061295d8761354a565b91509150600060606129708385896136c3565b91509150816129808260006136ef565b9550955050505050935093915050565b8151815161299f90829061240e565b60005b81811015610aca576129da8482815181106129b957fe5b60200260200101518483815181106129cd57fe5b6020026020010151612ff0565b8482815181106129e657fe5b60209081029190910101526001016129a2565b610c9882826137ac565b6000610cc18282606061169b565b6000610cc18260608061169b565b600080612a2b83611ef9565b9150612a3a8360e0602061169b565b9050915091565b6000606061242c600188868661349c565b81518151612a6190829061240e565b60005b81811015610aca57612a9c848281518110612a7b57fe5b6020026020010151848381518110612a8f57fe5b6020026020010151613878565b848281518110612aa857fe5b6020908102919091010152600101612a64565b6000612ac561114c565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190615832565b6000610cc17f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612bb1856138c6565b9050612bc7612bc18783876138e2565b836116aa565b612bd6428410156101b86116aa565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612c0c84613991565b9050612c276000826003811115612c1f57fe5b1460ce6116aa565b6060612c32856139a7565b9050612c408151875161240e565b612c4a8187612990565b6000612c54612031565b5090506060612c62836139bd565b90506000612c70838361272d565b9050806000612c8d6d8000000000000000000000000000836115ef565b9050612c998d82612cd6565b8086612ca361104c565b81518110612cad57fe5b602002602001018181525050612cc385846131f2565b509c939b50929950505050505050505050565b610c988282613a5f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612d1781824242613376565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516121a89190615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612db3613aec565b30604051602001612dc8959493929190615e1f565b60405160208183030381529060405280519060200120905090565b600281511015612df257610bdf565b600081600081518110612e0157fe5b602002602001015190506000600190505b825181101561159b576000838281518110612e2957fe5b60200260200101519050612e52816001600160a01b0316846001600160a01b03161060656116aa565b9150600101612e12565b612e6b610100831060646116aa565b612e93600182101580156116fd5750612e8960ff8461010003611685565b82111560646116aa565b61159b83821c156101b46116aa565b610906612127565b6000612eb46116c8565b905060005b81811015610c9857612eca81613af0565b600101612eb9565b600081612f0057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415612f3057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415612f6057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415612f9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415612fc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b600082820261300a84158061157557508385838161157257fe5b670de0b6b3a764000090049392505050565b60006130288583612990565b613049866060015183858151811061303c57fe5b6020026020010151613b44565b6060870152600061305c87878787613b50565b905061307b8184878151811061306e57fe5b6020026020010151613b64565b90506107a981613b70565b600080808751600181111561309757fe5b1490506130a48684612990565b6130c4876060015184836130b857866130ba565b875b8151811061303c57fe5b876060018181525050600060606000806130dd8a613b8c565b93509350935093506000806130f061104c565b8a1461311657613111878e60600151876131098e613bf5565b888b89613c2a565b613131565b613131878e60600151876131298f613bf5565b888b89613c63565b915091506131428486858985613c87565b8661315c57613157828a8d8151811061306e57fe5b613179565b613179828a8c8151811061316c57fe5b6020026020010151613d07565b9d9c50505050505050505050505050565b60006131998660600151613d13565b60608701526131a88583612990565b6131bc866060015183868151811061303c57fe5b606087015260006131cf87878787613d34565b90506107a98184868151811061316c57fe5b610bdf6131ec611277565b82612cd6565b6131ff81600060e9611672565b61320c8360e96017611672565b17600c55610c98613d48565b600061322784841115836116aa565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61324d611128565b6001600160a01b031614158015613268575061326883613d7e565b1561329057613275611128565b6001600160a01b0316336001600160a01b031614905061086a565b613298612abb565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016132c793929190615dcc565b60206040518083038186803b1580156132df57600080fd5b505afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f919061572f565b6000806000806133366000604060095461169b9092919063ffffffff16565b6009549094506133489060408061169b565b60095490935061335b906080604061169b565b60095490925061336e9060c0604061169b565b905090919293565b6133838160c06040611672565b6133908360806040611672565b61339c85604080611672565b6133a98760006040611672565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b60606133d461114c565b6001600160a01b031663f94d46686133ea610be2565b6040518263ffffffff1660e01b81526004016134069190615dc3565b60006040518083038186803b15801561341e57600080fd5b505afa158015613432573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261345a9190810190615663565b5091505061346a816126e5611704565b6060613475826139bd565b90506000613481612031565b5090506000613490828461272d565b9050610aca82826131f2565b60006060600060606000806134b089613b8c565b93509350935093506153d08a6134c857613d896134cc565b613e1e5b9050600060606134e4868689878f8f8963ffffffff16565b915091506153d08d6134f8576115ef6134fc565b6121b35b9050613509878383613e9c565b600061351989858463ffffffff16565b90506135288789888c85613c87565b836135348460006136ef565b9a509a5050505050505050505094509492505050565b600060606135718361355a61104c565b8151811061356457fe5b6020026020010151613f10565b61357a846139bd565b91509150915091565b60008060008060006135958888613f24565b92509250925060008684116135ab5760006135af565b8684035b905060008484116135c15760006135c5565b8484035b905060006135e06135d66000610dfb565b611778858761288f565b905060006135fb6135f16002610dfb565b611778858861288f565b919091019b939a509298505050505050505050565b600061157c61361f8484611558565b6127c684613fa6565b600061363782151560046116aa565b81838161364057fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000606060006136d284613fcc565b905060606136e1878784613fe2565b919791965090945050505050565b6060825160010167ffffffffffffffff8111801561370c57600080fd5b50604051908082528060200260200182016040528015613736578160200160208202803683370190505b50905060005b81518110156137a55761374d61104c565b8114613784578361375c61104c565b821061376b576001820361376d565b815b8151811061377757fe5b6020026020010151613786565b825b82828151811061379257fe5b602090810291909101015260010161373c565b5092915050565b6137c36001600160a01b038316151561019b6116aa565b6137cf8260008361159b565b6001600160a01b0382166000908152602081905260409020546137f590826101b2613218565b6001600160a01b0383166000908152602081905260409020556138286138238261381d61092c565b90614091565b61409f565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386c9190615dc3565b60405180910390a35050565b600061388782151560046116aa565b826138945750600061086a565b670de0b6b3a7640000838102906138ae908583816128c557fe5b8260018203816138ba57fe5b0460010191505061086a565b60006138d0612d46565b826040516020016110b7929190615cd1565b60006138f482516041146101b96116aa565b60208281015160408085015160608601518251600080825295019283905292939092811a9160019061392d908990859088908890615e7b565b6020604051602081039080840390855afa15801561394f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906139855750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610cc1919061595d565b60608180602001905181019061157c9190615978565b606080600183510367ffffffffffffffff811180156139db57600080fd5b50604051908082528060200260200182016040528015613a05578160200160208202803683370190505b50905060005b81518110156137a55783613a1d61104c565b8210613a2c5781600101613a2e565b815b81518110613a3857fe5b6020026020010151828281518110613a4c57fe5b6020908102919091010152600101613a0b565b613a6b6000838361159b565b613a7a6138238261280161092c565b6001600160a01b038216600090815260208190526040902054613a9d90826121b3565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061386c908590615dc3565b4690565b613af861104c565b811415613b0457610bdf565b6000818152600a60205260409020548015610c9857600080613b2583612a1f565b9150915080421115610aca57610aca84613b3e86611b62565b84611f08565b600061157c8383612ff0565b60006117ed600086606001518686866140a4565b600061157c8383613878565b6000610cc1613b85613b80610d2a565b613fa6565b8390613878565b60006060600080600080613b9e610c41565b91509150600060606000613bb38a8686614116565b9250925092506000613bc3612031565b5090506000868214613bde57613bd9828561272d565b613be0565b825b949c939b509099509297509095505050505050565b6000613c0c613c0261104c565b83141560646116aa565b613c1461104c565b821061166e57613c258260016115ef565b610cc1565b60008088613c4557613c4088888888888861416e565b613c53565b613c53888888888888614245565b9150915097509795505050505050565b60008088613c7957613c408888888888886142a6565b613c5388888888888861430c565b6000613c93868661272d565b90506000613ca1838561288f565b90506000613caf8683612ff0565b905080831115613cfd578083036000613cd9613cd383613cce84610dfb565b611558565b86613628565b90508015613cfa576000613ced8783613610565b9050613cf8816131e1565b505b50505b61131c88846131f2565b600061157c838361288f565b600080613d28613d21610d2a565b84906143bb565b905061157c83826115ef565b60006117ed600186606001518686866140a4565b6000613d526116c8565b905060005b81811015610c9857613d68816143f7565b15613d7657613d7681614426565b600101613d57565b6000610cc182614454565b600060606000613d988461445f565b90506001816002811115613da857fe5b1415613dc657613dbc87878a8c8989614475565b9250925050613e13565b6002816002811115613dd457fe5b1415613de557613dbc878a866144d4565b6000816002811115613df357fe5b1415613e0657613dbc87878a8c886144f2565b613e116101506128e0565b505b965096945050505050565b600060606000613e2d84613991565b90506001816003811115613e3d57fe5b1415613e5157613dbc87878a8c8989614593565b6003816003811115613e5f57fe5b1415613e7057613dbc878a866145e2565b6002816003811115613e7e57fe5b1415613e9157613dbc87878a8c88614600565b613e116101366128e0565b82518251613eab90829061240e565b60005b81811015613f0957613eea858281518110613ec557fe5b6020026020010151858381518110613ed957fe5b60200260200101518563ffffffff16565b858281518110613ef657fe5b6020908102919091010152600101613eae565b5050505050565b6000610cc182613f1e61092c565b906115ef565b6000806000613f3d84613f3887600161467a565b61272d565b9250613f47614783565b15613f6057613f56848661272d565b9150819050613f9f565b613f686147a7565b15613f8157829150613f7a848661272d565b9050613f9f565b613f9084613f3887600061467a565b9150613f9c848661272d565b90505b9250925092565b6000670de0b6b3a76400008210613fbe576000610cc1565b50670de0b6b3a76400000390565b60008180602001905181019061157c9190615bdf565b60606000613ff0838561288f565b9050845167ffffffffffffffff8111801561400a57600080fd5b50604051908082528060200260200182016040528015614034578160200160208202803683370190505b50915060005b8551811015614088576140698287838151811061405357fe5b6020026020010151612ff090919063ffffffff16565b83828151811061407557fe5b602090810291909101015260010161403a565b50509392505050565b600061157c83836001613218565b600255565b600060606140b1856139bd565b905060006140be85613bf5565b905060006140cb85613bf5565b905060006140d7612031565b50905060006140e6828661272d565b90508a15614108576140fc828686868e866147cb565b955050505050506117ed565b6140fc828686868e86614856565b6000606060008060606141288861354a565b9150915060008061413a838a8a613583565b91509150600061414a8584613610565b9050801561415b5761415b816131e1565b9390930199919850919650945050505050565b6000806060875167ffffffffffffffff8111801561418b57600080fd5b506040519080825280602002602001820160405280156141b5578160200160208202803683370190505b509050888188815181106141c557fe5b60200260200101818152505060006141e8878a8489896141e3610d2a565b6148e9565b90506142108a8a8a815181106141fa57fe5b60200260200101516115ef90919063ffffffff16565b89898151811061421c57fe5b6020908102919091010152600061423387836115ef565b919b919a509098505050505050505050565b60008060006142608689898c898961425b610d2a565b614b79565b9050614272818989815181106141fa57fe5b88888151811061427e57fe5b60209081029190910101526000614295868b6115ef565b919a91995090975050505050505050565b60008060006142c18689898c89896142bc610d2a565b614c68565b90506142e9818989815181106142d357fe5b60200260200101516121b390919063ffffffff16565b8888815181106142f557fe5b60209081029190910101526000614295868b6121b3565b6000806060875167ffffffffffffffff8111801561432957600080fd5b50604051908082528060200260200182016040528015614353578160200160208202803683370190505b5090508881888151811061436357fe5b6020026020010181815250506000614386878a848989614381610d2a565b614d35565b90506143988a8a8a815181106142d357fe5b8989815181106143a457fe5b6020908102919091010152600061423387836121b3565b60008282026143d584158061157557508385838161157257fe5b806143e457600091505061086a565b670de0b6b3a764000060001982016138ba565b6000610cc17f000000000000000000000000000000000000000000000000000000000000000060068401612b5d565b6000818152600a602052604090205461443e8161163d565b6000928352600a60205260409092209190915550565b6000610cc182614fb6565b600081806020019051810190610cc1919061589c565b6000606080600061448585614ff2565b915091506144958251885161240e565b6144a2826126e5886139bd565b60006144b48989858e8e6141e3610d2a565b90506144c48282111560cf6116aa565b9a91995090975050505050505050565b6000606060006144e384615015565b905060606136e1868884613fe2565b600060606000806145028561502b565b915091506145148651821060646116aa565b6060865167ffffffffffffffff8111801561452e57600080fd5b50604051908082528060200260200182016040528015614558578160200160208202803683370190505b50905061456c888884868e8e61425b610d2a565b81838151811061457857fe5b60209081029190910101529199919850909650505050505050565b600060608060006145a385615042565b915091506145b38751835161240e565b6145c0826126e5886139bd565b60006145d28989858e8e614381610d2a565b90506144c48282101560d06116aa565b6000606060006145f18461505a565b905060606136e1868389615070565b600060606000806146108561510c565b915091506146228651821060646116aa565b6060865167ffffffffffffffff8111801561463c57600080fd5b50604051908082528060200260200182016040528015614666578160200160208202803683370190505b50905061456c888884868e8e6142bc610d2a565b8151606090818167ffffffffffffffff8111801561469757600080fd5b506040519080825280602002602001820160405280156146c1578160200160208202803683370190505b50905060005b8281101561477a5760006146d961104c565b8210156146e657816146eb565b816001015b90506146f681612b35565b8061470d575085801561470d575061470d816143f7565b61472a5786828151811061471d57fe5b602002602001015161475a565b61475a87838151811061473957fe5b6020026020010151600a600084815260200190815260200160002054615123565b83838151811061476657fe5b6020908102919091010152506001016146c7565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006147dd838787815181106142d357fe5b8686815181106147e957fe5b60200260200101818152505060006148038888858861513e565b90508387878151811061481257fe5b60200260200101510387878151811061482757fe5b6020026020010181815250506148486001613f1e838a89815181106141fa57fe5b9150505b9695505050505050565b6000614868838786815181106141fa57fe5b86858151811061487457fe5b602002602001018181525050600061488e8888858961513e565b90508387868151811061489d57fe5b6020026020010151018786815181106148b257fe5b60200260200101818152505061484860016128018989815181106148d257fe5b6020026020010151846115ef90919063ffffffff16565b600080805b87518110156149275761491d88828151811061490657fe5b6020026020010151836121b390919063ffffffff16565b91506001016148ee565b506060865167ffffffffffffffff8111801561494257600080fd5b5060405190808252806020026020018201604052801561496c578160200160208202803683370190505b5090506000805b8951811015614a395760006149a4858c848151811061498e57fe5b602002602001015161387890919063ffffffff16565b90506149e68b83815181106149b557fe5b60200260200101516149e08c85815181106149cc57fe5b60200260200101518e86815181106141fa57fe5b90613878565b8483815181106149f257fe5b602002602001018181525050614a2e614a2782868581518110614a1157fe5b60200260200101516143bb90919063ffffffff16565b84906121b3565b925050600101614973565b506060895167ffffffffffffffff81118015614a5457600080fd5b50604051908082528060200260200182016040528015614a7e578160200160208202803683370190505b50905060005b8a51811015614b49576000848281518110614a9b57fe5b6020026020010151841115614b02576000614ac4614ab886613fa6565b8e858151811061405357fe5b90506000614ad8828e86815181106141fa57fe5b9050614af9614af282670de0b6b3a76400008d9003613878565b83906121b3565b92505050614b19565b8a8281518110614b0e57fe5b602002602001015190505b614b29818d84815181106141fa57fe5b838381518110614b3557fe5b602090810291909101015250600101614a84565b506000614b568c8361272d565b90506000614b64828a61288f565b9050613179614b7282613fa6565b8b906143bb565b600080614b9484614b8e876149e0818b6115ef565b906143bb565b90506000614ba48a8a848b61513e565b90506000614bb8828b8b815181106141fa57fe5b90506000805b8b51811015614be057614bd68c828151811061490657fe5b9150600101614bbe565b506000614c09828d8d81518110614bf357fe5b602002602001015161288f90919063ffffffff16565b90506000614c1682613fa6565b90506000614c2485836143bb565b90506000614c3286836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003612ff0565b82906121b3565b98505050505050505050979650505050505050565b600080614c7d84614b8e876149e0818b6121b3565b90506000614c8d8a8a848b61513e565b90506000614cb78a8a81518110614ca057fe5b6020026020010151836115ef90919063ffffffff16565b90506000805b8b51811015614cdf57614cd58c828151811061490657fe5b9150600101614cbd565b506000614cf2828d8d81518110614bf357fe5b90506000614cff82613fa6565b90506000614d0d85836143bb565b90506000614d1b86836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003613878565b600080805b8751811015614d5c57614d5288828151811061490657fe5b9150600101614d3a565b506060865167ffffffffffffffff81118015614d7757600080fd5b50604051908082528060200260200182016040528015614da1578160200160208202803683370190505b5090506000805b8951811015614e3b576000614dc3858c8481518110614bf357fe5b9050614e058b8381518110614dd457fe5b6020026020010151614dff8c8581518110614deb57fe5b60200260200101518e86815181106142d357fe5b9061288f565b848381518110614e1157fe5b602002602001018181525050614e30614a278286858151811061405357fe5b925050600101614da8565b506060895167ffffffffffffffff81118015614e5657600080fd5b50604051908082528060200260200182016040528015614e80578160200160208202803683370190505b50905060005b8a51811015614f4157600083858381518110614e9e57fe5b60200260200101511115614efa576000614ec3614ab886670de0b6b3a76400006115ef565b90506000614ed7828e86815181106141fa57fe5b9050614ef1614af282670de0b6b3a76400008d9003612ff0565b92505050614f11565b8a8281518110614f0657fe5b602002602001015190505b614f21818d84815181106142d357fe5b838381518110614f2d57fe5b602090810291909101015250600101614e86565b506000614f4e8c8361272d565b90506000614f5c828a61288f565b9050670de0b6b3a7640000811115614fa757614f9a8a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c00008301612ff0565b965050505050505061484c565b6000965050505050505061484c565b6000614fe17ff4b7964d00000000000000000000000000000000000000000000000000000000611082565b821480610cc15750610cc1826152fb565b606060008280602001905181019061500a91906158b7565b909590945092505050565b60008180602001905181019061157c91906158fc565b6000808280602001905181019061500a9190615928565b606060008280602001905181019061500a91906159bb565b60008180602001905181019061157c91906159d9565b6060600061507e8484613878565b90506060855167ffffffffffffffff8111801561509a57600080fd5b506040519080825280602002602001820160405280156150c4578160200160208202803683370190505b50905060005b8651811015615102576150e383888381518110614a1157fe5b8282815181106150ef57fe5b60209081029190910101526001016150ca565b5095945050505050565b6000808280602001905181019061500a91906159f5565b600061157c61513584613cce85612a11565b6127c684612a03565b60008084518602905060008560008151811061515657fe5b60200260200101519050600086518760008151811061517157fe5b60200260200101510290506000600190505b87518110156151d7576151bc6151b66151af848b85815181106151a257fe5b6020026020010151611558565b8a51611558565b88613628565b91506151cd88828151811061274d57fe5b9250600101615183565b508685815181106151e457fe5b60200260200101518203915060006151fc8788611558565b9050600061522861521c61521484610b688988611558565b6103e8611558565b8a89815181106151a257fe5b9050600061524361523c6152148b89613628565b86906121b3565b905060008061525f61525586866121b3565b610b688d866121b3565b905060005b60ff8110156152df57819250615294615281866128018586611558565b610b688e613f1e88612801886002611558565b9150828211156152bd576001838303116152b8575097506115e79650505050505050565b6152d7565b6001828403116152d7575097506115e79650505050505050565b600101615264565b506152eb6101426128e0565b5050505050505050949350505050565b60006153267f2f1a0bc900000000000000000000000000000000000000000000000000000000611082565b82148061535a57506153577feb0f24d600000000000000000000000000000000000000000000000000000000611082565b82145b80610cc15750610cc182600061538f7f38e9922e00000000000000000000000000000000000000000000000000000000611082565b8214806153c357506153c07f50dd6ed900000000000000000000000000000000000000000000000000000000611082565b82145b80610cc157506000610cc1565bfe5b803561086a81615f59565b600082601f8301126153ed578081fd5b81356154006153fb82615f39565b615f12565b81815291506020808301908481018184028601820187101561542157600080fd5b60005b8481101561288457813584529282019290820190600101615424565b600082601f830112615450578081fd5b815161545e6153fb82615f39565b81815291506020808301908481018184028601820187101561547f57600080fd5b60005b8481101561288457815184529282019290820190600101615482565b600082601f8301126154ae578081fd5b813567ffffffffffffffff8111156154c4578182fd5b6154d76020601f19601f84011601615f12565b91508082528360208285010111156154ee57600080fd5b8060208401602084013760009082016020015292915050565b80516003811061086a57600080fd5b80516004811061086a57600080fd5b80356002811061086a57600080fd5b600060208284031215615545578081fd5b813561157c81615f59565b60008060408385031215615562578081fd5b823561556d81615f59565b9150602083013561557d81615f59565b809150509250929050565b60008060006060848603121561559c578081fd5b83356155a781615f59565b925060208401356155b781615f59565b929592945050506040919091013590565b600080600080600080600060e0888a0312156155e2578283fd5b87356155ed81615f59565b965060208801356155fd81615f59565b95506040880135945060608801359350608088013561561b81615f6e565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561564a578182fd5b823561565581615f59565b946020939093013593505050565b600080600060608486031215615677578081fd5b835167ffffffffffffffff8082111561568e578283fd5b818601915086601f8301126156a1578283fd5b81516156af6153fb82615f39565b80828252602080830192508086018b8283870289010111156156cf578788fd5b8796505b848710156156fa5780516156e681615f59565b8452600196909601959281019281016156d3565b508901519097509350505080821115615711578283fd5b5061571e86828701615440565b925050604084015190509250925092565b600060208284031215615740578081fd5b8151801515811461157c578182fd5b600080600080600080600060e0888a031215615769578081fd5b87359650602088013561577b81615f59565b9550604088013561578b81615f59565b9450606088013567ffffffffffffffff808211156157a7578283fd5b6157b38b838c016153dd565b955060808a0135945060a08a0135935060c08a01359150808211156157d6578283fd5b506157e38a828b0161549e565b91505092959891949750929550565b600060208284031215615803578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461157c578182fd5b600060208284031215615843578081fd5b815161157c81615f59565b60008060408385031215615860578182fd5b823561586b81615f59565b9150602083013567ffffffffffffffff811115615886578182fd5b6158928582860161549e565b9150509250929050565b6000602082840312156158ad578081fd5b61157c8383615507565b6000806000606084860312156158cb578081fd5b6158d58585615507565b9250602084015167ffffffffffffffff8111156158f0578182fd5b61571e86828701615440565b6000806040838503121561590e578182fd5b6159188484615507565b9150602083015190509250929050565b60008060006060848603121561593c578081fd5b6159468585615507565b925060208401519150604084015190509250925092565b60006020828403121561596e578081fd5b61157c8383615516565b6000806040838503121561598a578182fd5b6159948484615516565b9150602083015167ffffffffffffffff8111156159af578182fd5b61589285828601615440565b6000806000606084860312156159cf578081fd5b6158d58585615516565b600080604083850312156159eb578182fd5b6159188484615516565b600080600060608486031215615a09578081fd5b6159468585615516565b60008060008060808587031215615a28578182fd5b843567ffffffffffffffff80821115615a3f578384fd5b818701915061012080838a031215615a55578485fd5b615a5e81615f12565b9050615a6a8984615525565b8152615a7989602085016153d2565b6020820152615a8b89604085016153d2565b6040820152606083013560608201526080830135608082015260a083013560a0820152615abb8960c085016153d2565b60c0820152615acd8960e085016153d2565b60e08201526101008084013583811115615ae5578687fd5b615af18b82870161549e565b828401525050809650506020870135915080821115615b0e578384fd5b50615b1b878288016153dd565b949794965050505060408301359260600135919050565b600060208284031215615b43578081fd5b5035919050565b600060208284031215615b5b578081fd5b5051919050565b60008060408385031215615b74578182fd5b50508035926020909101359150565b60008060008060808587031215615b98578182fd5b8451935060208501519250604085015191506060850151615bb881615f59565b939692955090935050565b600060208284031215615bd4578081fd5b815161157c81615f6e565b60008060408385031215615bf1578182fd5b8251615bfc81615f6e565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615c3b57815187529582019590820190600101615c1f565b509495945050505050565b60008151808452815b81811015615c6b57602081850181015186830182015201615c4f565b81811115615c7c5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015615d5c5783516001600160a01b031683529284019291840191600101615d37565b50909695505050505050565b60006020825261157c6020830184615c0c565b600060408252615d8e6040830185615c0c565b82810360208401526117ed8185615c0c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526115e76040830184615c46565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261157c6020830184615c46565b6000838252604060208301526115e76040830184615c0c565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715615f3157600080fd5b604052919050565b600067ffffffffffffffff821115615f4f578081fd5b5060209081020190565b6001600160a01b0381168114610bdf57600080fd5b60ff81168114610bdf57600080fdfea2646970667358221220dcc30bf1aa1b16ae6ad0c83c0807514f1e6fdbe66d9e246a013ce46ba54d53bf64736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100de5760003560e01c80636634b7531161008c578063739238d611610066578063739238d61461018f578063851c1bb3146101975780638d928af8146101b7578063aaabadc5146101bf576100de565b80636634b7531461014757806366b59f6c146101675780636c57f5a914610187576100de565b80632f2770db116100bd5780632f2770db1461012d5780633f819b6f1461013757806354fd4d501461013f576100de565b8062c194db146100e3578063174481fa146101015780632da47c4014610117575b600080fd5b6100eb6101c7565b6040516100f89190611050565b60405180910390f35b6101096101e6565b6040516100f8929190610fe9565b61011f61022c565b6040516100f89291906111e8565b610135610296565b005b6100eb6102fb565b6100eb6103af565b61015a610155366004610cdd565b61042b565b6040516100f89190611010565b61017a610175366004610d71565b610456565b6040516100f89190611063565b61015a610552565b61017a61055b565b6101aa6101a5366004610d15565b61057f565b6040516100f8919061101b565b61017a6105d1565b61017a6105f5565b60606101e1604051806020016040528060008152506106db565b905090565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009091565b600080427f000000000000000000000000000000000000000000000000000000000000000081101561028857807f000000000000000000000000000000000000000000000000000000000000000003925062278d009150610291565b60009250600091505b509091565b61029e6107b4565b6102a66107fd565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790556040517f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d5090600090a1565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b5050505050905090565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600080600061046361022c565b91509150610542604051806101c0016040528061047e6105d1565b73ffffffffffffffffffffffffffffffffffffffff1681526020016104a161055b565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018a81526020018981526020018881526020018b81526020018781526020018481526020018381526020018673ffffffffffffffffffffffffffffffffffffffff16815260200161051c6102fb565b905260405161052e9190602001611084565b604051602081830303815290604052610812565b9c9b505050505050505050505050565b60015460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016105b4929190610fb9565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105ff6105d1565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e19190610d55565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506106d573ffffffffffffffffffffffffffffffffffffffff831615156101ac6108a6565b50919050565b8051604080517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000818101858101848101602090810190965280855293957f00000000000000000000000000000000000000000000000000000000000000009592947f000000000000000000000000000000000000000000000000000000000000000094938801866000828a3c846000888301883c50602089810190898501016107a68183866108b8565b505050505050505050919050565b60006107e36000357fffffffff000000000000000000000000000000000000000000000000000000001661057f565b90506107fa6107f28233610932565b6101916108a6565b50565b610810610808610552565b1560d36108a6565b565b600061081c6107fd565b6000610827836109d1565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555192935090917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a292915050565b816108b4576108b481610a19565b5050565b5b602081106108f65781518352602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016108b9565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b600061093c6105f5565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161097893929190611024565b60206040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190610cf9565b90505b92915050565b600060606109de836106db565b905060008151602083016000f0905073ffffffffffffffffffffffffffffffffffffffff8116610a12573d6000803e3d6000fd5b9392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818106603090810160081b83860601918390049283060160101b016642414c230000300160c81b6044526107fa917f42414c0000000000000000000000000000000000000000000000000000000000906242414c90606490fd5b80356109cb8161123d565b600082601f830112610ac3578081fd5b8135610ad6610ad18261121d565b6111f6565b818152915060208083019084810181840286018201871015610af757600080fd5b60005b84811015610b1f578135610b0d8161125f565b84529282019290820190600101610afa565b505050505092915050565b600082601f830112610b3a578081fd5b8135610b48610ad18261121d565b818152915060208083019084810181840286018201871015610b6957600080fd5b60005b84811015610b1f578135610b7f8161123d565b84529282019290820190600101610b6c565b600082601f830112610ba1578081fd5b8135610baf610ad18261121d565b818152915060208083019084810181840286018201871015610bd057600080fd5b60005b84811015610b1f578135610be68161123d565b84529282019290820190600101610bd3565b600082601f830112610c08578081fd5b8135610c16610ad18261121d565b818152915060208083019084810181840286018201871015610c3757600080fd5b60005b84811015610b1f57813584529282019290820190600101610c3a565b600082601f830112610c66578081fd5b813567ffffffffffffffff811115610c7c578182fd5b610cad60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016111f6565b9150808252836020828501011115610cc457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610cee578081fd5b8135610a128161123d565b600060208284031215610d0a578081fd5b8151610a128161125f565b600060208284031215610d26578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a12578182fd5b600060208284031215610d66578081fd5b8151610a128161123d565b60008060008060008060008060006101208a8c031215610d8f578485fd5b893567ffffffffffffffff80821115610da6578687fd5b610db28d838e01610c56565b9a5060208c0135915080821115610dc7578687fd5b610dd38d838e01610c56565b995060408c0135915080821115610de8578687fd5b610df48d838e01610b2a565b985060608c0135975060808c0135915080821115610e10578687fd5b610e1c8d838e01610b91565b965060a08c0135915080821115610e31578586fd5b610e3d8d838e01610bf8565b955060c08c0135915080821115610e52578485fd5b50610e5f8c828d01610ab3565b93505060e08a01359150610e778b6101008c01610aa8565b90509295985092959850929598565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208085019450808401835b83811015610ed1578151151587529582019590820190600101610eb3565b509495945050505050565b6000815180845260208085019450808401835b83811015610ed157815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610eef565b6000815180845260208085019450808401835b83811015610ed157815187529582019590820190600101610f34565b60008151808452815b81811015610f7557602081850181015186830182015201610f59565b81811115610f865782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b6000602082526109c86020830184610f50565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060208252611098602083018451610e86565b60208301516110aa6040840182610e86565b5060408301516101c08060608501526110c76101e0850183610f50565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030160808701526111038483610f50565b935060808701519150808685030160a08701526111208483610edc565b935060a08701519150808685030160c087015261113d8483610edc565b935060c08701519150808685030160e087015261115a8483610f21565b935060e087015191506101008187860301818801526111798584610ea0565b908801516101208881019190915288015161014080890191909152880151610160808901919091528801516101808089019190915288015190945091506101a06111c581880184610e86565b8701518685039091018387015290506111de8382610f50565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561121557600080fd5b604052919050565b600067ffffffffffffffff821115611233578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff811681146107fa57600080fd5b80151581146107fa57600080fdfea2646970667358221220139c11f5919330a49b431e9ec65da6abcaecfa2895b17cea9c855010670ff62c64736f6c63430007010033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/build-info/ComposableStablePoolFactory.json b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/build-info/ComposableStablePoolFactory.json new file mode 100644 index 0000000000..4772ee4c68 --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/build-info/ComposableStablePoolFactory.json @@ -0,0 +1,240954 @@ +{ + "id": "2a4caae8f417d7ed1513c65f7410178d", + "_format": "hh-sol-build-info-1", + "solcVersion": "0.7.1", + "solcLongVersion": "0.7.1+commit.f4a555be", + "input": { + "language": "Solidity", + "sources": { + "contracts/ComposableStablePool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\nimport \"@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol\";\nimport \"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\";\n\nimport \"./ComposableStablePoolStorage.sol\";\nimport \"./ComposableStablePoolRates.sol\";\nimport \"./ComposableStablePoolStorage.sol\";\nimport \"./ComposableStablePoolRates.sol\";\nimport \"./ComposableStablePoolProtocolFees.sol\";\nimport \"./StablePoolAmplification.sol\";\nimport \"./StableMath.sol\";\n\n/**\n * @dev StablePool with preminted BPT and rate providers for each token, allowing for e.g. wrapped tokens with a known\n * price ratio, such as Compound's cTokens.\n *\n * BPT is preminted on Pool initialization and registered as one of the Pool's tokens, allowing for swaps to behave as\n * single-token joins or exits (by swapping a token for BPT). We also support regular joins and exits, which can mint\n * and burn BPT.\n *\n * Preminted BPT is deposited in the Vault as the initial balance of the Pool, and doesn't belong to any entity until\n * transferred out of the Pool. The Pool's arithmetic behaves as if it didn't exist, and the BPT total supply is not\n * a useful value: we rely on the 'virtual supply' (how much BPT is actually owned outside the Vault) instead.\n */\ncontract ComposableStablePool is\n IRateProvider,\n IVersion,\n BaseGeneralPool,\n StablePoolAmplification,\n ComposableStablePoolRates,\n ComposableStablePoolProtocolFees\n{\n using FixedPoint for uint256;\n using PriceRateCache for bytes32;\n using StablePoolUserData for bytes;\n using BasePoolUserData for bytes;\n\n // The maximum imposed by the Vault, which stores balances in a packed format, is 2**(112) - 1.\n // We are preminting half of that value (rounded up).\n uint256 private constant _PREMINTED_TOKEN_BALANCE = 2**(111);\n\n string private _version;\n\n // The constructor arguments are received in a struct to work around stack-too-deep issues\n struct NewPoolParams {\n IVault vault;\n IProtocolFeePercentagesProvider protocolFeeProvider;\n string name;\n string symbol;\n IERC20[] tokens;\n IRateProvider[] rateProviders;\n uint256[] tokenRateCacheDurations;\n bool[] exemptFromYieldProtocolFeeFlags;\n uint256 amplificationParameter;\n uint256 swapFeePercentage;\n uint256 pauseWindowDuration;\n uint256 bufferPeriodDuration;\n address owner;\n string version;\n }\n\n constructor(NewPoolParams memory params)\n BasePool(\n params.vault,\n IVault.PoolSpecialization.GENERAL,\n params.name,\n params.symbol,\n _insertSorted(params.tokens, IERC20(this)),\n new address[](params.tokens.length + 1),\n params.swapFeePercentage,\n params.pauseWindowDuration,\n params.bufferPeriodDuration,\n params.owner\n )\n StablePoolAmplification(params.amplificationParameter)\n ComposableStablePoolStorage(_extractStorageParams(params))\n ComposableStablePoolRates(_extractRatesParams(params))\n ProtocolFeeCache(params.protocolFeeProvider, ProtocolFeeCache.DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL)\n {\n _version = params.version;\n }\n\n // Translate parameters to avoid stack-too-deep issues in the constructor\n function _extractRatesParams(NewPoolParams memory params)\n private\n pure\n returns (ComposableStablePoolRates.RatesParams memory)\n {\n return\n ComposableStablePoolRates.RatesParams({\n tokens: params.tokens,\n rateProviders: params.rateProviders,\n tokenRateCacheDurations: params.tokenRateCacheDurations\n });\n }\n\n // Translate parameters to avoid stack-too-deep issues in the constructor\n function _extractStorageParams(NewPoolParams memory params)\n private\n view\n returns (ComposableStablePoolStorage.StorageParams memory)\n {\n return\n ComposableStablePoolStorage.StorageParams({\n registeredTokens: _insertSorted(params.tokens, IERC20(this)),\n tokenRateProviders: params.rateProviders,\n exemptFromYieldProtocolFeeFlags: params.exemptFromYieldProtocolFeeFlags\n });\n }\n\n function version() external view override returns (string memory) {\n return _version;\n }\n\n /**\n * @notice Return the minimum BPT balance, required to avoid minimum token balances.\n * @dev This amount is minted and immediately burned on pool initialization, so that the total supply\n * (and therefore post-exit token balances), can never be zero. This keeps the math well-behaved when\n * liquidity is low. (It also provides an easy way to check whether a pool has been initialized, to\n * ensure this is only done once.)\n */\n function getMinimumBpt() external pure returns (uint256) {\n return _getMinimumBpt();\n }\n\n // BasePool hook\n\n /**\n * @dev Override base pool hook invoked before any swap, join, or exit to ensure rates are updated before\n * the operation.\n */\n function _beforeSwapJoinExit() internal override {\n super._beforeSwapJoinExit();\n\n // Before the scaling factors are read, we must update the cached rates, as those will be used to compute the\n // scaling factors.\n // Note that this is not done in a recovery mode exit (since _beforeSwapjoinExit() is not called under those\n // conditions), but this is fine as recovery mode exits are unaffected by scaling factors anyway.\n _cacheTokenRatesIfNecessary();\n }\n\n // Swap Hooks\n\n /**\n * @dev Override this hook called by the base class `onSwap`, to check whether we are doing a regular swap,\n * or a swap involving BPT, which is equivalent to a single token join or exit. Since one of the Pool's\n * tokens is the preminted BPT, we need to handle swaps where BPT is involved separately.\n *\n * At this point, the balances are unscaled. The indices are coming from the Vault, so they are indices into\n * the array of registered tokens (including BPT).\n *\n * If this is a swap involving BPT, call `_swapWithBpt`, which computes the amountOut using the swapFeePercentage\n * and charges protocol fees, in the same manner as single token join/exits. Otherwise, perform the default\n * processing for a regular swap.\n */\n function _swapGivenIn(\n SwapRequest memory swapRequest,\n uint256[] memory registeredBalances,\n uint256 registeredIndexIn,\n uint256 registeredIndexOut,\n uint256[] memory scalingFactors\n ) internal virtual override returns (uint256) {\n return\n (swapRequest.tokenIn == IERC20(this) || swapRequest.tokenOut == IERC20(this))\n ? _swapWithBpt(swapRequest, registeredBalances, registeredIndexIn, registeredIndexOut, scalingFactors)\n : super._swapGivenIn(\n swapRequest,\n registeredBalances,\n registeredIndexIn,\n registeredIndexOut,\n scalingFactors\n );\n }\n\n /**\n * @dev Override this hook called by the base class `onSwap`, to check whether we are doing a regular swap,\n * or a swap involving BPT, which is equivalent to a single token join or exit. Since one of the Pool's\n * tokens is the preminted BPT, we need to handle swaps where BPT is involved separately.\n *\n * At this point, the balances are unscaled. The indices and balances are coming from the Vault, so they\n * refer to the full set of registered tokens (including BPT).\n *\n * If this is a swap involving BPT, call `_swapWithBpt`, which computes the amountOut using the swapFeePercentage\n * and charges protocol fees, in the same manner as single token join/exits. Otherwise, perform the default\n * processing for a regular swap.\n */\n function _swapGivenOut(\n SwapRequest memory swapRequest,\n uint256[] memory registeredBalances,\n uint256 registeredIndexIn,\n uint256 registeredIndexOut,\n uint256[] memory scalingFactors\n ) internal virtual override returns (uint256) {\n return\n (swapRequest.tokenIn == IERC20(this) || swapRequest.tokenOut == IERC20(this))\n ? _swapWithBpt(swapRequest, registeredBalances, registeredIndexIn, registeredIndexOut, scalingFactors)\n : super._swapGivenOut(\n swapRequest,\n registeredBalances,\n registeredIndexIn,\n registeredIndexOut,\n scalingFactors\n );\n }\n\n /**\n * @dev This is called from the base class `_swapGivenIn`, so at this point the amount has been adjusted\n * for swap fees, and balances have had scaling applied. This will only be called for regular (non-BPT) swaps,\n * so forward to `onRegularSwap`.\n */\n function _onSwapGivenIn(\n SwapRequest memory request,\n uint256[] memory registeredBalances,\n uint256 registeredIndexIn,\n uint256 registeredIndexOut\n ) internal virtual override returns (uint256) {\n return\n _onRegularSwap(\n true, // given in\n request.amount,\n registeredBalances,\n registeredIndexIn,\n registeredIndexOut\n );\n }\n\n /**\n * @dev This is called from the base class `_swapGivenOut`, so at this point the amount has been adjusted\n * for swap fees, and balances have had scaling applied. This will only be called for regular (non-BPT) swaps,\n * so forward to `onRegularSwap`.\n */\n function _onSwapGivenOut(\n SwapRequest memory request,\n uint256[] memory registeredBalances,\n uint256 registeredIndexIn,\n uint256 registeredIndexOut\n ) internal virtual override returns (uint256) {\n return\n _onRegularSwap(\n false, // given out\n request.amount,\n registeredBalances,\n registeredIndexIn,\n registeredIndexOut\n );\n }\n\n /**\n * @dev Perform a swap between non-BPT tokens. Scaling and fee adjustments have been performed upstream, so\n * all we need to do here is calculate the price quote, depending on the direction of the swap.\n */\n function _onRegularSwap(\n bool isGivenIn,\n uint256 amountGiven,\n uint256[] memory registeredBalances,\n uint256 registeredIndexIn,\n uint256 registeredIndexOut\n ) private view returns (uint256) {\n // Adjust indices and balances for BPT token\n uint256[] memory balances = _dropBptItem(registeredBalances);\n uint256 indexIn = _skipBptIndex(registeredIndexIn);\n uint256 indexOut = _skipBptIndex(registeredIndexOut);\n\n (uint256 currentAmp, ) = _getAmplificationParameter();\n uint256 invariant = StableMath._calculateInvariant(currentAmp, balances);\n\n if (isGivenIn) {\n return StableMath._calcOutGivenIn(currentAmp, balances, indexIn, indexOut, amountGiven, invariant);\n } else {\n return StableMath._calcInGivenOut(currentAmp, balances, indexIn, indexOut, amountGiven, invariant);\n }\n }\n\n /**\n * @dev Perform a swap involving the BPT token, equivalent to a single-token join or exit. As with the standard\n * joins and swaps, we first pay any protocol fees pending from swaps that occurred since the previous join or\n * exit, then perform the operation (joinSwap or exitSwap), and finally store the \"post operation\" invariant and\n * amp, which establishes the new basis for protocol fees.\n *\n * At this point, the scaling factors (including rates) have been computed by the base class, but not yet applied\n * to the balances.\n */\n function _swapWithBpt(\n SwapRequest memory swapRequest,\n uint256[] memory registeredBalances,\n uint256 registeredIndexIn,\n uint256 registeredIndexOut,\n uint256[] memory scalingFactors\n ) private returns (uint256) {\n bool isGivenIn = swapRequest.kind == IVault.SwapKind.GIVEN_IN;\n\n _upscaleArray(registeredBalances, scalingFactors);\n swapRequest.amount = _upscale(\n swapRequest.amount,\n scalingFactors[isGivenIn ? registeredIndexIn : registeredIndexOut]\n );\n\n (\n uint256 preJoinExitSupply,\n uint256[] memory balances,\n uint256 currentAmp,\n uint256 preJoinExitInvariant\n ) = _beforeJoinExit(registeredBalances);\n\n // These calls mutate `balances` so that it holds the post join-exit balances.\n (uint256 amountCalculated, uint256 postJoinExitSupply) = registeredIndexOut == getBptIndex()\n ? _doJoinSwap(\n isGivenIn,\n swapRequest.amount,\n balances,\n _skipBptIndex(registeredIndexIn),\n currentAmp,\n preJoinExitSupply,\n preJoinExitInvariant\n )\n : _doExitSwap(\n isGivenIn,\n swapRequest.amount,\n balances,\n _skipBptIndex(registeredIndexOut),\n currentAmp,\n preJoinExitSupply,\n preJoinExitInvariant\n );\n\n _updateInvariantAfterJoinExit(\n currentAmp,\n balances,\n preJoinExitInvariant,\n preJoinExitSupply,\n postJoinExitSupply\n );\n\n return\n isGivenIn\n ? _downscaleDown(amountCalculated, scalingFactors[registeredIndexOut]) // Amount out, round down\n : _downscaleUp(amountCalculated, scalingFactors[registeredIndexIn]); // Amount in, round up\n }\n\n /**\n * @dev This mutates `balances` so that they become the post-joinswap balances. The StableMath interfaces\n * are different depending on the swap direction, so we forward to the appropriate low-level join function.\n */\n function _doJoinSwap(\n bool isGivenIn,\n uint256 amount,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 currentAmp,\n uint256 actualSupply,\n uint256 preJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n return\n isGivenIn\n ? _joinSwapExactTokenInForBptOut(\n amount,\n balances,\n indexIn,\n currentAmp,\n actualSupply,\n preJoinExitInvariant\n )\n : _joinSwapExactBptOutForTokenIn(\n amount,\n balances,\n indexIn,\n currentAmp,\n actualSupply,\n preJoinExitInvariant\n );\n }\n\n /**\n * @dev Since this is a join, we know the tokenOut is BPT. Since it is GivenIn, we know the tokenIn amount,\n * and must calculate the BPT amount out.\n * We are moving preminted BPT out of the Vault, which increases the virtual supply.\n */\n function _joinSwapExactTokenInForBptOut(\n uint256 amountIn,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 currentAmp,\n uint256 actualSupply,\n uint256 preJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n // The StableMath function was created with joins in mind, so it expects a full amounts array. We create an\n // empty one and only set the amount for the token involved.\n uint256[] memory amountsIn = new uint256[](balances.length);\n amountsIn[indexIn] = amountIn;\n\n uint256 bptOut = StableMath._calcBptOutGivenExactTokensIn(\n currentAmp,\n balances,\n amountsIn,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n balances[indexIn] = balances[indexIn].add(amountIn);\n uint256 postJoinExitSupply = actualSupply.add(bptOut);\n\n return (bptOut, postJoinExitSupply);\n }\n\n /**\n * @dev Since this is a join, we know the tokenOut is BPT. Since it is GivenOut, we know the BPT amount,\n * and must calculate the token amount in.\n * We are moving preminted BPT out of the Vault, which increases the virtual supply.\n */\n function _joinSwapExactBptOutForTokenIn(\n uint256 bptOut,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 currentAmp,\n uint256 actualSupply,\n uint256 preJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n uint256 amountIn = StableMath._calcTokenInGivenExactBptOut(\n currentAmp,\n balances,\n indexIn,\n bptOut,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n balances[indexIn] = balances[indexIn].add(amountIn);\n uint256 postJoinExitSupply = actualSupply.add(bptOut);\n\n return (amountIn, postJoinExitSupply);\n }\n\n /**\n * @dev This mutates balances so that they become the post-exitswap balances. The StableMath interfaces are\n * different depending on the swap direction, so we forward to the appropriate low-level exit function.\n */\n function _doExitSwap(\n bool isGivenIn,\n uint256 amount,\n uint256[] memory balances,\n uint256 indexOut,\n uint256 currentAmp,\n uint256 actualSupply,\n uint256 preJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n return\n isGivenIn\n ? _exitSwapExactBptInForTokenOut(\n amount,\n balances,\n indexOut,\n currentAmp,\n actualSupply,\n preJoinExitInvariant\n )\n : _exitSwapExactTokenOutForBptIn(\n amount,\n balances,\n indexOut,\n currentAmp,\n actualSupply,\n preJoinExitInvariant\n );\n }\n\n /**\n * @dev Since this is an exit, we know the tokenIn is BPT. Since it is GivenIn, we know the BPT amount,\n * and must calculate the token amount out.\n * We are moving BPT out of circulation and into the Vault, which decreases the virtual supply.\n */\n function _exitSwapExactBptInForTokenOut(\n uint256 bptAmount,\n uint256[] memory balances,\n uint256 indexOut,\n uint256 currentAmp,\n uint256 actualSupply,\n uint256 preJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n uint256 amountOut = StableMath._calcTokenOutGivenExactBptIn(\n currentAmp,\n balances,\n indexOut,\n bptAmount,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n balances[indexOut] = balances[indexOut].sub(amountOut);\n uint256 postJoinExitSupply = actualSupply.sub(bptAmount);\n\n return (amountOut, postJoinExitSupply);\n }\n\n /**\n * @dev Since this is an exit, we know the tokenIn is BPT. Since it is GivenOut, we know the token amount out,\n * and must calculate the BPT amount in.\n * We are moving BPT out of circulation and into the Vault, which decreases the virtual supply.\n */\n function _exitSwapExactTokenOutForBptIn(\n uint256 amountOut,\n uint256[] memory balances,\n uint256 indexOut,\n uint256 currentAmp,\n uint256 actualSupply,\n uint256 preJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n // The StableMath function was created with exits in mind, so it expects a full amounts array. We create an\n // empty one and only set the amount for the token involved.\n uint256[] memory amountsOut = new uint256[](balances.length);\n amountsOut[indexOut] = amountOut;\n\n uint256 bptAmount = StableMath._calcBptInGivenExactTokensOut(\n currentAmp,\n balances,\n amountsOut,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n balances[indexOut] = balances[indexOut].sub(amountOut);\n uint256 postJoinExitSupply = actualSupply.sub(bptAmount);\n\n return (bptAmount, postJoinExitSupply);\n }\n\n // Join Hooks\n\n /**\n * Since this Pool has preminted BPT which is stored in the Vault, it cannot simply be minted at construction.\n *\n * We take advantage of the fact that StablePools have an initialization step where BPT is minted to the first\n * account joining them, and perform both actions at once. By minting the entire BPT supply for the initial joiner\n * and then pulling all tokens except those due the joiner, we arrive at the desired state of the Pool holding all\n * BPT except the joiner's.\n */\n function _onInitializePool(\n bytes32,\n address sender,\n address,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal override returns (uint256, uint256[] memory) {\n StablePoolUserData.JoinKind kind = userData.joinKind();\n _require(kind == StablePoolUserData.JoinKind.INIT, Errors.UNINITIALIZED);\n\n // AmountsIn usually does not include the BPT token; initialization is the one time it has to.\n uint256[] memory amountsInIncludingBpt = userData.initialAmountsIn();\n InputHelpers.ensureInputLengthMatch(amountsInIncludingBpt.length, scalingFactors.length);\n _upscaleArray(amountsInIncludingBpt, scalingFactors);\n\n (uint256 amp, ) = _getAmplificationParameter();\n uint256[] memory amountsIn = _dropBptItem(amountsInIncludingBpt);\n uint256 invariantAfterJoin = StableMath._calculateInvariant(amp, amountsIn);\n\n // Set the initial BPT to the value of the invariant\n uint256 bptAmountOut = invariantAfterJoin;\n\n // BasePool will mint bptAmountOut for the sender: we then also mint the remaining BPT to make up the total\n // supply, and have the Vault pull those tokens from the sender as part of the join.\n // We are only minting half of the maximum value - already an amount many orders of magnitude greater than any\n // conceivable real liquidity - to allow for minting new BPT as a result of regular joins.\n //\n // Note that the sender need not approve BPT for the Vault as the Vault already has infinite BPT allowance for\n // all accounts.\n uint256 initialBpt = _PREMINTED_TOKEN_BALANCE.sub(bptAmountOut);\n\n _mintPoolTokens(sender, initialBpt);\n amountsInIncludingBpt[getBptIndex()] = initialBpt;\n\n // Initialization is still a join, so we need to do post-join work.\n _updatePostJoinExit(amp, invariantAfterJoin);\n\n return (bptAmountOut, amountsInIncludingBpt);\n }\n\n /**\n * @dev Base pool hook called from `onJoinPool`. Forward to `onJoinExitPool` with `isJoin` set to true.\n */\n function _onJoinPool(\n bytes32,\n address,\n address,\n uint256[] memory registeredBalances,\n uint256,\n uint256,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal override returns (uint256, uint256[] memory) {\n return _onJoinExitPool(true, registeredBalances, scalingFactors, userData);\n }\n\n /**\n * @dev Base pool hook called from `onExitPool`. Forward to `onJoinExitPool` with `isJoin` set to false.\n * Note that recovery mode exits do not call `_onExitPool`.\n */\n function _onExitPool(\n bytes32,\n address,\n address,\n uint256[] memory registeredBalances,\n uint256,\n uint256,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal override returns (uint256, uint256[] memory) {\n return _onJoinExitPool(false, registeredBalances, scalingFactors, userData);\n }\n\n /**\n * @dev Pay protocol fees before the operation, and call `_updateInvariantAfterJoinExit` afterward, to establish\n * the new basis for protocol fees.\n */\n function _onJoinExitPool(\n bool isJoin,\n uint256[] memory registeredBalances,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal returns (uint256, uint256[] memory) {\n (\n uint256 preJoinExitSupply,\n uint256[] memory balances,\n uint256 currentAmp,\n uint256 preJoinExitInvariant\n ) = _beforeJoinExit(registeredBalances);\n\n\n function(uint256[] memory, uint256, uint256, uint256, uint256[] memory, bytes memory)\n internal\n view\n returns (uint256, uint256[] memory) _doJoinOrExit\n = (isJoin ? _doJoin : _doExit);\n\n (uint256 bptAmount, uint256[] memory amountsDelta) = _doJoinOrExit(\n balances,\n currentAmp,\n preJoinExitSupply,\n preJoinExitInvariant,\n scalingFactors,\n userData\n );\n\n // Unlike joinswaps, explicit joins do not mutate balances into the post join-exit balances so we must perform\n // this mutation here.\n function(uint256, uint256) internal pure returns (uint256) _addOrSub = isJoin ? FixedPoint.add : FixedPoint.sub;\n _mutateAmounts(balances, amountsDelta, _addOrSub);\n uint256 postJoinExitSupply = _addOrSub(preJoinExitSupply, bptAmount);\n\n // Pass in the post-join balances to reset the protocol fee basis.\n // We are minting bptAmount, increasing the total (and virtual) supply post-join\n _updateInvariantAfterJoinExit(\n currentAmp,\n balances,\n preJoinExitInvariant,\n preJoinExitSupply,\n postJoinExitSupply\n );\n\n // For clarity and simplicity, arrays used and computed in lower level functions do not include BPT.\n // But the amountsIn array passed back to the Vault must include BPT, so we add it back in here.\n return (bptAmount, _addBptItem(amountsDelta, 0));\n }\n\n /**\n * @dev Pay any due protocol fees and calculate values necessary for performing the join/exit.\n */\n function _beforeJoinExit(uint256[] memory registeredBalances)\n internal\n returns (\n uint256,\n uint256[] memory,\n uint256,\n uint256\n )\n {\n (uint256 lastJoinExitAmp, uint256 lastPostJoinExitInvariant) = getLastJoinExitData();\n (\n uint256 preJoinExitSupply,\n uint256[] memory balances,\n uint256 oldAmpPreJoinExitInvariant\n ) = _payProtocolFeesBeforeJoinExit(registeredBalances, lastJoinExitAmp, lastPostJoinExitInvariant);\n\n // If the amplification factor is the same as it was during the last join/exit then we can reuse the\n // value calculated using the \"old\" amplification factor. If not, then we have to calculate this now.\n (uint256 currentAmp, ) = _getAmplificationParameter();\n uint256 preJoinExitInvariant = currentAmp == lastJoinExitAmp\n ? oldAmpPreJoinExitInvariant\n : StableMath._calculateInvariant(currentAmp, balances);\n\n return (preJoinExitSupply, balances, currentAmp, preJoinExitInvariant);\n }\n\n /**\n * @dev Support single- and multi-token joins, plus explicit proportional joins.\n */\n function _doJoin(\n uint256[] memory balances,\n uint256 currentAmp,\n uint256 preJoinExitSupply,\n uint256 preJoinExitInvariant,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal view returns (uint256, uint256[] memory) {\n StablePoolUserData.JoinKind kind = userData.joinKind();\n if (kind == StablePoolUserData.JoinKind.EXACT_TOKENS_IN_FOR_BPT_OUT) {\n return\n _joinExactTokensInForBPTOut(\n preJoinExitSupply,\n preJoinExitInvariant,\n currentAmp,\n balances,\n scalingFactors,\n userData\n );\n } else if (kind == StablePoolUserData.JoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) {\n return _joinAllTokensInForExactBptOut(preJoinExitSupply, balances, userData);\n } else if (kind == StablePoolUserData.JoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) {\n return _joinTokenInForExactBPTOut(preJoinExitSupply, preJoinExitInvariant, currentAmp, balances, userData);\n } else {\n _revert(Errors.UNHANDLED_JOIN_KIND);\n }\n }\n\n /**\n * @dev Proportional join. Pays no swap fees.\n */\n function _joinAllTokensInForExactBptOut(\n uint256 actualSupply,\n uint256[] memory balances,\n bytes memory userData\n ) private pure returns (uint256, uint256[] memory) {\n uint256 bptAmountOut = userData.allTokensInForExactBptOut();\n uint256[] memory amountsIn = StableMath._computeProportionalAmountsIn(balances, bptAmountOut, actualSupply);\n\n return (bptAmountOut, amountsIn);\n }\n\n /**\n * @dev Multi-token join. Joins with proportional amounts will pay no protocol fees.\n */\n function _joinExactTokensInForBPTOut(\n uint256 actualSupply,\n uint256 preJoinExitInvariant,\n uint256 currentAmp,\n uint256[] memory balances,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) private view returns (uint256, uint256[] memory) {\n (uint256[] memory amountsIn, uint256 minBPTAmountOut) = userData.exactTokensInForBptOut();\n InputHelpers.ensureInputLengthMatch(balances.length, amountsIn.length);\n\n // The user-provided amountsIn is unscaled, so we address that.\n _upscaleArray(amountsIn, _dropBptItem(scalingFactors));\n\n uint256 bptAmountOut = StableMath._calcBptOutGivenExactTokensIn(\n currentAmp,\n balances,\n amountsIn,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n _require(bptAmountOut >= minBPTAmountOut, Errors.BPT_OUT_MIN_AMOUNT);\n\n return (bptAmountOut, amountsIn);\n }\n\n /**\n * @dev Single-token join, equivalent to swapping a pool token for BPT.\n */\n function _joinTokenInForExactBPTOut(\n uint256 actualSupply,\n uint256 preJoinExitInvariant,\n uint256 currentAmp,\n uint256[] memory balances,\n bytes memory userData\n ) private view returns (uint256, uint256[] memory) {\n // Since this index is sent in from the user, we interpret it as NOT including the BPT token.\n (uint256 bptAmountOut, uint256 tokenIndex) = userData.tokenInForExactBptOut();\n // Note that there is no maximum amountIn parameter: this is handled by `IVault.joinPool`.\n\n // Balances are passed through from the Vault hook, and include BPT\n _require(tokenIndex < balances.length, Errors.OUT_OF_BOUNDS);\n\n // We join with a single token, so initialize amountsIn with zeros.\n uint256[] memory amountsIn = new uint256[](balances.length);\n\n // And then assign the result to the selected token.\n amountsIn[tokenIndex] = StableMath._calcTokenInGivenExactBptOut(\n currentAmp,\n balances,\n tokenIndex,\n bptAmountOut,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n return (bptAmountOut, amountsIn);\n }\n\n // Exit Hooks\n\n /**\n * @dev Support single- and multi-token exits, plus explicit proportional exits (in addition to the\n * recovery mode exit).\n */\n function _doExit(\n uint256[] memory balances,\n uint256 currentAmp,\n uint256 preJoinExitSupply,\n uint256 preJoinExitInvariant,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal view returns (uint256, uint256[] memory) {\n StablePoolUserData.ExitKind kind = userData.exitKind();\n if (kind == StablePoolUserData.ExitKind.BPT_IN_FOR_EXACT_TOKENS_OUT) {\n return\n _exitBPTInForExactTokensOut(\n preJoinExitSupply,\n preJoinExitInvariant,\n currentAmp,\n balances,\n scalingFactors,\n userData\n );\n } else if (kind == StablePoolUserData.ExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT) {\n return _exitExactBPTInForTokensOut(preJoinExitSupply, balances, userData);\n } else if (kind == StablePoolUserData.ExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT) {\n return _exitExactBPTInForTokenOut(preJoinExitSupply, preJoinExitInvariant, currentAmp, balances, userData);\n } else {\n _revert(Errors.UNHANDLED_EXIT_KIND);\n }\n }\n\n /**\n * @dev Proportional exit. Pays no swap fees. This is functionally equivalent to the recovery mode exit,\n * except this doesn't skip protocol fee collection, calling rate providers, etc., and doesn't require\n * recovery mode to be enabled.\n */\n function _exitExactBPTInForTokensOut(\n uint256 actualSupply,\n uint256[] memory balances,\n bytes memory userData\n ) private pure returns (uint256, uint256[] memory) {\n uint256 bptAmountIn = userData.exactBptInForTokensOut();\n uint256[] memory amountsOut = _computeProportionalAmountsOut(balances, actualSupply, bptAmountIn);\n\n return (bptAmountIn, amountsOut);\n }\n\n /**\n * @dev Multi-token exit. Proportional exits will pay no protocol fees.\n */\n function _exitBPTInForExactTokensOut(\n uint256 actualSupply,\n uint256 preJoinExitInvariant,\n uint256 currentAmp,\n uint256[] memory balances,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) private view returns (uint256, uint256[] memory) {\n (uint256[] memory amountsOut, uint256 maxBPTAmountIn) = userData.bptInForExactTokensOut();\n InputHelpers.ensureInputLengthMatch(amountsOut.length, balances.length);\n\n // The user-provided amountsIn is unscaled, so we address that.\n _upscaleArray(amountsOut, _dropBptItem(scalingFactors));\n\n uint256 bptAmountIn = StableMath._calcBptInGivenExactTokensOut(\n currentAmp,\n balances,\n amountsOut,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n _require(bptAmountIn <= maxBPTAmountIn, Errors.BPT_IN_MAX_AMOUNT);\n\n return (bptAmountIn, amountsOut);\n }\n\n /**\n * @dev Single-token exit, equivalent to swapping BPT for a pool token.\n */\n function _exitExactBPTInForTokenOut(\n uint256 actualSupply,\n uint256 preJoinExitInvariant,\n uint256 currentAmp,\n uint256[] memory balances,\n bytes memory userData\n ) private view returns (uint256, uint256[] memory) {\n // Since this index is sent in from the user, we interpret it as NOT including the BPT token\n (uint256 bptAmountIn, uint256 tokenIndex) = userData.exactBptInForTokenOut();\n // Note that there is no minimum amountOut parameter: this is handled by `IVault.exitPool`.\n\n _require(tokenIndex < balances.length, Errors.OUT_OF_BOUNDS);\n\n // We exit in a single token, so initialize amountsOut with zeros\n uint256[] memory amountsOut = new uint256[](balances.length);\n\n // And then assign the result to the selected token.\n amountsOut[tokenIndex] = StableMath._calcTokenOutGivenExactBptIn(\n currentAmp,\n balances,\n tokenIndex,\n bptAmountIn,\n actualSupply,\n preJoinExitInvariant,\n getSwapFeePercentage()\n );\n\n return (bptAmountIn, amountsOut);\n }\n\n /**\n * @dev We cannot use the default RecoveryMode implementation here, since we need to account for the BPT token.\n */\n function _doRecoveryModeExit(\n uint256[] memory registeredBalances,\n uint256,\n bytes memory userData\n ) internal virtual override returns (uint256, uint256[] memory) {\n // Since this Pool uses preminted BPT, we need to replace the total supply with the virtual total supply, and\n // adjust the balances array by removing BPT from it.\n // Note that we don't compute the actual supply, which would require a lot of complex calculations and\n // interactions with external components. This is fine because virtual and actual supply are the same while\n // recovery mode is enabled (since all protocol fees are forfeit and the fee percentages zeroed out).\n (uint256 virtualSupply, uint256[] memory balances) = _dropBptItemFromBalances(registeredBalances);\n\n (uint256 bptAmountIn, uint256[] memory amountsOut) = super._doRecoveryModeExit(\n balances,\n virtualSupply,\n userData\n );\n\n // The vault requires an array including BPT, so add it back in here.\n return (bptAmountIn, _addBptItem(amountsOut, 0));\n }\n\n // BPT rate\n\n /**\n * Many functions require accessing multiple internal values that might at first seem unrelated, but are actually\n * quite intertwined, and computed at the same time for optimal performance (since calculating some of them also\n * yields intermediate results useful for other queries). This helper function returns many of these values,\n * greatly reducing bytecode size.\n *\n * The return values are:\n * @return balances - The current upscaled token balances (not including BPT)\n * @return virtualSupply - The Pool's virtual supply\n * @return protocolFeeAmount - The amount of unpaid protocol fees in BPT\n * @return lastJoinExitAmp - The Pool's amplification factor at the last join or exit operation\n * @return currentInvariantWithLastJoinExitAmp - The invariant of the current balances, calculated using the\n * amplification factor at the last join or exit operation.\n */\n function _getSupplyAndFeesData()\n private\n view\n returns (\n uint256[] memory balances,\n uint256 virtualSupply,\n uint256 protocolFeeAmount,\n uint256 lastJoinExitAmp,\n uint256 currentInvariantWithLastJoinExitAmp\n )\n {\n // First we query the Vault for current registered balances (which includes preminted BPT), to then calculate\n // the current scaled balances and virtual supply.\n (, uint256[] memory registeredBalances, ) = getVault().getPoolTokens(getPoolId());\n _upscaleArray(registeredBalances, _scalingFactors());\n (virtualSupply, balances) = _dropBptItemFromBalances(registeredBalances);\n\n // Now we need to calculate any BPT due in the form of protocol fees. This requires data from the last join or\n // exit operation. `lastJoinExitAmp` can be useful in the scenario in which the amplification factor has not\n // changed, meaning this old value is equal to the current value.\n uint256 lastPostJoinExitInvariant;\n (lastJoinExitAmp, lastPostJoinExitInvariant) = getLastJoinExitData();\n\n // Computing the protocol ownership percentage also yields the invariant using the old amplification factor. If\n // it has not changed, then this is also the current invariant.\n uint256 expectedProtocolOwnershipPercentage;\n (\n expectedProtocolOwnershipPercentage,\n currentInvariantWithLastJoinExitAmp\n ) = _getProtocolPoolOwnershipPercentage(balances, lastJoinExitAmp, lastPostJoinExitInvariant);\n\n protocolFeeAmount = ProtocolFees.bptForPoolOwnershipPercentage(\n virtualSupply,\n expectedProtocolOwnershipPercentage\n );\n }\n\n /**\n * @dev This function returns the appreciation of BPT relative to the underlying tokens, as an 18 decimal fixed\n * point number. It is simply the ratio of the invariant to the BPT supply.\n *\n * The total supply is initialized to equal the invariant, so this value starts at one. During Pool operation the\n * invariant always grows and shrinks either proportionally to the total supply (in scenarios with no price impact,\n * e.g. proportional joins), or grows faster and shrinks more slowly than it (whenever swap fees are collected or\n * the token rates increase). Therefore, the rate is a monotonically increasing function.\n *\n * WARNING: since this function reads balances directly from the Vault, it is potentially subject to manipulation\n * via reentrancy. However, this can only happen if one of the tokens in the Pool contains some form of callback\n * behavior in the `transferFrom` function (like ERC777 tokens do). These tokens are strictly incompatible with the\n * Vault and Pool design, and are not safe to be used.\n */\n function getRate() external view virtual override returns (uint256) {\n // We need to compute the current invariant and actual total supply. The latter includes protocol fees that have\n // accrued but are not yet minted: in calculating these we'll actually end up fetching most of the data we need\n // for the invariant.\n\n (\n uint256[] memory balances,\n uint256 virtualSupply,\n uint256 protocolFeeAmount,\n uint256 lastJoinExitAmp,\n uint256 currentInvariantWithLastJoinExitAmp\n ) = _getSupplyAndFeesData();\n\n // Due protocol fees will be minted at the next join or exit, so we can simply add them to the current virtual\n // supply to get the actual supply.\n uint256 actualTotalSupply = virtualSupply.add(protocolFeeAmount);\n\n // All that's missing now is the invariant. We have the balances required to calculate it already, but still\n // need the current amplification factor.\n (uint256 currentAmp, ) = _getAmplificationParameter();\n\n // It turns out that the process for due protocol fee calculation involves computing the current invariant,\n // except using the amplification factor at the last join or exit. This would typically not be terribly useful,\n // but since the amplification factor only changes rarely there is high probability of its current value being\n // the same as it was in the last join or exit. If that is the case, then we can skip the costly invariant\n // computation altogether.\n uint256 currentInvariant = (currentAmp == lastJoinExitAmp)\n ? currentInvariantWithLastJoinExitAmp\n : StableMath._calculateInvariant(currentAmp, balances);\n\n // With the current invariant and actual total supply, we can compute the rate as a fixed-point number.\n return currentInvariant.divDown(actualTotalSupply);\n }\n\n /**\n * @dev Returns the effective BPT supply.\n *\n * In other pools, this would be the same as `totalSupply`, but there are two key differences here:\n * - this pool pre-mints BPT and holds it in the Vault as a token, and as such we need to subtract the Vault's\n * balance to get the total \"circulating supply\". This is called the 'virtualSupply'.\n * - the Pool owes debt to the Protocol in the form of unminted BPT, which will be minted immediately before the\n * next join or exit. We need to take these into account since, even if they don't yet exist, they will\n * effectively be included in any Pool operation that involves BPT.\n *\n * In the vast majority of cases, this function should be used instead of `totalSupply()`.\n */\n function getActualSupply() external view returns (uint256) {\n (, uint256 virtualSupply, uint256 protocolFeeAmount, , ) = _getSupplyAndFeesData();\n return virtualSupply.add(protocolFeeAmount);\n }\n\n function _beforeProtocolFeeCacheUpdate() internal override {\n // The `getRate()` function depends on the actual supply, which in turn depends on the cached protocol fee\n // percentages. Changing these would therefore result in the rate changing, which is not acceptable as this is a\n // sensitive value.\n // Because of this, we pay any due protocol fees *before* updating the cache, making it so that the new\n // percentages only affect future operation of the Pool, and not past fees. As a result, `getRate()` is\n // unaffected by the cached protocol fee percentages changing.\n\n // Given that this operation is state-changing and relatively complex, we only allow it as long as the Pool is\n // not paused.\n _ensureNotPaused();\n\n // We need to calculate the amount of unminted BPT that represents protocol fees to then pay those. This yields\n // some auxiliary values that turn out to also be useful for the rest of the tasks we want to perform.\n (\n uint256[] memory balances,\n ,\n uint256 protocolFeeAmount,\n uint256 lastJoinExitAmp,\n uint256 currentInvariantWithLastJoinExitAmp\n ) = _getSupplyAndFeesData();\n\n if (protocolFeeAmount > 0) {\n _payProtocolFees(protocolFeeAmount);\n }\n\n // With the fees paid, we now need to calculate the current invariant so we can store it alongside the current\n // amplification factor, marking the Pool as free of protocol debt.\n (uint256 currentAmp, ) = _getAmplificationParameter();\n\n // It turns out that the process for due protocol fee calculation involves computing the current invariant,\n // except using the amplification factor at the last join or exit. This would typically not be terribly useful,\n // but since the amplification factor only changes rarely there is high probability of its current value being\n // the same as it was in the last join or exit. If that is the case, then we can skip the costly invariant\n // computation altogether.\n uint256 currentInvariant = (currentAmp == lastJoinExitAmp)\n ? currentInvariantWithLastJoinExitAmp\n : StableMath._calculateInvariant(currentAmp, balances);\n\n _updatePostJoinExit(currentAmp, currentInvariant);\n }\n\n function _onDisableRecoveryMode() internal override {\n // Enabling recovery mode short-circuits protocol fee computations, forcefully returning a zero percentage,\n // increasing the return value of `getRate()` and effectively forfeiting due protocol fees.\n\n // Therefore, when exiting recovery mode we store the current invariant and the amplification factor used to\n // compute it, marking the Pool as free of protocol debt. Otherwise it'd be possible for debt to be\n // retroactively accrued, which would be incorrect and could lead to the value of `getRate` decreasing.\n\n (, uint256[] memory registeredBalances, ) = getVault().getPoolTokens(getPoolId());\n _upscaleArray(registeredBalances, _scalingFactors());\n uint256[] memory balances = _dropBptItem(registeredBalances);\n\n (uint256 currentAmp, ) = _getAmplificationParameter();\n uint256 currentInvariant = StableMath._calculateInvariant(currentAmp, balances);\n\n _updatePostJoinExit(currentAmp, currentInvariant);\n }\n\n // Helpers\n\n /**\n * @dev Mutates `amounts` by applying `mutation` with each entry in `arguments`.\n *\n * Equivalent to `amounts = amounts.map(mutation)`.\n */\n function _mutateAmounts(\n uint256[] memory toMutate,\n uint256[] memory arguments,\n function(uint256, uint256) pure returns (uint256) mutation\n ) private pure {\n uint256 length = toMutate.length;\n InputHelpers.ensureInputLengthMatch(length, arguments.length);\n\n for (uint256 i = 0; i < length; ++i) {\n toMutate[i] = mutation(toMutate[i], arguments[i]);\n }\n }\n\n // Permissioned functions\n\n /**\n * @dev Inheritance rules still require us to override this in the most derived contract, even though\n * it only calls super.\n */\n function _isOwnerOnlyAction(bytes32 actionId)\n internal\n view\n virtual\n override(\n // Our inheritance pattern creates a small diamond that requires explicitly listing the parents here.\n // Each parent calls the `super` version, so linearization ensures all implementations are called.\n BasePool,\n ComposableStablePoolProtocolFees,\n StablePoolAmplification,\n ComposableStablePoolRates\n )\n returns (bool)\n {\n return super._isOwnerOnlyAction(actionId);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nlibrary StablePoolUserData {\n enum JoinKind { INIT, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT, ALL_TOKENS_IN_FOR_EXACT_BPT_OUT }\n enum ExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT, BPT_IN_FOR_EXACT_TOKENS_OUT, EXACT_BPT_IN_FOR_ALL_TOKENS_OUT }\n\n function joinKind(bytes memory self) internal pure returns (JoinKind) {\n return abi.decode(self, (JoinKind));\n }\n\n function exitKind(bytes memory self) internal pure returns (ExitKind) {\n return abi.decode(self, (ExitKind));\n }\n\n // Joins\n\n function initialAmountsIn(bytes memory self) internal pure returns (uint256[] memory amountsIn) {\n (, amountsIn) = abi.decode(self, (JoinKind, uint256[]));\n }\n\n function exactTokensInForBptOut(bytes memory self)\n internal\n pure\n returns (uint256[] memory amountsIn, uint256 minBPTAmountOut)\n {\n (, amountsIn, minBPTAmountOut) = abi.decode(self, (JoinKind, uint256[], uint256));\n }\n\n function tokenInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut, uint256 tokenIndex) {\n (, bptAmountOut, tokenIndex) = abi.decode(self, (JoinKind, uint256, uint256));\n }\n\n function allTokensInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut) {\n (, bptAmountOut) = abi.decode(self, (JoinKind, uint256));\n }\n\n // Exits\n\n function exactBptInForTokenOut(bytes memory self) internal pure returns (uint256 bptAmountIn, uint256 tokenIndex) {\n (, bptAmountIn, tokenIndex) = abi.decode(self, (ExitKind, uint256, uint256));\n }\n\n function exactBptInForTokensOut(bytes memory self) internal pure returns (uint256 bptAmountIn) {\n (, bptAmountIn) = abi.decode(self, (ExitKind, uint256));\n }\n\n function bptInForExactTokensOut(bytes memory self)\n internal\n pure\n returns (uint256[] memory amountsOut, uint256 maxBPTAmountIn)\n {\n (, amountsOut, maxBPTAmountIn) = abi.decode(self, (ExitKind, uint256[], uint256));\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n// solhint-disable\n\n/**\n * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n * supported.\n * Uses the default 'BAL' prefix for the error code\n */\nfunction _require(bool condition, uint256 errorCode) pure {\n if (!condition) _revert(errorCode);\n}\n\n/**\n * @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n * supported.\n */\nfunction _require(bool condition, uint256 errorCode, bytes3 prefix) pure {\n if (!condition) _revert(errorCode, prefix);\n}\n\n/**\n * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported.\n * Uses the default 'BAL' prefix for the error code\n */\nfunction _revert(uint256 errorCode) pure {\n _revert(errorCode, 0x42414c); // This is the raw byte representation of \"BAL\"\n}\n\n/**\n * @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported.\n */\nfunction _revert(uint256 errorCode, bytes3 prefix) pure {\n uint256 prefixUint = uint256(uint24(prefix));\n // We're going to dynamically create a revert string based on the error code, with the following format:\n // 'BAL#{errorCode}'\n // where the code is left-padded with zeroes to three digits (so they range from 000 to 999).\n //\n // We don't have revert strings embedded in the contract to save bytecode size: it takes much less space to store a\n // number (8 to 16 bits) than the individual string characters.\n //\n // The dynamic string creation algorithm that follows could be implemented in Solidity, but assembly allows for a\n // much denser implementation, again saving bytecode size. Given this function unconditionally reverts, this is a\n // safe place to rely on it without worrying about how its usage might affect e.g. memory contents.\n assembly {\n // First, we need to compute the ASCII representation of the error code. We assume that it is in the 0-999\n // range, so we only need to convert three digits. To convert the digits to ASCII, we add 0x30, the value for\n // the '0' character.\n\n let units := add(mod(errorCode, 10), 0x30)\n\n errorCode := div(errorCode, 10)\n let tenths := add(mod(errorCode, 10), 0x30)\n\n errorCode := div(errorCode, 10)\n let hundreds := add(mod(errorCode, 10), 0x30)\n\n // With the individual characters, we can now construct the full string.\n // We first append the '#' character (0x23) to the prefix. In the case of 'BAL', it results in 0x42414c23 ('BAL#')\n // Then, we shift this by 24 (to provide space for the 3 bytes of the error code), and add the\n // characters to it, each shifted by a multiple of 8.\n // The revert reason is then shifted left by 200 bits (256 minus the length of the string, 7 characters * 8 bits\n // per character = 56) to locate it in the most significant part of the 256 slot (the beginning of a byte\n // array).\n let formattedPrefix := shl(24, add(0x23, shl(8, prefixUint)))\n\n let revertReason := shl(200, add(formattedPrefix, add(add(units, shl(8, tenths)), shl(16, hundreds))))\n\n // We can now encode the reason in memory, which can be safely overwritten as we're about to revert. The encoded\n // message will have the following layout:\n // [ revert reason identifier ] [ string location offset ] [ string length ] [ string contents ]\n\n // The Solidity revert reason identifier is 0x08c739a0, the function selector of the Error(string) function. We\n // also write zeroes to the next 28 bytes of memory, but those are about to be overwritten.\n mstore(0x0, 0x08c379a000000000000000000000000000000000000000000000000000000000)\n // Next is the offset to the location of the string, which will be placed immediately after (20 bytes away).\n mstore(0x04, 0x0000000000000000000000000000000000000000000000000000000000000020)\n // The string length is fixed: 7 characters.\n mstore(0x24, 7)\n // Finally, the string itself is stored.\n mstore(0x44, revertReason)\n\n // Even if the string is only 7 bytes long, we need to return a full 32 byte slot containing it. The length of\n // the encoded message is therefore 4 + 32 + 32 + 32 = 100.\n revert(0, 100)\n }\n}\n\nlibrary Errors {\n // Math\n uint256 internal constant ADD_OVERFLOW = 0;\n uint256 internal constant SUB_OVERFLOW = 1;\n uint256 internal constant SUB_UNDERFLOW = 2;\n uint256 internal constant MUL_OVERFLOW = 3;\n uint256 internal constant ZERO_DIVISION = 4;\n uint256 internal constant DIV_INTERNAL = 5;\n uint256 internal constant X_OUT_OF_BOUNDS = 6;\n uint256 internal constant Y_OUT_OF_BOUNDS = 7;\n uint256 internal constant PRODUCT_OUT_OF_BOUNDS = 8;\n uint256 internal constant INVALID_EXPONENT = 9;\n\n // Input\n uint256 internal constant OUT_OF_BOUNDS = 100;\n uint256 internal constant UNSORTED_ARRAY = 101;\n uint256 internal constant UNSORTED_TOKENS = 102;\n uint256 internal constant INPUT_LENGTH_MISMATCH = 103;\n uint256 internal constant ZERO_TOKEN = 104;\n\n // Shared pools\n uint256 internal constant MIN_TOKENS = 200;\n uint256 internal constant MAX_TOKENS = 201;\n uint256 internal constant MAX_SWAP_FEE_PERCENTAGE = 202;\n uint256 internal constant MIN_SWAP_FEE_PERCENTAGE = 203;\n uint256 internal constant MINIMUM_BPT = 204;\n uint256 internal constant CALLER_NOT_VAULT = 205;\n uint256 internal constant UNINITIALIZED = 206;\n uint256 internal constant BPT_IN_MAX_AMOUNT = 207;\n uint256 internal constant BPT_OUT_MIN_AMOUNT = 208;\n uint256 internal constant EXPIRED_PERMIT = 209;\n uint256 internal constant NOT_TWO_TOKENS = 210;\n uint256 internal constant DISABLED = 211;\n\n // Pools\n uint256 internal constant MIN_AMP = 300;\n uint256 internal constant MAX_AMP = 301;\n uint256 internal constant MIN_WEIGHT = 302;\n uint256 internal constant MAX_STABLE_TOKENS = 303;\n uint256 internal constant MAX_IN_RATIO = 304;\n uint256 internal constant MAX_OUT_RATIO = 305;\n uint256 internal constant MIN_BPT_IN_FOR_TOKEN_OUT = 306;\n uint256 internal constant MAX_OUT_BPT_FOR_TOKEN_IN = 307;\n uint256 internal constant NORMALIZED_WEIGHT_INVARIANT = 308;\n uint256 internal constant INVALID_TOKEN = 309;\n uint256 internal constant UNHANDLED_JOIN_KIND = 310;\n uint256 internal constant ZERO_INVARIANT = 311;\n uint256 internal constant ORACLE_INVALID_SECONDS_QUERY = 312;\n uint256 internal constant ORACLE_NOT_INITIALIZED = 313;\n uint256 internal constant ORACLE_QUERY_TOO_OLD = 314;\n uint256 internal constant ORACLE_INVALID_INDEX = 315;\n uint256 internal constant ORACLE_BAD_SECS = 316;\n uint256 internal constant AMP_END_TIME_TOO_CLOSE = 317;\n uint256 internal constant AMP_ONGOING_UPDATE = 318;\n uint256 internal constant AMP_RATE_TOO_HIGH = 319;\n uint256 internal constant AMP_NO_ONGOING_UPDATE = 320;\n uint256 internal constant STABLE_INVARIANT_DIDNT_CONVERGE = 321;\n uint256 internal constant STABLE_GET_BALANCE_DIDNT_CONVERGE = 322;\n uint256 internal constant RELAYER_NOT_CONTRACT = 323;\n uint256 internal constant BASE_POOL_RELAYER_NOT_CALLED = 324;\n uint256 internal constant REBALANCING_RELAYER_REENTERED = 325;\n uint256 internal constant GRADUAL_UPDATE_TIME_TRAVEL = 326;\n uint256 internal constant SWAPS_DISABLED = 327;\n uint256 internal constant CALLER_IS_NOT_LBP_OWNER = 328;\n uint256 internal constant PRICE_RATE_OVERFLOW = 329;\n uint256 internal constant INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED = 330;\n uint256 internal constant WEIGHT_CHANGE_TOO_FAST = 331;\n uint256 internal constant LOWER_GREATER_THAN_UPPER_TARGET = 332;\n uint256 internal constant UPPER_TARGET_TOO_HIGH = 333;\n uint256 internal constant UNHANDLED_BY_LINEAR_POOL = 334;\n uint256 internal constant OUT_OF_TARGET_RANGE = 335;\n uint256 internal constant UNHANDLED_EXIT_KIND = 336;\n uint256 internal constant UNAUTHORIZED_EXIT = 337;\n uint256 internal constant MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE = 338;\n uint256 internal constant UNHANDLED_BY_MANAGED_POOL = 339;\n uint256 internal constant UNHANDLED_BY_PHANTOM_POOL = 340;\n uint256 internal constant TOKEN_DOES_NOT_HAVE_RATE_PROVIDER = 341;\n uint256 internal constant INVALID_INITIALIZATION = 342;\n uint256 internal constant OUT_OF_NEW_TARGET_RANGE = 343;\n uint256 internal constant FEATURE_DISABLED = 344;\n uint256 internal constant UNINITIALIZED_POOL_CONTROLLER = 345;\n uint256 internal constant SET_SWAP_FEE_DURING_FEE_CHANGE = 346;\n uint256 internal constant SET_SWAP_FEE_PENDING_FEE_CHANGE = 347;\n uint256 internal constant CHANGE_TOKENS_DURING_WEIGHT_CHANGE = 348;\n uint256 internal constant CHANGE_TOKENS_PENDING_WEIGHT_CHANGE = 349;\n uint256 internal constant MAX_WEIGHT = 350;\n uint256 internal constant UNAUTHORIZED_JOIN = 351;\n uint256 internal constant MAX_MANAGEMENT_AUM_FEE_PERCENTAGE = 352;\n uint256 internal constant FRACTIONAL_TARGET = 353;\n\n // Lib\n uint256 internal constant REENTRANCY = 400;\n uint256 internal constant SENDER_NOT_ALLOWED = 401;\n uint256 internal constant PAUSED = 402;\n uint256 internal constant PAUSE_WINDOW_EXPIRED = 403;\n uint256 internal constant MAX_PAUSE_WINDOW_DURATION = 404;\n uint256 internal constant MAX_BUFFER_PERIOD_DURATION = 405;\n uint256 internal constant INSUFFICIENT_BALANCE = 406;\n uint256 internal constant INSUFFICIENT_ALLOWANCE = 407;\n uint256 internal constant ERC20_TRANSFER_FROM_ZERO_ADDRESS = 408;\n uint256 internal constant ERC20_TRANSFER_TO_ZERO_ADDRESS = 409;\n uint256 internal constant ERC20_MINT_TO_ZERO_ADDRESS = 410;\n uint256 internal constant ERC20_BURN_FROM_ZERO_ADDRESS = 411;\n uint256 internal constant ERC20_APPROVE_FROM_ZERO_ADDRESS = 412;\n uint256 internal constant ERC20_APPROVE_TO_ZERO_ADDRESS = 413;\n uint256 internal constant ERC20_TRANSFER_EXCEEDS_ALLOWANCE = 414;\n uint256 internal constant ERC20_DECREASED_ALLOWANCE_BELOW_ZERO = 415;\n uint256 internal constant ERC20_TRANSFER_EXCEEDS_BALANCE = 416;\n uint256 internal constant ERC20_BURN_EXCEEDS_ALLOWANCE = 417;\n uint256 internal constant SAFE_ERC20_CALL_FAILED = 418;\n uint256 internal constant ADDRESS_INSUFFICIENT_BALANCE = 419;\n uint256 internal constant ADDRESS_CANNOT_SEND_VALUE = 420;\n uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_INT256 = 421;\n uint256 internal constant GRANT_SENDER_NOT_ADMIN = 422;\n uint256 internal constant REVOKE_SENDER_NOT_ADMIN = 423;\n uint256 internal constant RENOUNCE_SENDER_NOT_ALLOWED = 424;\n uint256 internal constant BUFFER_PERIOD_EXPIRED = 425;\n uint256 internal constant CALLER_IS_NOT_OWNER = 426;\n uint256 internal constant NEW_OWNER_IS_ZERO = 427;\n uint256 internal constant CODE_DEPLOYMENT_FAILED = 428;\n uint256 internal constant CALL_TO_NON_CONTRACT = 429;\n uint256 internal constant LOW_LEVEL_CALL_FAILED = 430;\n uint256 internal constant NOT_PAUSED = 431;\n uint256 internal constant ADDRESS_ALREADY_ALLOWLISTED = 432;\n uint256 internal constant ADDRESS_NOT_ALLOWLISTED = 433;\n uint256 internal constant ERC20_BURN_EXCEEDS_BALANCE = 434;\n uint256 internal constant INVALID_OPERATION = 435;\n uint256 internal constant CODEC_OVERFLOW = 436;\n uint256 internal constant IN_RECOVERY_MODE = 437;\n uint256 internal constant NOT_IN_RECOVERY_MODE = 438;\n uint256 internal constant INDUCED_FAILURE = 439;\n uint256 internal constant EXPIRED_SIGNATURE = 440;\n uint256 internal constant MALFORMED_SIGNATURE = 441;\n uint256 internal constant SAFE_CAST_VALUE_CANT_FIT_UINT64 = 442;\n uint256 internal constant UNHANDLED_FEE_TYPE = 443;\n\n // Vault\n uint256 internal constant INVALID_POOL_ID = 500;\n uint256 internal constant CALLER_NOT_POOL = 501;\n uint256 internal constant SENDER_NOT_ASSET_MANAGER = 502;\n uint256 internal constant USER_DOESNT_ALLOW_RELAYER = 503;\n uint256 internal constant INVALID_SIGNATURE = 504;\n uint256 internal constant EXIT_BELOW_MIN = 505;\n uint256 internal constant JOIN_ABOVE_MAX = 506;\n uint256 internal constant SWAP_LIMIT = 507;\n uint256 internal constant SWAP_DEADLINE = 508;\n uint256 internal constant CANNOT_SWAP_SAME_TOKEN = 509;\n uint256 internal constant UNKNOWN_AMOUNT_IN_FIRST_SWAP = 510;\n uint256 internal constant MALCONSTRUCTED_MULTIHOP_SWAP = 511;\n uint256 internal constant INTERNAL_BALANCE_OVERFLOW = 512;\n uint256 internal constant INSUFFICIENT_INTERNAL_BALANCE = 513;\n uint256 internal constant INVALID_ETH_INTERNAL_BALANCE = 514;\n uint256 internal constant INVALID_POST_LOAN_BALANCE = 515;\n uint256 internal constant INSUFFICIENT_ETH = 516;\n uint256 internal constant UNALLOCATED_ETH = 517;\n uint256 internal constant ETH_TRANSFER = 518;\n uint256 internal constant CANNOT_USE_ETH_SENTINEL = 519;\n uint256 internal constant TOKENS_MISMATCH = 520;\n uint256 internal constant TOKEN_NOT_REGISTERED = 521;\n uint256 internal constant TOKEN_ALREADY_REGISTERED = 522;\n uint256 internal constant TOKENS_ALREADY_SET = 523;\n uint256 internal constant TOKENS_LENGTH_MUST_BE_2 = 524;\n uint256 internal constant NONZERO_TOKEN_BALANCE = 525;\n uint256 internal constant BALANCE_TOTAL_OVERFLOW = 526;\n uint256 internal constant POOL_NO_TOKENS = 527;\n uint256 internal constant INSUFFICIENT_FLASH_LOAN_BALANCE = 528;\n\n // Fees\n uint256 internal constant SWAP_FEE_PERCENTAGE_TOO_HIGH = 600;\n uint256 internal constant FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH = 601;\n uint256 internal constant INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT = 602;\n uint256 internal constant AUM_FEE_PERCENTAGE_TOO_HIGH = 603;\n\n // Misc\n uint256 internal constant UNIMPLEMENTED = 998;\n uint256 internal constant SHOULD_NOT_HAPPEN = 999;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\n/**\n * @dev Source of truth for all Protocol Fee percentages, that is, how much the protocol charges certain actions. Some\n * of these values may also be retrievable from other places (such as the swap fee percentage), but this is the\n * preferred source nonetheless.\n */\ninterface IProtocolFeePercentagesProvider {\n // All fee percentages are 18-decimal fixed point numbers, so e.g. 1e18 = 100% and 1e16 = 1%.\n\n // Emitted when a new fee type is registered.\n event ProtocolFeeTypeRegistered(uint256 indexed feeType, string name, uint256 maximumPercentage);\n\n // Emitted when the value of a fee type changes.\n // IMPORTANT: it is possible for a third party to modify the SWAP and FLASH_LOAN fee type values directly in the\n // ProtocolFeesCollector, which will result in this event not being emitted despite their value changing. Such usage\n // of the ProtocolFeesCollector is however discouraged: all state-changing interactions with it should originate in\n // this contract.\n event ProtocolFeePercentageChanged(uint256 indexed feeType, uint256 percentage);\n\n /**\n * @dev Registers a new fee type in the system, making it queryable via `getFeeTypePercentage` and `getFeeTypeName`,\n * as well as configurable via `setFeeTypePercentage`.\n *\n * `feeType` can be any arbitrary value (that is not in use).\n *\n * It is not possible to de-register fee types, nor change their name or maximum value.\n */\n function registerFeeType(\n uint256 feeType,\n string memory name,\n uint256 maximumValue,\n uint256 initialValue\n ) external;\n\n /**\n * @dev Returns true if `feeType` has been registered and can be queried.\n */\n function isValidFeeType(uint256 feeType) external view returns (bool);\n\n /**\n * @dev Returns true if `value` is a valid percentage value for `feeType`.\n */\n function isValidFeeTypePercentage(uint256 feeType, uint256 value) external view returns (bool);\n\n /**\n * @dev Sets the percentage value for `feeType` to `newValue`.\n *\n * IMPORTANT: it is possible for a third party to modify the SWAP and FLASH_LOAN fee type values directly in the\n * ProtocolFeesCollector, without invoking this function. This will result in the `ProtocolFeePercentageChanged`\n * event not being emitted despite their value changing. Such usage of the ProtocolFeesCollector is however\n * discouraged: only this contract should be granted permission to call `setSwapFeePercentage` and\n * `setFlashLoanFeePercentage`.\n */\n function setFeeTypePercentage(uint256 feeType, uint256 newValue) external;\n\n /**\n * @dev Returns the current percentage value for `feeType`. This is the preferred mechanism for querying these -\n * whenever possible, use this fucntion instead of e.g. querying the ProtocolFeesCollector.\n */\n function getFeeTypePercentage(uint256 feeType) external view returns (uint256);\n\n /**\n * @dev Returns `feeType`'s maximum value.\n */\n function getFeeTypeMaximumPercentage(uint256 feeType) external view returns (uint256);\n\n /**\n * @dev Returns `feeType`'s name.\n */\n function getFeeTypeName(uint256 feeType) external view returns (string memory);\n}\n\nlibrary ProtocolFeeType {\n // This list is not exhaustive - more fee types can be added to the system. It is expected for this list to be\n // extended with new fee types as they are registered, to keep them all in one place and reduce\n // likelihood of user error.\n\n // solhint-disable private-vars-leading-underscore\n uint256 internal constant SWAP = 0;\n uint256 internal constant FLASH_LOAN = 1;\n uint256 internal constant YIELD = 2;\n uint256 internal constant AUM = 3;\n // solhint-enable private-vars-leading-underscore\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface IRateProvider {\n /**\n * @dev Returns an 18 decimal fixed point number that is the exchange rate of the token to some other underlying\n * token. The meaning of this rate depends on the context.\n */\n function getRate() external view returns (uint256);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @notice Simple interface to retrieve the version of a deployed contract.\n */\ninterface IVersion {\n /**\n * @dev Returns a JSON representation of the contract version containing name, version number and task ID.\n */\n function version() external view returns (string memory);\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\nimport \"./LogExpMath.sol\";\n\n/* solhint-disable private-vars-leading-underscore */\n\nlibrary FixedPoint {\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n // Minimum base for the power function when the exponent is 'free' (larger than ONE).\n uint256 internal constant MIN_POW_BASE_FREE_EXPONENT = 0.7e18;\n\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n // Fixed Point addition is the same as regular checked addition\n\n uint256 c = a + b;\n _require(c >= a, Errors.ADD_OVERFLOW);\n return c;\n }\n\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n // Fixed Point addition is the same as regular checked addition\n\n _require(b <= a, Errors.SUB_OVERFLOW);\n uint256 c = a - b;\n return c;\n }\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 product = a * b;\n _require(a == 0 || product / a == b, Errors.MUL_OVERFLOW);\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 product = a * b;\n _require(a == 0 || product / a == b, Errors.MUL_OVERFLOW);\n\n if (product == 0) {\n return 0;\n } else {\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return ((product - 1) / ONE) + 1;\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b != 0, Errors.ZERO_DIVISION);\n\n if (a == 0) {\n return 0;\n } else {\n uint256 aInflated = a * ONE;\n _require(aInflated / a == ONE, Errors.DIV_INTERNAL); // mul overflow\n\n return aInflated / b;\n }\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b != 0, Errors.ZERO_DIVISION);\n\n if (a == 0) {\n return 0;\n } else {\n uint256 aInflated = a * ONE;\n _require(aInflated / a == ONE, Errors.DIV_INTERNAL); // mul overflow\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, which we already tested for.\n\n return ((aInflated - 1) / b) + 1;\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = add(mulUp(raw, MAX_POW_RELATIVE_ERROR), 1);\n\n if (raw < maxError) {\n return 0;\n } else {\n return sub(raw, maxError);\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = add(mulUp(raw, MAX_POW_RELATIVE_ERROR), 1);\n\n return add(raw, maxError);\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256) {\n return (x < ONE) ? (ONE - x) : 0;\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow checks.\n * Adapted from OpenZeppelin's SafeMath library.\n */\nlibrary Math {\n /**\n * @dev Returns the absolute value of a signed integer.\n */\n function abs(int256 a) internal pure returns (uint256) {\n return a > 0 ? uint256(a) : uint256(-a);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n _require(c >= a, Errors.ADD_OVERFLOW);\n return c;\n }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on overflow.\n */\n function add(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a + b;\n _require((b >= 0 && c >= a) || (b < 0 && c < a), Errors.ADD_OVERFLOW);\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b <= a, Errors.SUB_OVERFLOW);\n uint256 c = a - b;\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on overflow.\n */\n function sub(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a - b;\n _require((b >= 0 && c <= a) || (b < 0 && c > a), Errors.SUB_OVERFLOW);\n return c;\n }\n\n /**\n * @dev Returns the largest of two numbers of 256 bits.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a >= b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers of 256 bits.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a * b;\n _require(a == 0 || c / a == b, Errors.MUL_OVERFLOW);\n return c;\n }\n\n function div(\n uint256 a,\n uint256 b,\n bool roundUp\n ) internal pure returns (uint256) {\n return roundUp ? divUp(a, b) : divDown(a, b);\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b != 0, Errors.ZERO_DIVISION);\n return a / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256) {\n _require(b != 0, Errors.ZERO_DIVISION);\n\n if (a == 0) {\n return 0;\n } else {\n return 1 + (a - 1) / b;\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\";\n\n// solhint-disable\n\nfunction _asIAsset(IERC20[] memory tokens) pure returns (IAsset[] memory assets) {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n assets := tokens\n }\n}\n\nfunction _sortTokens(\n IERC20 tokenA,\n IERC20 tokenB,\n IERC20 tokenC\n) pure returns (IERC20[] memory tokens) {\n (uint256 indexTokenA, uint256 indexTokenB, uint256 indexTokenC) = _getSortedTokenIndexes(tokenA, tokenB, tokenC);\n tokens = new IERC20[](3);\n tokens[indexTokenA] = tokenA;\n tokens[indexTokenB] = tokenB;\n tokens[indexTokenC] = tokenC;\n}\n\nfunction _insertSorted(IERC20[] memory tokens, IERC20 token) pure returns (IERC20[] memory sorted) {\n sorted = new IERC20[](tokens.length + 1);\n\n if (tokens.length == 0) {\n sorted[0] = token;\n return sorted;\n }\n\n uint256 i;\n for (i = tokens.length; i > 0 && tokens[i - 1] > token; i--) sorted[i] = tokens[i - 1];\n for (uint256 j = 0; j < i; j++) sorted[j] = tokens[j];\n sorted[i] = token;\n}\n\nfunction _appendToken(IERC20[] memory tokens, IERC20 newToken) pure returns (IERC20[] memory newTokens) {\n uint256 numTokens = tokens.length;\n newTokens = new IERC20[](numTokens + 1);\n\n for (uint256 i = 0; i < numTokens; ++i) newTokens[i] = tokens[i];\n newTokens[numTokens] = newToken;\n}\n\nfunction _findTokenIndex(IERC20[] memory tokens, IERC20 token) pure returns (uint256) {\n // Note that while we know tokens are initially sorted, we cannot assume this will hold throughout\n // the pool's lifetime, as pools with mutable tokens can append and remove tokens in any order.\n uint256 tokensLength = tokens.length;\n for (uint256 i = 0; i < tokensLength; i++) {\n if (tokens[i] == token) {\n return i;\n }\n }\n\n _revert(Errors.INVALID_TOKEN);\n}\n\nfunction _getSortedTokenIndexes(\n IERC20 tokenA,\n IERC20 tokenB,\n IERC20 tokenC\n)\n pure\n returns (\n uint256 indexTokenA,\n uint256 indexTokenB,\n uint256 indexTokenC\n )\n{\n if (tokenA < tokenB) {\n if (tokenB < tokenC) {\n // (tokenA, tokenB, tokenC)\n return (0, 1, 2);\n } else if (tokenA < tokenC) {\n // (tokenA, tokenC, tokenB)\n return (0, 2, 1);\n } else {\n // (tokenC, tokenA, tokenB)\n return (1, 2, 0);\n }\n } else {\n // tokenB < tokenA\n if (tokenC < tokenB) {\n // (tokenC, tokenB, tokenA)\n return (2, 1, 0);\n } else if (tokenC < tokenA) {\n // (tokenB, tokenC, tokenA)\n return (2, 0, 1);\n } else {\n // (tokenB, tokenA, tokenC)\n return (1, 0, 2);\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\nlibrary InputHelpers {\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n _require(a == b, Errors.INPUT_LENGTH_MISMATCH);\n }\n\n function ensureInputLengthMatch(\n uint256 a,\n uint256 b,\n uint256 c\n ) internal pure {\n _require(a == b && b == c, Errors.INPUT_LENGTH_MISMATCH);\n }\n\n function ensureArrayIsSorted(IERC20[] memory array) internal pure {\n address[] memory addressArray;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n addressArray := array\n }\n ensureArrayIsSorted(addressArray);\n }\n\n function ensureArrayIsSorted(address[] memory array) internal pure {\n if (array.length < 2) {\n return;\n }\n\n address previous = array[0];\n for (uint256 i = 1; i < array.length; ++i) {\n address current = array[i];\n _require(previous < current, Errors.UNSORTED_ARRAY);\n previous = current;\n }\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\";\n\nimport \"./BasePool.sol\";\n\n/**\n * @dev Extension of `BasePool`, adding a handler for `IGeneralPool.onSwap`.\n *\n * Derived contracts must call `BasePool`'s constructor, and implement `_onSwapGivenIn` and `_onSwapGivenOut` along with\n * `BasePool`'s virtual functions. Inheriting from this contract lets derived contracts choose the General\n * specialization setting.\n */\nabstract contract BaseGeneralPool is IGeneralPool, BasePool {\n // Swap Hooks\n\n function onSwap(\n SwapRequest memory swapRequest,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 indexOut\n ) external override onlyVault(swapRequest.poolId) returns (uint256) {\n _beforeSwapJoinExit();\n\n _validateIndexes(indexIn, indexOut, _getTotalTokens());\n uint256[] memory scalingFactors = _scalingFactors();\n\n return\n swapRequest.kind == IVault.SwapKind.GIVEN_IN\n ? _swapGivenIn(swapRequest, balances, indexIn, indexOut, scalingFactors)\n : _swapGivenOut(swapRequest, balances, indexIn, indexOut, scalingFactors);\n }\n\n function _swapGivenIn(\n SwapRequest memory swapRequest,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 indexOut,\n uint256[] memory scalingFactors\n ) internal virtual returns (uint256) {\n // Fees are subtracted before scaling, to reduce the complexity of the rounding direction analysis.\n swapRequest.amount = _subtractSwapFeeAmount(swapRequest.amount);\n\n _upscaleArray(balances, scalingFactors);\n swapRequest.amount = _upscale(swapRequest.amount, scalingFactors[indexIn]);\n\n uint256 amountOut = _onSwapGivenIn(swapRequest, balances, indexIn, indexOut);\n\n // amountOut tokens are exiting the Pool, so we round down.\n return _downscaleDown(amountOut, scalingFactors[indexOut]);\n }\n\n function _swapGivenOut(\n SwapRequest memory swapRequest,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 indexOut,\n uint256[] memory scalingFactors\n ) internal virtual returns (uint256) {\n _upscaleArray(balances, scalingFactors);\n swapRequest.amount = _upscale(swapRequest.amount, scalingFactors[indexOut]);\n\n uint256 amountIn = _onSwapGivenOut(swapRequest, balances, indexIn, indexOut);\n\n // amountIn tokens are entering the Pool, so we round up.\n amountIn = _downscaleUp(amountIn, scalingFactors[indexIn]);\n\n // Fees are added after scaling happens, to reduce the complexity of the rounding direction analysis.\n return _addSwapFeeAmount(amountIn);\n }\n\n /*\n * @dev Called when a swap with the Pool occurs, where the amount of tokens entering the Pool is known.\n *\n * Returns the amount of tokens that will be taken from the Pool in return.\n *\n * All amounts inside `swapRequest` and `balances` are upscaled. The swap fee has already been deducted from\n * `swapRequest.amount`.\n *\n * The return value is also considered upscaled, and will be downscaled (rounding down) before returning it to the\n * Vault.\n */\n function _onSwapGivenIn(\n SwapRequest memory swapRequest,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 indexOut\n ) internal virtual returns (uint256);\n\n /*\n * @dev Called when a swap with the Pool occurs, where the amount of tokens exiting the Pool is known.\n *\n * Returns the amount of tokens that will be granted to the Pool in return.\n *\n * All amounts inside `swapRequest` and `balances` are upscaled.\n *\n * The return value is also considered upscaled, and will be downscaled (rounding up) before applying the swap fee\n * and returning it to the Vault.\n */\n function _onSwapGivenOut(\n SwapRequest memory swapRequest,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 indexOut\n ) internal virtual returns (uint256);\n\n function _validateIndexes(\n uint256 indexIn,\n uint256 indexOut,\n uint256 limit\n ) private pure {\n _require(indexIn < limit && indexOut < limit, Errors.OUT_OF_BOUNDS);\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\";\n\n/**\n * Price rate caches are used to avoid querying the price rate for a token every time we need to work with it. It is\n * useful for slow changing rates, such as those that arise from interest-bearing tokens (e.g. waDAI into DAI).\n *\n * The cache data is packed into a single bytes32 value with the following structure:\n * [ 32 bits | 32 bits | 96 bits | 96 bits ]\n * [ expires | duration | old rate | current rate ]\n * |MSB LSB|\n *\n * 'rate' is an 18 decimal fixed point number, supporting rates of up to ~3e10. 'expires' is a Unix timestamp, and\n * 'duration' is expressed in seconds.\n */\nlibrary PriceRateCache {\n using WordCodec for bytes32;\n\n uint256 private constant _CURRENT_PRICE_RATE_OFFSET = 0;\n uint256 private constant _OLD_PRICE_RATE_OFFSET = 96;\n uint256 private constant _PRICE_RATE_CACHE_DURATION_OFFSET = 192;\n uint256 private constant _PRICE_RATE_CACHE_EXPIRES_OFFSET = 224;\n\n uint256 private constant _RATE_BIT_LENGTH = 96;\n uint256 private constant _DURATION_BIT_LENGTH = 32;\n\n /**\n * @dev Returns the current rate in the price rate cache.\n */\n function getCurrentRate(bytes32 cache) internal pure returns (uint256) {\n return cache.decodeUint(_CURRENT_PRICE_RATE_OFFSET, _RATE_BIT_LENGTH);\n }\n\n /**\n * @dev Returns the old rate in the price rate cache.\n */\n function getOldRate(bytes32 cache) internal pure returns (uint256) {\n return cache.decodeUint(_OLD_PRICE_RATE_OFFSET, _RATE_BIT_LENGTH);\n }\n\n /**\n * @dev Copies the current rate to the old rate.\n */\n function updateOldRate(bytes32 cache) internal pure returns (bytes32) {\n return cache.insertUint(getCurrentRate(cache), _OLD_PRICE_RATE_OFFSET, _RATE_BIT_LENGTH);\n }\n\n /**\n * @dev Returns the duration of a price rate cache.\n */\n function getDuration(bytes32 cache) internal pure returns (uint256) {\n return cache.decodeUint(_PRICE_RATE_CACHE_DURATION_OFFSET, _DURATION_BIT_LENGTH);\n }\n\n /**\n * @dev Returns the duration and expiration time of a price rate cache.\n */\n function getTimestamps(bytes32 cache) internal pure returns (uint256 duration, uint256 expires) {\n duration = getDuration(cache);\n expires = cache.decodeUint(_PRICE_RATE_CACHE_EXPIRES_OFFSET, _DURATION_BIT_LENGTH);\n }\n\n /**\n * @dev Encodes rate and duration into a price rate cache. The expiration time is computed automatically, counting\n * from the current time.\n */\n function updateRateAndDuration(\n bytes32 cache,\n uint256 rate,\n uint256 duration\n ) internal view returns (bytes32) {\n _require(rate >> _RATE_BIT_LENGTH == 0, Errors.PRICE_RATE_OVERFLOW);\n\n // solhint-disable not-rely-on-time\n return\n cache\n .insertUint(rate, _CURRENT_PRICE_RATE_OFFSET, _RATE_BIT_LENGTH)\n .insertUint(duration, _PRICE_RATE_CACHE_DURATION_OFFSET, _DURATION_BIT_LENGTH)\n .insertUint(block.timestamp + duration, _PRICE_RATE_CACHE_EXPIRES_OFFSET, _DURATION_BIT_LENGTH);\n }\n\n /**\n * @dev Update the current rate in a price rate cache.\n */\n function updateCurrentRate(bytes32 cache, uint256 rate) internal pure returns (bytes32) {\n _require(rate >> _RATE_BIT_LENGTH == 0, Errors.PRICE_RATE_OVERFLOW);\n\n return cache.insertUint(rate, _CURRENT_PRICE_RATE_OFFSET, _RATE_BIT_LENGTH);\n }\n\n /**\n * @dev Update the duration (and expiration) in a price rate cache.\n */\n function updateDuration(bytes32 cache, uint256 duration) internal view returns (bytes32) {\n return\n cache.insertUint(duration, _PRICE_RATE_CACHE_DURATION_OFFSET, _DURATION_BIT_LENGTH).insertUint(\n block.timestamp + duration,\n _PRICE_RATE_CACHE_EXPIRES_OFFSET,\n _DURATION_BIT_LENGTH\n );\n }\n\n /**\n * @dev Returns rate, duration and expiration time of a price rate cache.\n */\n function decode(bytes32 cache)\n internal\n pure\n returns (\n uint256 rate,\n uint256 duration,\n uint256 expires\n )\n {\n rate = getCurrentRate(cache);\n (duration, expires) = getTimestamps(cache);\n }\n}\n" + }, + "contracts/ComposableStablePoolStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\";\n\nimport \"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\";\n\nimport \"./StableMath.sol\";\n\nabstract contract ComposableStablePoolStorage is BasePool {\n using FixedPoint for uint256;\n using WordCodec for bytes32;\n\n struct StorageParams {\n IERC20[] registeredTokens;\n IRateProvider[] tokenRateProviders;\n bool[] exemptFromYieldProtocolFeeFlags;\n }\n\n // This minimum refers not to the total tokens, but rather to the non-BPT tokens. The minimum value for _totalTokens\n // is therefore _MIN_NON_BPT_TOKENS + 1.\n uint256 private constant _MIN_NON_BPT_TOKENS = 2;\n\n // The Pool will register n+1 tokens, where n are the actual tokens in the Pool, and the other one is the BPT\n // itself.\n uint256 private immutable _totalTokens;\n\n // The index of BPT in the tokens and balances arrays, i.e. its index when calling IVault.registerTokens().\n uint256 private immutable _bptIndex;\n\n // These are the registered tokens: one of them will be the BPT.\n IERC20 private immutable _token0;\n IERC20 private immutable _token1;\n IERC20 private immutable _token2;\n IERC20 private immutable _token3;\n IERC20 private immutable _token4;\n IERC20 private immutable _token5;\n\n // All token balances are normalized to behave as if the token had 18 decimals. We assume a token's decimals will\n // not change throughout its lifetime, and store the corresponding scaling factor for each at construction time.\n // These factors are always greater than or equal to one: tokens with more than 18 decimals are not supported.\n\n uint256 internal immutable _scalingFactor0;\n uint256 internal immutable _scalingFactor1;\n uint256 internal immutable _scalingFactor2;\n uint256 internal immutable _scalingFactor3;\n uint256 internal immutable _scalingFactor4;\n uint256 internal immutable _scalingFactor5;\n\n // Rate Providers accommodate tokens with a known price ratio, such as Compound's cTokens.\n\n IRateProvider internal immutable _rateProvider0;\n IRateProvider internal immutable _rateProvider1;\n IRateProvider internal immutable _rateProvider2;\n IRateProvider internal immutable _rateProvider3;\n IRateProvider internal immutable _rateProvider4;\n IRateProvider internal immutable _rateProvider5;\n\n // This is a bitmap which allows querying whether a token at a particular index:\n // - has a rate provider associated with it.\n // - is exempt from yield protocol fees.\n // This is required as the data stored in this bitmap is computed from values in immutable storage,\n // without this bitmap we would have to manually search through token by token to reach these values.\n // The data structure is as follows:\n //\n // [ unused | rate provider flags | exemption flags ]\n // [ 244 bits | 6 bits | 6 bits ]\n bytes32 private immutable _rateProviderInfoBitmap;\n\n // We also keep two dedicated flags that indicate the special cases where none or all tokens are exempt, which allow\n // for some gas optimizations in these special scenarios.\n bool private immutable _noTokensExempt;\n bool private immutable _allTokensExempt;\n\n uint256 private constant _RATE_PROVIDER_FLAGS_OFFSET = 6;\n\n constructor(StorageParams memory params) {\n // BasePool checks that the Pool has at least two tokens, but since one of them is the BPT (this contract), we\n // need to check ourselves that there are at least creator-supplied tokens (i.e. the minimum number of total\n // tokens for this contract is actually three, including the BPT).\n uint256 totalTokens = params.registeredTokens.length;\n _require(totalTokens > _MIN_NON_BPT_TOKENS, Errors.MIN_TOKENS);\n InputHelpers.ensureInputLengthMatch(\n totalTokens - 1,\n params.tokenRateProviders.length,\n params.exemptFromYieldProtocolFeeFlags.length\n );\n\n _totalTokens = totalTokens;\n\n // Immutable variables cannot be initialized inside an if statement, so we must do conditional assignments\n _token0 = params.registeredTokens[0];\n _token1 = params.registeredTokens[1];\n _token2 = params.registeredTokens[2];\n _token3 = totalTokens > 3 ? params.registeredTokens[3] : IERC20(0);\n _token4 = totalTokens > 4 ? params.registeredTokens[4] : IERC20(0);\n _token5 = totalTokens > 5 ? params.registeredTokens[5] : IERC20(0);\n\n _scalingFactor0 = _computeScalingFactor(params.registeredTokens[0]);\n _scalingFactor1 = _computeScalingFactor(params.registeredTokens[1]);\n _scalingFactor2 = _computeScalingFactor(params.registeredTokens[2]);\n _scalingFactor3 = totalTokens > 3 ? _computeScalingFactor(params.registeredTokens[3]) : 0;\n _scalingFactor4 = totalTokens > 4 ? _computeScalingFactor(params.registeredTokens[4]) : 0;\n _scalingFactor5 = totalTokens > 5 ? _computeScalingFactor(params.registeredTokens[5]) : 0;\n\n // The Vault keeps track of all Pool tokens in a specific order: we need to know what the index of BPT is in\n // this ordering to be able to identify it when balances arrays are received. Since the tokens array is sorted,\n // we need to find the correct BPT index in the array returned by `_insertSorted()`.\n // See `IVault.getPoolTokens()` for more information regarding token ordering.\n uint256 bptIndex;\n for (\n bptIndex = params.registeredTokens.length - 1;\n bptIndex > 0 && params.registeredTokens[bptIndex] > IERC20(this);\n bptIndex--\n ) {\n // solhint-disable-previous-line no-empty-blocks\n }\n _bptIndex = bptIndex;\n\n // The rate providers are stored as immutable state variables, and for simplicity when accessing those we'll\n // reference them by token index in the full base tokens plus BPT set (i.e. the tokens the Pool registers). Due\n // to immutable variables requiring an explicit assignment instead of defaulting to an empty value, it is\n // simpler to create a new memory array with the values we want to assign to the immutable state variables.\n IRateProvider[] memory rateProviders = new IRateProvider[](params.registeredTokens.length);\n\n bytes32 rateProviderInfoBitmap;\n\n bool anyExempt = false;\n bool anyNonExempt = false;\n\n // The exemptFromYieldFlag should never be set on a token without a rate provider.\n // This would cause division by zero errors downstream.\n for (uint256 i = 0; i < params.registeredTokens.length; ++i) {\n if (i < bptIndex) {\n rateProviders[i] = params.tokenRateProviders[i];\n // Store whether token has rate provider\n rateProviderInfoBitmap = rateProviderInfoBitmap.insertBool(\n rateProviders[i] != IRateProvider(0),\n _RATE_PROVIDER_FLAGS_OFFSET + i\n );\n // Store whether token is exempt from yield fees.\n if (params.exemptFromYieldProtocolFeeFlags[i]) {\n _require(rateProviders[i] != IRateProvider(0), Errors.TOKEN_DOES_NOT_HAVE_RATE_PROVIDER);\n rateProviderInfoBitmap = rateProviderInfoBitmap.insertBool(true, i);\n\n anyExempt = true;\n } else {\n anyNonExempt = true;\n }\n } else if (i != bptIndex) {\n rateProviders[i] = params.tokenRateProviders[i - 1];\n // Store whether token has rate provider\n rateProviderInfoBitmap = rateProviderInfoBitmap.insertBool(\n rateProviders[i] != IRateProvider(0),\n _RATE_PROVIDER_FLAGS_OFFSET + i\n );\n // Store whether token is exempt from yield fees.\n if (params.exemptFromYieldProtocolFeeFlags[i - 1]) {\n _require(rateProviders[i] != IRateProvider(0), Errors.TOKEN_DOES_NOT_HAVE_RATE_PROVIDER);\n rateProviderInfoBitmap = rateProviderInfoBitmap.insertBool(true, i);\n\n anyExempt = true;\n } else {\n anyNonExempt = true;\n }\n }\n }\n\n _noTokensExempt = !anyExempt;\n _allTokensExempt = !anyNonExempt;\n\n // Immutable variables cannot be initialized inside an if statement, so we must do conditional assignments\n _rateProvider0 = rateProviders[0];\n _rateProvider1 = rateProviders[1];\n _rateProvider2 = rateProviders[2];\n _rateProvider3 = (rateProviders.length > 3) ? rateProviders[3] : IRateProvider(0);\n _rateProvider4 = (rateProviders.length > 4) ? rateProviders[4] : IRateProvider(0);\n _rateProvider5 = (rateProviders.length > 5) ? rateProviders[5] : IRateProvider(0);\n\n _rateProviderInfoBitmap = rateProviderInfoBitmap;\n }\n\n // Tokens\n\n function _getTotalTokens() internal view virtual override returns (uint256) {\n return _totalTokens;\n }\n\n function _getMaxTokens() internal pure override returns (uint256) {\n // The BPT will be one of the Pool tokens, but it is unaffected by the Stable 5 token limit.\n return StableMath._MAX_STABLE_TOKENS + 1;\n }\n\n function getBptIndex() public view returns (uint256) {\n return _bptIndex;\n }\n\n function _getTokenIndex(IERC20 token) internal view returns (uint256) {\n if (token == _token0) return 0;\n if (token == _token1) return 1;\n if (token == _token2) return 2;\n if (token == _token3) return 3;\n if (token == _token4) return 4;\n if (token == _token5) return 5;\n\n _revert(Errors.INVALID_TOKEN);\n }\n\n function _scalingFactor(IERC20) internal view virtual override returns (uint256) {\n // We never use a single token's scaling factor by itself, we always process the entire array at once.\n // Therefore we don't bother providing an implementation for this.\n _revert(Errors.UNIMPLEMENTED);\n }\n\n // Index helpers\n\n // Convert from an index into an array including BPT (the Vault's registered token list), to an index\n // into an array excluding BPT (usually from user input, such as amountsIn/Out).\n // `index` must not be the BPT token index itself.\n function _skipBptIndex(uint256 index) internal view returns (uint256) {\n // Currently this is never called with an index passed in from user input, so this check\n // should not be necessary. Included for completion (and future proofing).\n _require(index != getBptIndex(), Errors.OUT_OF_BOUNDS);\n\n return index < getBptIndex() ? index : index.sub(1);\n }\n\n /**\n * @dev Remove the item at `_bptIndex` from an arbitrary array (e.g., amountsIn).\n */\n function _dropBptItem(uint256[] memory amounts) internal view returns (uint256[] memory) {\n uint256[] memory amountsWithoutBpt = new uint256[](amounts.length - 1);\n for (uint256 i = 0; i < amountsWithoutBpt.length; i++) {\n amountsWithoutBpt[i] = amounts[i < getBptIndex() ? i : i + 1];\n }\n\n return amountsWithoutBpt;\n }\n\n /**\n * @dev Same as `_dropBptItem`, except the virtual supply is also returned, and `balances` is assumed to be the\n * current Pool balances (including BPT).\n */\n function _dropBptItemFromBalances(uint256[] memory registeredBalances)\n internal\n view\n returns (uint256, uint256[] memory)\n {\n return (_getVirtualSupply(registeredBalances[getBptIndex()]), _dropBptItem(registeredBalances));\n }\n\n // Convert from an index into an array excluding BPT (usually from user input, such as amountsIn/Out),\n // to an index into an array including BPT (the Vault's registered token list).\n // `index` must not be the BPT token index itself, if it is the last element, and the result must be\n // in the range of registered tokens.\n function _addBptIndex(uint256 index) internal view returns (uint256 registeredIndex) {\n // This can be called from an index passed in from user input.\n registeredIndex = index < getBptIndex() ? index : index.add(1);\n\n // TODO: `indexWithBpt != getBptIndex()` follows from above line and so can be removed.\n _require(registeredIndex < _totalTokens && registeredIndex != getBptIndex(), Errors.OUT_OF_BOUNDS);\n }\n\n /**\n * @dev Take an array of arbitrary values the size of the token set without BPT, and insert the given\n * bptAmount at the bptIndex location.\n *\n * The caller is responsible for ensuring the `amounts` input array is sized properly; this function\n * performs no checks.\n */\n function _addBptItem(uint256[] memory amounts, uint256 bptAmount)\n internal\n view\n returns (uint256[] memory registeredTokenAmounts)\n {\n registeredTokenAmounts = new uint256[](amounts.length + 1);\n for (uint256 i = 0; i < registeredTokenAmounts.length; i++) {\n registeredTokenAmounts[i] = i == getBptIndex() ? bptAmount : amounts[i < getBptIndex() ? i : i - 1];\n }\n }\n\n // Rate Providers\n\n function _getScalingFactor(uint256 index) internal view returns (uint256) {\n if (index == 0) return _scalingFactor0;\n if (index == 1) return _scalingFactor1;\n if (index == 2) return _scalingFactor2;\n if (index == 3) return _scalingFactor3;\n if (index == 4) return _scalingFactor4;\n if (index == 5) return _scalingFactor5;\n else {\n _revert(Errors.INVALID_TOKEN);\n }\n }\n\n /**\n * @dev Returns the rate providers configured for each token (in the same order as registered).\n */\n function getRateProviders() external view returns (IRateProvider[] memory) {\n uint256 totalTokens = _getTotalTokens();\n IRateProvider[] memory providers = new IRateProvider[](totalTokens);\n\n for (uint256 i = 0; i < totalTokens; ++i) {\n providers[i] = _getRateProvider(i);\n }\n\n return providers;\n }\n\n function _getRateProvider(uint256 index) internal view returns (IRateProvider) {\n if (index == 0) return _rateProvider0;\n if (index == 1) return _rateProvider1;\n if (index == 2) return _rateProvider2;\n if (index == 3) return _rateProvider3;\n if (index == 4) return _rateProvider4;\n if (index == 5) return _rateProvider5;\n else {\n _revert(Errors.INVALID_TOKEN);\n }\n }\n\n /**\n * @notice Return true if the token at this index has a rate provider\n */\n function _hasRateProvider(uint256 tokenIndex) internal view returns (bool) {\n return _rateProviderInfoBitmap.decodeBool(_RATE_PROVIDER_FLAGS_OFFSET + tokenIndex);\n }\n\n /**\n * @notice Return true if all tokens are exempt from yield fees.\n */\n function _areAllTokensExempt() internal view returns (bool) {\n return _allTokensExempt;\n }\n\n /**\n * @notice Return true if no tokens are exempt from yield fees.\n */\n function _areNoTokensExempt() internal view returns (bool) {\n return _noTokensExempt;\n }\n\n // Exempt flags\n\n /**\n * @dev Returns whether the token is exempt from protocol fees on the yield.\n * If the BPT token is passed in (which doesn't make much sense, but shouldn't fail,\n * since it is a valid pool token), the corresponding flag will be false.\n */\n function isTokenExemptFromYieldProtocolFee(IERC20 token) external view returns (bool) {\n return _isTokenExemptFromYieldProtocolFee(_getTokenIndex(token));\n }\n\n // This assumes the tokenIndex is valid. If it's not, it will just return false.\n function _isTokenExemptFromYieldProtocolFee(uint256 registeredTokenIndex) internal view returns (bool) {\n return _rateProviderInfoBitmap.decodeBool(registeredTokenIndex);\n }\n\n // Virtual Supply\n\n /**\n * @dev Returns the number of tokens in circulation.\n *\n * WARNING: in the vast majority of cases this is not a useful value, since it does not include the debt the Pool\n * accrued in the form of unminted BPT for the ProtocolFeesCollector. Look into `getActualSupply()` and how that's\n * different.\n *\n * In other pools, this would be the same as `totalSupply`, but since this pool pre-mints BPT and holds it in the\n * Vault as a token, we need to subtract the Vault's balance to get the total \"circulating supply\". Both the\n * totalSupply and Vault balance can change. If users join or exit using swaps, some of the preminted BPT are\n * exchanged, so the Vault's balance increases after joins and decreases after exits. If users call the regular\n * joins/exit functions, the totalSupply can change as BPT are minted for joins or burned for exits.\n */\n function _getVirtualSupply(uint256 bptBalance) internal view returns (uint256) {\n // The initial amount of BPT pre-minted is _PREMINTED_TOKEN_BALANCE, and it goes entirely to the pool balance in\n // the vault. So the virtualSupply (the amount of BPT supply in circulation) is defined as:\n // virtualSupply = totalSupply() - _balances[_bptIndex]\n return totalSupply().sub(bptBalance);\n }\n}\n" + }, + "contracts/ComposableStablePoolRates.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport \"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\";\n\nimport \"./ComposableStablePoolStorage.sol\";\n\nabstract contract ComposableStablePoolRates is ComposableStablePoolStorage {\n using PriceRateCache for bytes32;\n using FixedPoint for uint256;\n\n struct RatesParams {\n IERC20[] tokens;\n IRateProvider[] rateProviders;\n uint256[] tokenRateCacheDurations;\n }\n\n // Token rate caches are used to avoid querying the price rate for a token every time we need to work with it.\n // The \"old rate\" field is used for precise protocol fee calculation, to ensure that token yield is only\n // \"taxed\" once. The data structure is as follows:\n //\n // [ expires | duration | old rate | current rate ]\n // [ uint32 | uint32 | uint96 | uint96 ]\n\n // Since we never need just one cache but all of them at once, instead of making the mapping go from token address\n // to cache, we go from token index (including BPT), i.e. an array. We use a mapping however instead of a native\n // array to skip the extra read associated with the out-of-bounds check, as we have cheaper ways to guarantee the\n // indices are valid.\n mapping(uint256 => bytes32) internal _tokenRateCaches;\n\n event TokenRateCacheUpdated(uint256 indexed tokenIndex, uint256 rate);\n event TokenRateProviderSet(uint256 indexed tokenIndex, IRateProvider indexed provider, uint256 cacheDuration);\n\n constructor(RatesParams memory rateParams) {\n InputHelpers.ensureInputLengthMatch(\n rateParams.tokens.length,\n rateParams.rateProviders.length,\n rateParams.tokenRateCacheDurations.length\n );\n\n IERC20[] memory registeredTokens = _insertSorted(rateParams.tokens, IERC20(this));\n uint256 bptIndex;\n for (\n bptIndex = registeredTokens.length - 1;\n bptIndex > 0 && registeredTokens[bptIndex] > IERC20(this);\n bptIndex--\n ) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n uint256 skipBpt = 0;\n for (uint256 i = 0; i < rateParams.tokens.length; i++) {\n if (i == bptIndex) {\n skipBpt = 1;\n }\n\n uint256 k = i + skipBpt;\n if (rateParams.rateProviders[i] != IRateProvider(0)) {\n _updateTokenRateCache(k, rateParams.rateProviders[i], rateParams.tokenRateCacheDurations[i]);\n\n emit TokenRateProviderSet(k, rateParams.rateProviders[i], rateParams.tokenRateCacheDurations[i]);\n\n // Initialize the old rates as well, in case they are referenced before the first join.\n _updateOldRate(k);\n }\n }\n }\n\n /**\n * @dev Updates the old rate for the token at `index` (including BPT). Assumes `index` is valid.\n */\n function _updateOldRate(uint256 index) internal {\n bytes32 cache = _tokenRateCaches[index];\n _tokenRateCaches[index] = cache.updateOldRate();\n }\n\n /**\n * @dev Returns the rate for a given token. All token rates are fixed-point values with 18 decimals.\n * If there is no rate provider for the provided token, it returns FixedPoint.ONE.\n */\n function getTokenRate(IERC20 token) external view returns (uint256) {\n return _getTokenRate(_getTokenIndex(token));\n }\n\n function _getTokenRate(uint256 index) internal view virtual returns (uint256) {\n // We optimize for the scenario where all tokens have rate providers, except the BPT (which never has a rate\n // provider). Therefore, we return early if `token` is the BPT, and otherwise optimistically read the cache\n // expecting that it will not be empty (instead of e.g. fetching the provider to avoid a cache read, since\n // we don't need the provider at all).\n\n if (index == getBptIndex()) {\n return FixedPoint.ONE;\n }\n\n bytes32 tokenRateCache = _tokenRateCaches[index];\n return tokenRateCache == bytes32(0) ? FixedPoint.ONE : tokenRateCache.getCurrentRate();\n }\n\n /**\n * @dev Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate\n * provider.\n */\n function getTokenRateCache(IERC20 token)\n external\n view\n returns (\n uint256 rate,\n uint256 oldRate,\n uint256 duration,\n uint256 expires\n )\n {\n bytes32 cache = _tokenRateCaches[_getTokenIndex(token)];\n\n // A zero cache indicates that the token doesn't have a rate provider associated with it.\n _require(cache != bytes32(0), Errors.TOKEN_DOES_NOT_HAVE_RATE_PROVIDER);\n\n rate = cache.getCurrentRate();\n oldRate = cache.getOldRate();\n (duration, expires) = cache.getTimestamps();\n }\n\n /**\n * @dev Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially.\n * Note this function also updates the current cached value.\n * @param duration Number of seconds until the current token rate is fetched again.\n */\n function setTokenRateCacheDuration(IERC20 token, uint256 duration) external authenticate {\n uint256 index = _getTokenIndex(token);\n IRateProvider provider = _getRateProvider(index);\n _require(address(provider) != address(0), Errors.TOKEN_DOES_NOT_HAVE_RATE_PROVIDER);\n _updateTokenRateCache(index, provider, duration);\n emit TokenRateProviderSet(index, provider, duration);\n }\n\n /**\n * @dev Forces a rate cache hit for a token.\n * It will revert if the requested token does not have an associated rate provider.\n */\n function updateTokenRateCache(IERC20 token) external {\n uint256 index = _getTokenIndex(token);\n\n IRateProvider provider = _getRateProvider(index);\n _require(address(provider) != address(0), Errors.TOKEN_DOES_NOT_HAVE_RATE_PROVIDER);\n uint256 duration = _tokenRateCaches[index].getDuration();\n _updateTokenRateCache(index, provider, duration);\n }\n\n /**\n * @dev Internal function to update a token rate cache for a known provider and duration.\n * It trusts the given values, and does not perform any checks.\n */\n function _updateTokenRateCache(\n uint256 index,\n IRateProvider provider,\n uint256 duration\n ) internal virtual {\n uint256 rate = provider.getRate();\n bytes32 cache = _tokenRateCaches[index];\n\n _tokenRateCaches[index] = cache.updateRateAndDuration(rate, duration);\n\n emit TokenRateCacheUpdated(index, rate);\n }\n\n /**\n * @dev Caches the rates of all tokens if necessary\n */\n function _cacheTokenRatesIfNecessary() internal {\n uint256 totalTokens = _getTotalTokens();\n for (uint256 i = 0; i < totalTokens; ++i) {\n _cacheTokenRateIfNecessary(i);\n }\n }\n\n /**\n * @dev Caches the rate for a token if necessary. It ignores the call if there is no provider set.\n */\n function _cacheTokenRateIfNecessary(uint256 index) internal {\n // We optimize for the scenario where all tokens have rate providers, except the BPT (which never has a rate\n // provider). Therefore, we return early if token is BPT, and otherwise optimistically read the cache expecting\n // that it will not be empty (instead of e.g. fetching the provider to avoid a cache read in situations where\n // we might not need the provider if the cache is still valid).\n\n if (index == getBptIndex()) return;\n\n bytes32 cache = _tokenRateCaches[index];\n if (cache != bytes32(0)) {\n (uint256 duration, uint256 expires) = cache.getTimestamps();\n if (block.timestamp > expires) {\n // solhint-disable-previous-line not-rely-on-time\n _updateTokenRateCache(index, _getRateProvider(index), duration);\n }\n }\n }\n\n // To compute the yield protocol fees, we need the oldRate for all tokens, even if the exempt flag is not set.\n // We do need to ensure the token has a rate provider before updating; otherwise it will not be in the cache.\n function _updateOldRates() internal {\n uint256 totalTokens = _getTotalTokens();\n for (uint256 i = 0; i < totalTokens; ++i) {\n if (_hasRateProvider(i)) _updateOldRate(i);\n }\n }\n\n /**\n * @dev Apply the token ratios to a set of balances, optionally adjusting for exempt yield tokens.\n * The `balances` array is assumed to not include BPT to ensure that token indices align.\n */\n function _getAdjustedBalances(uint256[] memory balances, bool ignoreExemptFlags)\n internal\n view\n returns (uint256[] memory)\n {\n uint256 totalTokensWithoutBpt = balances.length;\n uint256[] memory adjustedBalances = new uint256[](totalTokensWithoutBpt);\n\n for (uint256 i = 0; i < totalTokensWithoutBpt; ++i) {\n uint256 skipBptIndex = i >= getBptIndex() ? i + 1 : i;\n adjustedBalances[i] = _isTokenExemptFromYieldProtocolFee(skipBptIndex) ||\n (ignoreExemptFlags && _hasRateProvider(skipBptIndex))\n ? _adjustedBalance(balances[i], _tokenRateCaches[skipBptIndex])\n : balances[i];\n }\n\n return adjustedBalances;\n }\n\n // Compute balance * oldRate/currentRate, doing division last to minimize rounding error.\n function _adjustedBalance(uint256 balance, bytes32 cache) private pure returns (uint256) {\n return Math.divDown(Math.mul(balance, cache.getOldRate()), cache.getCurrentRate());\n }\n\n // Scaling Factors\n\n /**\n * @dev Overrides scaling factor getter to compute the tokens' rates.\n */\n function _scalingFactors() internal view virtual override returns (uint256[] memory) {\n // There is no need to check the arrays length since both are based on `_getTotalTokens`\n uint256 totalTokens = _getTotalTokens();\n uint256[] memory scalingFactors = new uint256[](totalTokens);\n\n for (uint256 i = 0; i < totalTokens; ++i) {\n scalingFactors[i] = _getScalingFactor(i).mulDown(_getTokenRate(i));\n }\n\n return scalingFactors;\n }\n\n /**\n * @dev Overrides only owner action to allow setting the cache duration for the token rates\n */\n function _isOwnerOnlyAction(bytes32 actionId) internal view virtual override returns (bool) {\n return (actionId == getActionId(this.setTokenRateCacheDuration.selector)) || super._isOwnerOnlyAction(actionId);\n }\n}\n" + }, + "contracts/ComposableStablePoolProtocolFees.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\";\nimport \"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\";\nimport \"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\";\n\nimport \"./ComposableStablePoolStorage.sol\";\nimport \"./ComposableStablePoolRates.sol\";\nimport \"./StableMath.sol\";\n\nabstract contract ComposableStablePoolProtocolFees is\n ComposableStablePoolStorage,\n ComposableStablePoolRates,\n ProtocolFeeCache\n{\n using FixedPoint for uint256;\n using WordCodec for bytes32;\n\n // To track protocol fees, we measure and store the value of the invariant after every join and exit.\n // All invariant growth that happens between join and exit events is due to swap fees and yield.\n // For selected tokens, we exclude the yield portion from the computation.\n // Because the invariant depends on the amplification parameter, and this value may change over time, we should only\n // compare invariants that were computed using the same value. We therefore store both values together.\n //\n // These values reside in the same storage slot. The amplification factor is bound by _MAX_AMP * _AMP_PRECISION, or\n // 5e6, which fits in 23 bits. We use all remaining bits for the invariant: this is more than enough, as the\n // invariant is proportional to the total supply, which is capped at 112 bits.\n // The data structure is as follows:\n //\n // [ last join-exit amplification | last post join-exit invariant ]\n // [ 23 bits | 233 bits ]\n bytes32 private _lastJoinExitData;\n\n uint256 private constant _LAST_POST_JOIN_EXIT_INVARIANT_OFFSET = 0;\n uint256 private constant _LAST_POST_JOIN_EXIT_INVARIANT_SIZE = 233;\n uint256 private constant _LAST_JOIN_EXIT_AMPLIFICATION_OFFSET = _LAST_POST_JOIN_EXIT_INVARIANT_OFFSET +\n _LAST_POST_JOIN_EXIT_INVARIANT_SIZE;\n\n uint256 private constant _LAST_JOIN_EXIT_AMPLIFICATION_SIZE = 23;\n\n /**\n * @dev Calculates due protocol fees originating from accumulated swap fees and yield of non-exempt tokens, pays\n * them by minting BPT, and returns the actual supply and current balances.\n *\n * We also return the current invariant computed using the amplification factor at the last join or exit, which can\n * be useful to skip computations in scenarios where the amplification factor is not changing.\n */\n function _payProtocolFeesBeforeJoinExit(\n uint256[] memory registeredBalances,\n uint256 lastJoinExitAmp,\n uint256 lastPostJoinExitInvariant\n )\n internal\n returns (\n uint256,\n uint256[] memory,\n uint256\n )\n {\n (uint256 virtualSupply, uint256[] memory balances) = _dropBptItemFromBalances(registeredBalances);\n\n // First, we'll compute what percentage of the Pool the protocol should own due to charging protocol fees on\n // swap fees and yield.\n (\n uint256 expectedProtocolOwnershipPercentage,\n uint256 currentInvariantWithLastJoinExitAmp\n ) = _getProtocolPoolOwnershipPercentage(balances, lastJoinExitAmp, lastPostJoinExitInvariant);\n\n // Now that we know what percentage of the Pool's current value the protocol should own, we can compute how\n // much BPT we need to mint to get to this state. Since we're going to mint BPT for the protocol, the value\n // of each BPT is going to be reduced as all LPs get diluted.\n uint256 protocolFeeAmount = ProtocolFees.bptForPoolOwnershipPercentage(\n virtualSupply,\n expectedProtocolOwnershipPercentage\n );\n\n if (protocolFeeAmount > 0) {\n _payProtocolFees(protocolFeeAmount);\n }\n\n // We pay fees before a join or exit to ensure the pool is debt-free. This increases the virtual supply (making\n // it match the actual supply).\n //\n // For this addition to overflow, `totalSupply` would also have already overflowed.\n return (virtualSupply + protocolFeeAmount, balances, currentInvariantWithLastJoinExitAmp);\n }\n\n function _getProtocolPoolOwnershipPercentage(\n uint256[] memory balances,\n uint256 lastJoinExitAmp,\n uint256 lastPostJoinExitInvariant\n ) internal view returns (uint256, uint256) {\n // We compute three invariants, adjusting the balances of tokens that have rate providers by undoing the current\n // rate adjustment and then applying the old rate. This is equivalent to multiplying by old rate / current rate.\n //\n // In all cases we compute invariants with the last join-exit amplification factor, so that changes to the\n // amplification are not translated into changes to the invariant. Since amplification factor changes are both\n // infrequent and slow, they should have little effect on the pool balances, making this a very good\n // approximation.\n //\n // With this technique we obtain an invariant that does not include yield at all, meaning any growth will be due\n // exclusively to swap fees. We call this the 'swap fee growth invariant'.\n // A second invariant will exclude the yield of exempt tokens, and therefore include both swap fees and\n // non-exempt yield. This is called the 'non exempt growth invariant'.\n // Finally, a third invariant includes the yield of all tokens by using only the current rates. We call this the\n // 'total growth invariant', since it includes both swap fee growth, non-exempt yield growth and exempt yield\n // growth. If the last join-exit amplification equals the current one, this invariant equals the current\n // invariant.\n\n (\n uint256 swapFeeGrowthInvariant,\n uint256 totalNonExemptGrowthInvariant,\n uint256 totalGrowthInvariant\n ) = _getGrowthInvariants(balances, lastJoinExitAmp);\n\n // By comparing the invariant increase attributable to each source of growth to the total growth invariant,\n // we can calculate how much of the current Pool value originates from that source, and then apply the\n // corresponding protocol fee percentage to that amount.\n\n // We have two sources of growth: swap fees, and non-exempt yield. As we illustrate graphically below:\n //\n // growth due to swap fees = (swap fee growth invariant - last post join-exit invariant)\n // growth due to non-exempt yield = (non-exempt growth invariant - swap fee growth invariant)\n //\n // These can be converted to additive percentages by normalizing against the total growth invariant value:\n // growth due to swap fees / total growth invariant = % pool ownership due from swap fees\n // growth due to non-exempt yield / total growth invariant = % pool ownership due from non-exempt yield\n //\n // ┌───────────────────────┐ ──┐\n // │ exempt yield │ │ total growth invariant\n // ├───────────────────────┤ │ ──┐\n // │ non-exempt yield │ │ │ non-exempt growth invariant\n // ├───────────────────────┤ │ │ ──┐\n // │ swap fees │ │ │ │ swap fee growth invariant\n // ├───────────────────────┤ │ │ │ ──┐\n // │ original value │ │ │ │ │ last post join-exit invariant\n // └───────────────────────┘ ──┘ ──┘ ──┘ ──┘\n //\n // Each invariant should be larger than its precedessor. In case any rounding error results in them being\n // smaller, we adjust the subtraction to equal 0.\n\n // Note: in the unexpected scenario where the rates of the tokens shrink over time instead of growing (i.e. if\n // the yield is negative), the non-exempt growth invariant might actually be *smaller* than the swap fee growth\n // invariant, and the total growth invariant might be *smaller* than the non-exempt growth invariant. Depending\n // on the order in which swaps, joins/exits and rate changes happen, as well as their relative magnitudes, it is\n // possible for the Pool to either pay more or less protocol fees than it should.\n // Due to the complexity that handling all of these cases would introduce, this behavior is considered out of\n // scope, and is expected to be handled on a case-by-case basis if the token rates were to ever decrease (which\n // would also mean that the Pool value has dropped).\n\n uint256 swapFeeGrowthInvariantDelta = (swapFeeGrowthInvariant > lastPostJoinExitInvariant)\n ? swapFeeGrowthInvariant - lastPostJoinExitInvariant\n : 0;\n uint256 nonExemptYieldGrowthInvariantDelta = (totalNonExemptGrowthInvariant > swapFeeGrowthInvariant)\n ? totalNonExemptGrowthInvariant - swapFeeGrowthInvariant\n : 0;\n\n // We can now derive what percentage of the Pool's total value each invariant delta represents by dividing by\n // the total growth invariant. These values, multiplied by the protocol fee percentage for each growth type,\n // represent the percentage of Pool ownership the protocol should have due to each source.\n\n uint256 protocolSwapFeePercentage = swapFeeGrowthInvariantDelta.divDown(totalGrowthInvariant).mulDown(\n getProtocolFeePercentageCache(ProtocolFeeType.SWAP)\n );\n\n uint256 protocolYieldPercentage = nonExemptYieldGrowthInvariantDelta.divDown(totalGrowthInvariant).mulDown(\n getProtocolFeePercentageCache(ProtocolFeeType.YIELD)\n );\n\n // These percentages can then be simply added to compute the total protocol Pool ownership percentage.\n // This is naturally bounded above by FixedPoint.ONE so this addition cannot overflow.\n return (protocolSwapFeePercentage + protocolYieldPercentage, totalGrowthInvariant);\n }\n\n function _getGrowthInvariants(uint256[] memory balances, uint256 lastJoinExitAmp)\n internal\n view\n returns (\n uint256 swapFeeGrowthInvariant,\n uint256 totalNonExemptGrowthInvariant,\n uint256 totalGrowthInvariant\n )\n {\n // We always calculate the swap fee growth invariant, since we cannot easily know whether swap fees have\n // accumulated or not.\n\n swapFeeGrowthInvariant = StableMath._calculateInvariant(\n lastJoinExitAmp,\n _getAdjustedBalances(balances, true) // Adjust all balances\n );\n\n // For the other invariants, we can potentially skip some work. In the edge cases where none or all of the\n // tokens are exempt from yield, there's one fewer invariant to compute.\n\n if (_areNoTokensExempt()) {\n // If there are no tokens with fee-exempt yield, then the total non-exempt growth will equal the total\n // growth: all yield growth is non-exempt. There's also no point in adjusting balances, since we\n // already know none are exempt.\n\n totalNonExemptGrowthInvariant = StableMath._calculateInvariant(lastJoinExitAmp, balances);\n totalGrowthInvariant = totalNonExemptGrowthInvariant;\n } else if (_areAllTokensExempt()) {\n // If no tokens are charged fees on yield, then the non-exempt growth is equal to the swap fee growth - no\n // yield fees will be collected.\n\n totalNonExemptGrowthInvariant = swapFeeGrowthInvariant;\n totalGrowthInvariant = StableMath._calculateInvariant(lastJoinExitAmp, balances);\n } else {\n // In the general case, we need to calculate two invariants: one with some adjusted balances, and one with\n // the current balances.\n\n totalNonExemptGrowthInvariant = StableMath._calculateInvariant(\n lastJoinExitAmp,\n _getAdjustedBalances(balances, false) // Only adjust non-exempt balances\n );\n\n totalGrowthInvariant = StableMath._calculateInvariant(lastJoinExitAmp, balances);\n }\n }\n\n /**\n * @dev Store the latest invariant based on the adjusted balances after the join or exit, using current rates.\n * Also cache the amp factor, so that the invariant is not affected by amp updates between joins and exits.\n *\n * Pay protocol fees due on any current join or exit swap.\n */\n function _updateInvariantAfterJoinExit(\n uint256 currentAmp,\n uint256[] memory balances,\n uint256 preJoinExitInvariant,\n uint256 preJoinExitSupply,\n uint256 postJoinExitSupply\n ) internal {\n // `_payProtocolFeesBeforeJoinExit` paid protocol fees accumulated between the previous and current\n // join or exit, while this code pays any protocol fees due on the current join or exit.\n // The amp and rates are constant during a single transaction, so it doesn't matter if there\n // is an ongoing amp change, and we can ignore yield.\n\n // Compute the growth ratio between the pre- and post-join/exit balances.\n // Note that the pre-join/exit invariant is *not* the invariant from the last join,\n // but computed from the balances before this particular join/exit.\n\n uint256 postJoinExitInvariant = StableMath._calculateInvariant(currentAmp, balances);\n\n // Compute the portion of the invariant increase due to fees\n uint256 supplyGrowthRatio = postJoinExitSupply.divDown(preJoinExitSupply);\n uint256 feelessInvariant = preJoinExitInvariant.mulDown(supplyGrowthRatio);\n\n // The postJoinExitInvariant should always be greater than the feelessInvariant (since the invariant and total\n // supply move proportionally outside of fees, which the postJoinInvariant includes and the feelessInvariant\n // does not). However, in the unexpected case in which due to rounding errors this is not true, we simply skip\n // further computation of protocol fees.\n if (postJoinExitInvariant > feelessInvariant) {\n uint256 invariantDeltaFromFees = postJoinExitInvariant - feelessInvariant;\n\n // To convert to a percentage of pool ownership, multiply by the rate,\n // then normalize against the final invariant\n uint256 protocolOwnershipPercentage = Math.divDown(\n Math.mul(invariantDeltaFromFees, getProtocolFeePercentageCache(ProtocolFeeType.SWAP)),\n postJoinExitInvariant\n );\n\n if (protocolOwnershipPercentage > 0) {\n uint256 protocolFeeAmount = ProtocolFees.bptForPoolOwnershipPercentage(\n postJoinExitSupply,\n protocolOwnershipPercentage\n );\n\n _payProtocolFees(protocolFeeAmount);\n }\n }\n\n _updatePostJoinExit(currentAmp, postJoinExitInvariant);\n }\n\n /**\n * @dev Update the stored values of the amp and final post-join/exit invariant, to reset the basis for protocol\n * swap fees. Also copy the current rates to the old rates, to establish the new protocol yield basis for protocol\n * yield fees.\n */\n function _updatePostJoinExit(uint256 currentAmp, uint256 postJoinExitInvariant) internal {\n _lastJoinExitData =\n WordCodec.encodeUint(currentAmp, _LAST_JOIN_EXIT_AMPLIFICATION_OFFSET, _LAST_JOIN_EXIT_AMPLIFICATION_SIZE) |\n WordCodec.encodeUint(\n postJoinExitInvariant,\n _LAST_POST_JOIN_EXIT_INVARIANT_OFFSET,\n _LAST_POST_JOIN_EXIT_INVARIANT_SIZE\n );\n\n _updateOldRates();\n }\n\n /**\n * @notice Return the amplification factor and invariant as of the most recent join or exit (including BPT swaps)\n */\n function getLastJoinExitData()\n public\n view\n returns (uint256 lastJoinExitAmplification, uint256 lastPostJoinExitInvariant)\n {\n bytes32 rawData = _lastJoinExitData;\n\n lastJoinExitAmplification = rawData.decodeUint(\n _LAST_JOIN_EXIT_AMPLIFICATION_OFFSET,\n _LAST_JOIN_EXIT_AMPLIFICATION_SIZE\n );\n\n lastPostJoinExitInvariant = rawData.decodeUint(\n _LAST_POST_JOIN_EXIT_INVARIANT_OFFSET,\n _LAST_POST_JOIN_EXIT_INVARIANT_SIZE\n );\n }\n\n /**\n * @dev Inheritance rules still require us to override this in the most derived contract, even though\n * it only calls super.\n */\n function _isOwnerOnlyAction(bytes32 actionId)\n internal\n view\n virtual\n override(\n // Our inheritance pattern creates a small diamond that requires explicitly listing the parents here.\n // Each parent calls the `super` version, so linearization ensures all implementations are called.\n BasePool,\n BasePoolAuthorization,\n ComposableStablePoolRates\n )\n returns (bool)\n {\n return super._isOwnerOnlyAction(actionId);\n }\n}\n" + }, + "contracts/StablePoolAmplification.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\";\n\nimport \"./StableMath.sol\";\n\nabstract contract StablePoolAmplification is BasePoolAuthorization {\n using WordCodec for bytes32;\n\n // This contract uses timestamps to slowly update its Amplification parameter over time. These changes must occur\n // over a minimum time period much larger than the blocktime, making timestamp manipulation a non-issue.\n // solhint-disable not-rely-on-time\n\n // Amplification factor changes must happen over a minimum period of one day, and can at most divide or multiply the\n // current value by 2 every day.\n // WARNING: this only limits *a single* amplification change to have a maximum rate of change of twice the original\n // value daily. It is possible to perform multiple amplification changes in sequence to increase this value more\n // rapidly: for example, by doubling the value every day it can increase by a factor of 8 over three days (2^3).\n uint256 private constant _MIN_UPDATE_TIME = 1 days;\n uint256 private constant _MAX_AMP_UPDATE_DAILY_RATE = 2;\n\n // The amplification data structure is as follows:\n // [ 64 bits | 64 bits | 64 bits | 64 bits ]\n // [ end time | start time | end value | start value ]\n // |MSB LSB|\n\n uint256 private constant _AMP_START_VALUE_OFFSET = 0;\n uint256 private constant _AMP_END_VALUE_OFFSET = 64;\n uint256 private constant _AMP_START_TIME_OFFSET = 128;\n uint256 private constant _AMP_END_TIME_OFFSET = 192;\n\n uint256 private constant _AMP_VALUE_BIT_LENGTH = 64;\n uint256 private constant _AMP_TIMESTAMP_BIT_LENGTH = 64;\n\n bytes32 private _packedAmplificationData;\n\n event AmpUpdateStarted(uint256 startValue, uint256 endValue, uint256 startTime, uint256 endTime);\n event AmpUpdateStopped(uint256 currentValue);\n\n constructor(uint256 amplificationParameter) {\n _require(amplificationParameter >= StableMath._MIN_AMP, Errors.MIN_AMP);\n _require(amplificationParameter <= StableMath._MAX_AMP, Errors.MAX_AMP);\n\n uint256 initialAmp = Math.mul(amplificationParameter, StableMath._AMP_PRECISION);\n _setAmplificationData(initialAmp);\n }\n\n function getAmplificationParameter()\n external\n view\n returns (\n uint256 value,\n bool isUpdating,\n uint256 precision\n )\n {\n (value, isUpdating) = _getAmplificationParameter();\n precision = StableMath._AMP_PRECISION;\n }\n\n // Return the current amp value, which will be an interpolation if there is an ongoing amp update.\n // Also return a flag indicating whether there is an ongoing update.\n function _getAmplificationParameter() internal view returns (uint256 value, bool isUpdating) {\n (uint256 startValue, uint256 endValue, uint256 startTime, uint256 endTime) = _getAmplificationData();\n\n // Note that block.timestamp >= startTime, since startTime is set to the current time when an update starts\n\n if (block.timestamp < endTime) {\n isUpdating = true;\n\n // We can skip checked arithmetic as:\n // - block.timestamp is always larger or equal to startTime\n // - endTime is always larger than startTime\n // - the value delta is bounded by the largest amplification parameter, which never causes the\n // multiplication to overflow.\n // This also means that the following computation will never revert nor yield invalid results.\n if (endValue > startValue) {\n value = startValue + ((endValue - startValue) * (block.timestamp - startTime)) / (endTime - startTime);\n } else {\n value = startValue - ((startValue - endValue) * (block.timestamp - startTime)) / (endTime - startTime);\n }\n } else {\n isUpdating = false;\n value = endValue;\n }\n }\n\n // Unpack and return all amplification-related parameters.\n function _getAmplificationData()\n private\n view\n returns (\n uint256 startValue,\n uint256 endValue,\n uint256 startTime,\n uint256 endTime\n )\n {\n startValue = _packedAmplificationData.decodeUint(_AMP_START_VALUE_OFFSET, _AMP_VALUE_BIT_LENGTH);\n endValue = _packedAmplificationData.decodeUint(_AMP_END_VALUE_OFFSET, _AMP_VALUE_BIT_LENGTH);\n startTime = _packedAmplificationData.decodeUint(_AMP_START_TIME_OFFSET, _AMP_TIMESTAMP_BIT_LENGTH);\n endTime = _packedAmplificationData.decodeUint(_AMP_END_TIME_OFFSET, _AMP_TIMESTAMP_BIT_LENGTH);\n }\n\n /**\n * @dev Begin changing the amplification parameter to `rawEndValue` over time. The value will change linearly until\n * `endTime` is reached, when it will be `rawEndValue`.\n *\n * NOTE: Internally, the amplification parameter is represented using higher precision. The values returned by\n * `getAmplificationParameter` have to be corrected to account for this when comparing to `rawEndValue`.\n */\n function startAmplificationParameterUpdate(uint256 rawEndValue, uint256 endTime) external authenticate {\n _require(rawEndValue >= StableMath._MIN_AMP, Errors.MIN_AMP);\n _require(rawEndValue <= StableMath._MAX_AMP, Errors.MAX_AMP);\n\n uint256 duration = Math.sub(endTime, block.timestamp);\n _require(duration >= _MIN_UPDATE_TIME, Errors.AMP_END_TIME_TOO_CLOSE);\n\n (uint256 currentValue, bool isUpdating) = _getAmplificationParameter();\n _require(!isUpdating, Errors.AMP_ONGOING_UPDATE);\n\n uint256 endValue = Math.mul(rawEndValue, StableMath._AMP_PRECISION);\n\n // daily rate = (endValue / currentValue) / duration * 1 day\n // We perform all multiplications first to not reduce precision, and round the division up as we want to avoid\n // large rates. Note that these are regular integer multiplications and divisions, not fixed point.\n uint256 dailyRate = endValue > currentValue\n ? Math.divUp(Math.mul(1 days, endValue), Math.mul(currentValue, duration))\n : Math.divUp(Math.mul(1 days, currentValue), Math.mul(endValue, duration));\n _require(dailyRate <= _MAX_AMP_UPDATE_DAILY_RATE, Errors.AMP_RATE_TOO_HIGH);\n\n _setAmplificationData(currentValue, endValue, block.timestamp, endTime);\n }\n\n /**\n * @dev Stops the amplification parameter change process, keeping the current value.\n */\n function stopAmplificationParameterUpdate() external authenticate {\n (uint256 currentValue, bool isUpdating) = _getAmplificationParameter();\n _require(isUpdating, Errors.AMP_NO_ONGOING_UPDATE);\n\n _setAmplificationData(currentValue);\n }\n\n function _setAmplificationData(uint256 value) private {\n _storeAmplificationData(value, value, block.timestamp, block.timestamp);\n emit AmpUpdateStopped(value);\n }\n\n function _setAmplificationData(\n uint256 startValue,\n uint256 endValue,\n uint256 startTime,\n uint256 endTime\n ) private {\n _storeAmplificationData(startValue, endValue, startTime, endTime);\n emit AmpUpdateStarted(startValue, endValue, startTime, endTime);\n }\n\n function _storeAmplificationData(\n uint256 startValue,\n uint256 endValue,\n uint256 startTime,\n uint256 endTime\n ) private {\n _packedAmplificationData =\n WordCodec.encodeUint(startValue, _AMP_START_VALUE_OFFSET, _AMP_VALUE_BIT_LENGTH) |\n WordCodec.encodeUint(endValue, _AMP_END_VALUE_OFFSET, _AMP_VALUE_BIT_LENGTH) |\n WordCodec.encodeUint(startTime, _AMP_START_TIME_OFFSET, _AMP_TIMESTAMP_BIT_LENGTH) |\n WordCodec.encodeUint(endTime, _AMP_END_TIME_OFFSET, _AMP_TIMESTAMP_BIT_LENGTH);\n }\n\n // Permissioned functions\n\n /**\n * @dev Overrides only owner action to allow setting the cache duration for the token rates\n */\n function _isOwnerOnlyAction(bytes32 actionId) internal view virtual override returns (bool) {\n return\n (actionId == getActionId(this.startAmplificationParameterUpdate.selector)) ||\n (actionId == getActionId(this.stopAmplificationParameterUpdate.selector)) ||\n super._isOwnerOnlyAction(actionId);\n }\n}\n" + }, + "contracts/StableMath.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\n\n// These functions start with an underscore, as if they were part of a contract and not a library. At some point this\n// should be fixed. Additionally, some variables have non mixed case names (e.g. P_D) that relate to the mathematical\n// derivations.\n// solhint-disable private-vars-leading-underscore, var-name-mixedcase\n\nlibrary StableMath {\n using FixedPoint for uint256;\n\n uint256 internal constant _MIN_AMP = 1;\n uint256 internal constant _MAX_AMP = 5000;\n uint256 internal constant _AMP_PRECISION = 1e3;\n\n uint256 internal constant _MAX_STABLE_TOKENS = 5;\n\n // Note on unchecked arithmetic:\n // This contract performs a large number of additions, subtractions, multiplications and divisions, often inside\n // loops. Since many of these operations are gas-sensitive (as they happen e.g. during a swap), it is important to\n // not make any unnecessary checks. We rely on a set of invariants to avoid having to use checked arithmetic (the\n // Math library), including:\n // - the number of tokens is bounded by _MAX_STABLE_TOKENS\n // - the amplification parameter is bounded by _MAX_AMP * _AMP_PRECISION, which fits in 23 bits\n // - the token balances are bounded by 2^112 (guaranteed by the Vault) times 1e18 (the maximum scaling factor),\n // which fits in 172 bits\n //\n // This means e.g. we can safely multiply a balance by the amplification parameter without worrying about overflow.\n\n // About swap fees on joins and exits:\n // Any join or exit that is not perfectly balanced (e.g. all single token joins or exits) is mathematically\n // equivalent to a perfectly balanced join or exit followed by a series of swaps. Since these swaps would charge\n // swap fees, it follows that (some) joins and exits should as well.\n // On these operations, we split the token amounts in 'taxable' and 'non-taxable' portions, where the 'taxable' part\n // is the one to which swap fees are applied.\n\n // Computes the invariant given the current balances, using the Newton-Raphson approximation.\n // The amplification parameter equals: A n^(n-1)\n // See: https://github.com/curvefi/curve-contract/blob/b0bbf77f8f93c9c5f4e415bce9cd71f0cdee960e/contracts/pool-templates/base/SwapTemplateBase.vy#L206\n // solhint-disable-previous-line max-line-length\n function _calculateInvariant(uint256 amplificationParameter, uint256[] memory balances)\n internal\n pure\n returns (uint256)\n {\n /**********************************************************************************************\n // invariant //\n // D = invariant D^(n+1) //\n // A = amplification coefficient A n^n S + D = A D n^n + ----------- //\n // S = sum of balances n^n P //\n // P = product of balances //\n // n = number of tokens //\n **********************************************************************************************/\n\n // Always round down, to match Vyper's arithmetic (which always truncates).\n\n uint256 sum = 0; // S in the Curve version\n uint256 numTokens = balances.length;\n for (uint256 i = 0; i < numTokens; i++) {\n sum = sum.add(balances[i]);\n }\n if (sum == 0) {\n return 0;\n }\n\n uint256 prevInvariant; // Dprev in the Curve version\n uint256 invariant = sum; // D in the Curve version\n uint256 ampTimesTotal = amplificationParameter * numTokens; // Ann in the Curve version\n\n for (uint256 i = 0; i < 255; i++) {\n uint256 D_P = invariant;\n\n for (uint256 j = 0; j < numTokens; j++) {\n // (D_P * invariant) / (balances[j] * numTokens)\n D_P = Math.divDown(Math.mul(D_P, invariant), Math.mul(balances[j], numTokens));\n }\n\n prevInvariant = invariant;\n\n invariant = Math.divDown(\n Math.mul(\n // (ampTimesTotal * sum) / AMP_PRECISION + D_P * numTokens\n (Math.divDown(Math.mul(ampTimesTotal, sum), _AMP_PRECISION).add(Math.mul(D_P, numTokens))),\n invariant\n ),\n // ((ampTimesTotal - _AMP_PRECISION) * invariant) / _AMP_PRECISION + (numTokens + 1) * D_P\n (\n Math.divDown(Math.mul((ampTimesTotal - _AMP_PRECISION), invariant), _AMP_PRECISION).add(\n Math.mul((numTokens + 1), D_P)\n )\n )\n );\n\n if (invariant > prevInvariant) {\n if (invariant - prevInvariant <= 1) {\n return invariant;\n }\n } else if (prevInvariant - invariant <= 1) {\n return invariant;\n }\n }\n\n _revert(Errors.STABLE_INVARIANT_DIDNT_CONVERGE);\n }\n\n // Computes how many tokens can be taken out of a pool if `tokenAmountIn` are sent, given the current balances.\n // The amplification parameter equals: A n^(n-1)\n function _calcOutGivenIn(\n uint256 amplificationParameter,\n uint256[] memory balances,\n uint256 tokenIndexIn,\n uint256 tokenIndexOut,\n uint256 tokenAmountIn,\n uint256 invariant\n ) internal pure returns (uint256) {\n /**************************************************************************************************************\n // outGivenIn token x for y - polynomial equation to solve //\n // ay = amount out to calculate //\n // by = balance token out //\n // y = by - ay (finalBalanceOut) //\n // D = invariant D D^(n+1) //\n // A = amplification coefficient y^2 + ( S - ---------- - D) * y - ------------- = 0 //\n // n = number of tokens (A * n^n) A * n^2n * P //\n // S = sum of final balances but y //\n // P = product of final balances but y //\n **************************************************************************************************************/\n\n // Amount out, so we round down overall.\n balances[tokenIndexIn] = balances[tokenIndexIn].add(tokenAmountIn);\n\n uint256 finalBalanceOut = _getTokenBalanceGivenInvariantAndAllOtherBalances(\n amplificationParameter,\n balances,\n invariant,\n tokenIndexOut\n );\n\n // No need to use checked arithmetic since `tokenAmountIn` was actually added to the same balance right before\n // calling `_getTokenBalanceGivenInvariantAndAllOtherBalances` which doesn't alter the balances array.\n balances[tokenIndexIn] = balances[tokenIndexIn] - tokenAmountIn;\n\n return balances[tokenIndexOut].sub(finalBalanceOut).sub(1);\n }\n\n // Computes how many tokens must be sent to a pool if `tokenAmountOut` are sent given the\n // current balances, using the Newton-Raphson approximation.\n // The amplification parameter equals: A n^(n-1)\n function _calcInGivenOut(\n uint256 amplificationParameter,\n uint256[] memory balances,\n uint256 tokenIndexIn,\n uint256 tokenIndexOut,\n uint256 tokenAmountOut,\n uint256 invariant\n ) internal pure returns (uint256) {\n /**************************************************************************************************************\n // inGivenOut token x for y - polynomial equation to solve //\n // ax = amount in to calculate //\n // bx = balance token in //\n // x = bx + ax (finalBalanceIn) //\n // D = invariant D D^(n+1) //\n // A = amplification coefficient x^2 + ( S - ---------- - D) * x - ------------- = 0 //\n // n = number of tokens (A * n^n) A * n^2n * P //\n // S = sum of final balances but x //\n // P = product of final balances but x //\n **************************************************************************************************************/\n\n // Amount in, so we round up overall.\n balances[tokenIndexOut] = balances[tokenIndexOut].sub(tokenAmountOut);\n\n uint256 finalBalanceIn = _getTokenBalanceGivenInvariantAndAllOtherBalances(\n amplificationParameter,\n balances,\n invariant,\n tokenIndexIn\n );\n\n // No need to use checked arithmetic since `tokenAmountOut` was actually subtracted from the same balance right\n // before calling `_getTokenBalanceGivenInvariantAndAllOtherBalances` which doesn't alter the balances array.\n balances[tokenIndexOut] = balances[tokenIndexOut] + tokenAmountOut;\n\n return finalBalanceIn.sub(balances[tokenIndexIn]).add(1);\n }\n\n function _calcBptOutGivenExactTokensIn(\n uint256 amp,\n uint256[] memory balances,\n uint256[] memory amountsIn,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFeePercentage\n ) internal pure returns (uint256) {\n // BPT out, so we round down overall.\n\n // First loop calculates the sum of all token balances, which will be used to calculate\n // the current weights of each token, relative to this sum\n uint256 sumBalances = 0;\n for (uint256 i = 0; i < balances.length; i++) {\n sumBalances = sumBalances.add(balances[i]);\n }\n\n // Calculate the weighted balance ratio without considering fees\n uint256[] memory balanceRatiosWithFee = new uint256[](amountsIn.length);\n // The weighted sum of token balance ratios with fee\n uint256 invariantRatioWithFees = 0;\n for (uint256 i = 0; i < balances.length; i++) {\n uint256 currentWeight = balances[i].divDown(sumBalances);\n balanceRatiosWithFee[i] = balances[i].add(amountsIn[i]).divDown(balances[i]);\n invariantRatioWithFees = invariantRatioWithFees.add(balanceRatiosWithFee[i].mulDown(currentWeight));\n }\n\n // Second loop calculates new amounts in, taking into account the fee on the percentage excess\n uint256[] memory newBalances = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; i++) {\n uint256 amountInWithoutFee;\n\n // Check if the balance ratio is greater than the ideal ratio to charge fees or not\n if (balanceRatiosWithFee[i] > invariantRatioWithFees) {\n uint256 nonTaxableAmount = balances[i].mulDown(invariantRatioWithFees.sub(FixedPoint.ONE));\n uint256 taxableAmount = amountsIn[i].sub(nonTaxableAmount);\n // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%\n amountInWithoutFee = nonTaxableAmount.add(taxableAmount.mulDown(FixedPoint.ONE - swapFeePercentage));\n } else {\n amountInWithoutFee = amountsIn[i];\n }\n\n newBalances[i] = balances[i].add(amountInWithoutFee);\n }\n\n uint256 newInvariant = _calculateInvariant(amp, newBalances);\n uint256 invariantRatio = newInvariant.divDown(currentInvariant);\n\n // If the invariant didn't increase for any reason, we simply don't mint BPT\n if (invariantRatio > FixedPoint.ONE) {\n return bptTotalSupply.mulDown(invariantRatio - FixedPoint.ONE);\n } else {\n return 0;\n }\n }\n\n function _calcTokenInGivenExactBptOut(\n uint256 amp,\n uint256[] memory balances,\n uint256 tokenIndex,\n uint256 bptAmountOut,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFeePercentage\n ) internal pure returns (uint256) {\n // Token in, so we round up overall.\n\n uint256 newInvariant = bptTotalSupply.add(bptAmountOut).divUp(bptTotalSupply).mulUp(currentInvariant);\n\n // Calculate amount in without fee.\n uint256 newBalanceTokenIndex = _getTokenBalanceGivenInvariantAndAllOtherBalances(\n amp,\n balances,\n newInvariant,\n tokenIndex\n );\n uint256 amountInWithoutFee = newBalanceTokenIndex.sub(balances[tokenIndex]);\n\n // First calculate the sum of all token balances, which will be used to calculate\n // the current weight of each token\n uint256 sumBalances = 0;\n for (uint256 i = 0; i < balances.length; i++) {\n sumBalances = sumBalances.add(balances[i]);\n }\n\n // We can now compute how much extra balance is being deposited and used in virtual swaps, and charge swap fees\n // accordingly.\n uint256 currentWeight = balances[tokenIndex].divDown(sumBalances);\n uint256 taxablePercentage = currentWeight.complement();\n uint256 taxableAmount = amountInWithoutFee.mulUp(taxablePercentage);\n uint256 nonTaxableAmount = amountInWithoutFee.sub(taxableAmount);\n\n // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%\n return nonTaxableAmount.add(taxableAmount.divUp(FixedPoint.ONE - swapFeePercentage));\n }\n\n /*\n Flow of calculations:\n amountsTokenOut -> amountsOutProportional ->\n amountOutPercentageExcess -> amountOutBeforeFee -> newInvariant -> amountBPTIn\n */\n function _calcBptInGivenExactTokensOut(\n uint256 amp,\n uint256[] memory balances,\n uint256[] memory amountsOut,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFeePercentage\n ) internal pure returns (uint256) {\n // BPT in, so we round up overall.\n\n // First loop calculates the sum of all token balances, which will be used to calculate\n // the current weights of each token relative to this sum\n uint256 sumBalances = 0;\n for (uint256 i = 0; i < balances.length; i++) {\n sumBalances = sumBalances.add(balances[i]);\n }\n\n // Calculate the weighted balance ratio without considering fees\n uint256[] memory balanceRatiosWithoutFee = new uint256[](amountsOut.length);\n uint256 invariantRatioWithoutFees = 0;\n for (uint256 i = 0; i < balances.length; i++) {\n uint256 currentWeight = balances[i].divUp(sumBalances);\n balanceRatiosWithoutFee[i] = balances[i].sub(amountsOut[i]).divUp(balances[i]);\n invariantRatioWithoutFees = invariantRatioWithoutFees.add(balanceRatiosWithoutFee[i].mulUp(currentWeight));\n }\n\n // Second loop calculates new amounts in, taking into account the fee on the percentage excess\n uint256[] memory newBalances = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; i++) {\n // Swap fees are typically charged on 'token in', but there is no 'token in' here, so we apply it to\n // 'token out'. This results in slightly larger price impact.\n\n uint256 amountOutWithFee;\n if (invariantRatioWithoutFees > balanceRatiosWithoutFee[i]) {\n uint256 nonTaxableAmount = balances[i].mulDown(invariantRatioWithoutFees.complement());\n uint256 taxableAmount = amountsOut[i].sub(nonTaxableAmount);\n // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%\n amountOutWithFee = nonTaxableAmount.add(taxableAmount.divUp(FixedPoint.ONE - swapFeePercentage));\n } else {\n amountOutWithFee = amountsOut[i];\n }\n\n newBalances[i] = balances[i].sub(amountOutWithFee);\n }\n\n uint256 newInvariant = _calculateInvariant(amp, newBalances);\n uint256 invariantRatio = newInvariant.divDown(currentInvariant);\n\n // return amountBPTIn\n return bptTotalSupply.mulUp(invariantRatio.complement());\n }\n\n function _calcTokenOutGivenExactBptIn(\n uint256 amp,\n uint256[] memory balances,\n uint256 tokenIndex,\n uint256 bptAmountIn,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFeePercentage\n ) internal pure returns (uint256) {\n // Token out, so we round down overall.\n\n uint256 newInvariant = bptTotalSupply.sub(bptAmountIn).divUp(bptTotalSupply).mulUp(currentInvariant);\n\n // Calculate amount out without fee\n uint256 newBalanceTokenIndex = _getTokenBalanceGivenInvariantAndAllOtherBalances(\n amp,\n balances,\n newInvariant,\n tokenIndex\n );\n uint256 amountOutWithoutFee = balances[tokenIndex].sub(newBalanceTokenIndex);\n\n // First calculate the sum of all token balances, which will be used to calculate\n // the current weight of each token\n uint256 sumBalances = 0;\n for (uint256 i = 0; i < balances.length; i++) {\n sumBalances = sumBalances.add(balances[i]);\n }\n\n // We can now compute how much excess balance is being withdrawn as a result of the virtual swaps, which result\n // in swap fees.\n uint256 currentWeight = balances[tokenIndex].divDown(sumBalances);\n uint256 taxablePercentage = currentWeight.complement();\n\n // Swap fees are typically charged on 'token in', but there is no 'token in' here, so we apply it\n // to 'token out'. This results in slightly larger price impact. Fees are rounded up.\n uint256 taxableAmount = amountOutWithoutFee.mulUp(taxablePercentage);\n uint256 nonTaxableAmount = amountOutWithoutFee.sub(taxableAmount);\n\n // No need to use checked arithmetic for the swap fee, it is guaranteed to be lower than 50%\n return nonTaxableAmount.add(taxableAmount.mulDown(FixedPoint.ONE - swapFeePercentage));\n }\n\n // This function calculates the balance of a given token (tokenIndex)\n // given all the other balances and the invariant\n function _getTokenBalanceGivenInvariantAndAllOtherBalances(\n uint256 amplificationParameter,\n uint256[] memory balances,\n uint256 invariant,\n uint256 tokenIndex\n ) internal pure returns (uint256) {\n // Rounds result up overall\n\n uint256 ampTimesTotal = amplificationParameter * balances.length;\n uint256 sum = balances[0];\n uint256 P_D = balances[0] * balances.length;\n for (uint256 j = 1; j < balances.length; j++) {\n P_D = Math.divDown(Math.mul(Math.mul(P_D, balances[j]), balances.length), invariant);\n sum = sum.add(balances[j]);\n }\n // No need to use safe math, based on the loop above `sum` is greater than or equal to `balances[tokenIndex]`\n sum = sum - balances[tokenIndex];\n\n uint256 inv2 = Math.mul(invariant, invariant);\n // We remove the balance from c by multiplying it\n uint256 c = Math.mul(\n Math.mul(Math.divUp(inv2, Math.mul(ampTimesTotal, P_D)), _AMP_PRECISION),\n balances[tokenIndex]\n );\n uint256 b = sum.add(Math.mul(Math.divDown(invariant, ampTimesTotal), _AMP_PRECISION));\n\n // We iterate to find the balance\n uint256 prevTokenBalance = 0;\n // We multiply the first iteration outside the loop with the invariant to set the value of the\n // initial approximation.\n uint256 tokenBalance = Math.divUp(inv2.add(c), invariant.add(b));\n\n for (uint256 i = 0; i < 255; i++) {\n prevTokenBalance = tokenBalance;\n\n tokenBalance = Math.divUp(\n Math.mul(tokenBalance, tokenBalance).add(c),\n Math.mul(tokenBalance, 2).add(b).sub(invariant)\n );\n\n if (tokenBalance > prevTokenBalance) {\n if (tokenBalance - prevTokenBalance <= 1) {\n return tokenBalance;\n }\n } else if (prevTokenBalance - tokenBalance <= 1) {\n return tokenBalance;\n }\n }\n\n _revert(Errors.STABLE_GET_BALANCE_DIDNT_CONVERGE);\n }\n\n function _computeProportionalAmountsIn(\n uint256[] memory balances,\n uint256 bptAmountOut,\n uint256 totalBPT\n ) internal pure returns (uint256[] memory) {\n /************************************************************************************\n // tokensInForExactBptOut //\n // (per token) //\n // aI = amountIn / bptOut \\ //\n // b = balance aI = b * | ------------ | //\n // bptOut = bptAmountOut \\ totalBPT / //\n // bpt = totalBPT //\n ************************************************************************************/\n\n // Tokens in, so we round up overall.\n uint256 bptRatio = bptAmountOut.divUp(totalBPT);\n\n uint256[] memory amountsIn = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; i++) {\n amountsIn[i] = balances[i].mulUp(bptRatio);\n }\n\n return amountsIn;\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n// documentation files (the “Software”), to deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the\n// Software.\n\n// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/* solhint-disable */\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2**254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n _require(x >> 255 == 0, Errors.X_OUT_OF_BOUNDS);\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n _require(y < MILD_EXPONENT_BOUND, Errors.Y_OUT_OF_BOUNDS);\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n _require(\n MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT,\n Errors.PRODUCT_OUT_OF_BOUNDS\n );\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n _require(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT, Errors.INVALID_EXPONENT);\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT).\n // Fixed point division requires multiplying by ONE_18.\n return ((ONE_18 * ONE_18) / exp(-x));\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n return (((product * seriesSum) / ONE_20) * firstAN) / 100;\n }\n\n /**\n * @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n */\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n\n int256 logArg;\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n\n /**\n * @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n */\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n _require(a > 0, Errors.OUT_OF_BOUNDS);\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n return _ln_36(a) / ONE_18;\n } else {\n return _ln(a);\n }\n }\n\n /**\n * @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n */\n function _ln(int256 a) private pure returns (int256) {\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, and this if statement will not be entered in the recursive call.\n // Fixed point division requires multiplying by ONE_18.\n return (-_ln((ONE_18 * ONE_18) / a));\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n return (sum + seriesSum) / 100;\n }\n\n /**\n * @dev Intrnal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero\n * address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like\n * types.\n *\n * This concept is unrelated to a Pool's Asset Managers.\n */\ninterface IAsset {\n // solhint-disable-previous-line no-empty-blocks\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./IBasePool.sol\";\n\n/**\n * @dev IPools with the General specialization setting should implement this interface.\n *\n * This is called by the Vault when a user calls `IVault.swap` or `IVault.batchSwap` to swap with this Pool.\n * Returns the number of tokens the Pool will grant to the user in a 'given in' swap, or that the user will\n * grant to the pool in a 'given out' swap.\n *\n * This can often be implemented by a `view` function, since many pricing algorithms don't need to track state\n * changes in swaps. However, contracts implementing this in non-view functions should check that the caller is\n * indeed the Vault.\n */\ninterface IGeneralPool is IBasePool {\n function onSwap(\n SwapRequest memory swapRequest,\n uint256[] memory balances,\n uint256 indexIn,\n uint256 indexOut\n ) external returns (uint256 amount);\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/BasePool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\n\nimport \"./BalancerPoolToken.sol\";\nimport \"./BasePoolAuthorization.sol\";\nimport \"./RecoveryMode.sol\";\n\n// solhint-disable max-states-count\n\n/**\n * @notice Reference implementation for the base layer of a Pool contract.\n * @dev Reference implementation for the base layer of a Pool contract that manages a single Pool with optional\n * Asset Managers, an admin-controlled swap fee percentage, and an emergency pause mechanism.\n *\n * This Pool pays protocol fees by minting BPT directly to the ProtocolFeeCollector instead of using the\n * `dueProtocolFees` return value. This results in the underlying tokens continuing to provide liquidity\n * for traders, while still keeping gas usage to a minimum since only a single token (the BPT) is transferred.\n *\n * Note that neither swap fees nor the pause mechanism are used by this contract. They are passed through so that\n * derived contracts can use them via the `_addSwapFeeAmount` and `_subtractSwapFeeAmount` functions, and the\n * `whenNotPaused` modifier.\n *\n * No admin permissions are checked here: instead, this contract delegates that to the Vault's own Authorizer.\n *\n * Because this contract doesn't implement the swap hooks, derived contracts should generally inherit from\n * BaseGeneralPool or BaseMinimalSwapInfoPool. Otherwise, subclasses must inherit from the corresponding interfaces\n * and implement the swap callbacks themselves.\n */\nabstract contract BasePool is\n IBasePool,\n IControlledPool,\n BasePoolAuthorization,\n BalancerPoolToken,\n TemporarilyPausable,\n RecoveryMode\n{\n using WordCodec for bytes32;\n using FixedPoint for uint256;\n using BasePoolUserData for bytes;\n\n uint256 private constant _MIN_TOKENS = 2;\n\n uint256 private constant _DEFAULT_MINIMUM_BPT = 1e6;\n\n // 1e18 corresponds to 1.0, or a 100% fee\n uint256 private constant _MIN_SWAP_FEE_PERCENTAGE = 1e12; // 0.0001%\n uint256 private constant _MAX_SWAP_FEE_PERCENTAGE = 1e17; // 10% - this fits in 64 bits\n\n // `_miscData` is a storage slot that can be used to store unrelated pieces of information. All pools store the\n // recovery mode flag and swap fee percentage, but `miscData` can be extended to store more pieces of information.\n // The most signficant bit is reserved for the recovery mode flag, and the swap fee percentage is stored in\n // the next most significant 63 bits, leaving the remaining 192 bits free to store any other information derived\n // pools might need.\n //\n // This slot is preferred for gas-sensitive operations as it is read in all joins, swaps and exits,\n // and therefore warm.\n\n // [ recovery | swap fee | available ]\n // [ 1 bit | 63 bits | 192 bits ]\n // [ MSB LSB ]\n bytes32 private _miscData;\n\n uint256 private constant _SWAP_FEE_PERCENTAGE_OFFSET = 192;\n uint256 private constant _RECOVERY_MODE_BIT_OFFSET = 255;\n\n // A fee can never be larger than FixedPoint.ONE, which fits in 60 bits, so 63 is more than enough.\n uint256 private constant _SWAP_FEE_PERCENTAGE_BIT_LENGTH = 63;\n\n bytes32 private immutable _poolId;\n\n // Note that this value is immutable in the Vault, so we can make it immutable here and save gas\n IProtocolFeesCollector private immutable _protocolFeesCollector;\n\n event SwapFeePercentageChanged(uint256 swapFeePercentage);\n\n constructor(\n IVault vault,\n IVault.PoolSpecialization specialization,\n string memory name,\n string memory symbol,\n IERC20[] memory tokens,\n address[] memory assetManagers,\n uint256 swapFeePercentage,\n uint256 pauseWindowDuration,\n uint256 bufferPeriodDuration,\n address owner\n )\n // Base Pools are expected to be deployed using factories. By using the factory address as the action\n // disambiguator, we make all Pools deployed by the same factory share action identifiers. This allows for\n // simpler management of permissions (such as being able to manage granting the 'set fee percentage' action in\n // any Pool created by the same factory), while still making action identifiers unique among different factories\n // if the selectors match, preventing accidental errors.\n Authentication(bytes32(uint256(msg.sender)))\n BalancerPoolToken(name, symbol, vault)\n BasePoolAuthorization(owner)\n TemporarilyPausable(pauseWindowDuration, bufferPeriodDuration)\n {\n _require(tokens.length >= _MIN_TOKENS, Errors.MIN_TOKENS);\n _require(tokens.length <= _getMaxTokens(), Errors.MAX_TOKENS);\n\n // The Vault only requires the token list to be ordered for the Two Token Pools specialization. However,\n // to make the developer experience consistent, we are requiring this condition for all the native pools.\n // Also, since these Pools will register tokens only once, we can ensure the Pool tokens will follow the same\n // order. We rely on this property to make Pools simpler to write, as it lets us assume that the\n // order of token-specific parameters (such as token weights) will not change.\n InputHelpers.ensureArrayIsSorted(tokens);\n\n _setSwapFeePercentage(swapFeePercentage);\n\n bytes32 poolId = vault.registerPool(specialization);\n\n vault.registerTokens(poolId, tokens, assetManagers);\n\n // Set immutable state variables - these cannot be read from during construction\n _poolId = poolId;\n _protocolFeesCollector = vault.getProtocolFeesCollector();\n }\n\n // Getters / Setters\n\n /**\n * @notice Return the pool id.\n */\n function getPoolId() public view override returns (bytes32) {\n return _poolId;\n }\n\n function _getTotalTokens() internal view virtual returns (uint256);\n\n function _getMaxTokens() internal pure virtual returns (uint256);\n\n /**\n * @dev Returns the minimum BPT supply. This amount is minted to the zero address during initialization, effectively\n * locking it.\n *\n * This is useful to make sure Pool initialization happens only once, but derived Pools can change this value (even\n * to zero) by overriding this function.\n */\n function _getMinimumBpt() internal pure virtual returns (uint256) {\n return _DEFAULT_MINIMUM_BPT;\n }\n\n /**\n * @notice Return the current value of the swap fee percentage.\n * @dev This is stored in `_miscData`.\n */\n function getSwapFeePercentage() public view virtual override returns (uint256) {\n return _miscData.decodeUint(_SWAP_FEE_PERCENTAGE_OFFSET, _SWAP_FEE_PERCENTAGE_BIT_LENGTH);\n }\n\n /**\n * @notice Return the ProtocolFeesCollector contract.\n * @dev This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\n */\n function getProtocolFeesCollector() public view returns (IProtocolFeesCollector) {\n return _protocolFeesCollector;\n }\n\n /**\n * @notice Set the swap fee percentage.\n * @dev This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the\n * bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\n */\n function setSwapFeePercentage(uint256 swapFeePercentage) public virtual override authenticate whenNotPaused {\n _setSwapFeePercentage(swapFeePercentage);\n }\n\n function _setSwapFeePercentage(uint256 swapFeePercentage) internal virtual {\n _require(swapFeePercentage >= _getMinSwapFeePercentage(), Errors.MIN_SWAP_FEE_PERCENTAGE);\n _require(swapFeePercentage <= _getMaxSwapFeePercentage(), Errors.MAX_SWAP_FEE_PERCENTAGE);\n\n _miscData = _miscData.insertUint(\n swapFeePercentage,\n _SWAP_FEE_PERCENTAGE_OFFSET,\n _SWAP_FEE_PERCENTAGE_BIT_LENGTH\n );\n\n emit SwapFeePercentageChanged(swapFeePercentage);\n }\n\n function _getMinSwapFeePercentage() internal pure virtual returns (uint256) {\n return _MIN_SWAP_FEE_PERCENTAGE;\n }\n\n function _getMaxSwapFeePercentage() internal pure virtual returns (uint256) {\n return _MAX_SWAP_FEE_PERCENTAGE;\n }\n\n /**\n * @notice Returns whether the pool is in Recovery Mode.\n */\n function inRecoveryMode() public view override returns (bool) {\n return _miscData.decodeBool(_RECOVERY_MODE_BIT_OFFSET);\n }\n\n /**\n * @dev Sets the recoveryMode state, and emits the corresponding event.\n */\n function _setRecoveryMode(bool enabled) internal virtual override {\n _miscData = _miscData.insertBool(enabled, _RECOVERY_MODE_BIT_OFFSET);\n\n emit RecoveryModeStateChanged(enabled);\n\n // Some pools need to update their state when leaving recovery mode to ensure proper functioning of the Pool.\n // We do not allow an `_onEnableRecoveryMode()` hook as this may jeopardize the ability to enable Recovery mode.\n if (!enabled) _onDisableRecoveryMode();\n }\n\n /**\n * @dev Performs any necessary actions on the disabling of Recovery Mode.\n * This is usually to reset any fee collection mechanisms to ensure that they operate correctly going forward.\n */\n function _onDisableRecoveryMode() internal virtual {}\n\n /**\n * @notice Set the asset manager parameters for the given token.\n * @dev This is a permissioned function, unavailable when the pool is paused.\n * The details of the configuration data are set by each Asset Manager. (For an example, see\n * `RewardsAssetManager`.)\n */\n function setAssetManagerPoolConfig(IERC20 token, bytes memory poolConfig)\n public\n virtual\n override\n authenticate\n whenNotPaused\n {\n _setAssetManagerPoolConfig(token, poolConfig);\n }\n\n function _setAssetManagerPoolConfig(IERC20 token, bytes memory poolConfig) private {\n bytes32 poolId = getPoolId();\n (, , , address assetManager) = getVault().getPoolTokenInfo(poolId, token);\n\n IAssetManager(assetManager).setConfig(poolId, poolConfig);\n }\n\n /**\n * @notice Pause the pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment (see `TemporarilyPausable`).\n */\n function pause() external authenticate {\n _setPaused(true);\n }\n\n /**\n * @notice Reverse a `pause` operation, and restore a pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused pool within the Buffer Period set during\n * pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause\n * after the Buffer Period expires.\n */\n function unpause() external authenticate {\n _setPaused(false);\n }\n\n function _isOwnerOnlyAction(bytes32 actionId) internal view virtual override returns (bool) {\n return\n (actionId == getActionId(this.setSwapFeePercentage.selector)) ||\n (actionId == getActionId(this.setAssetManagerPoolConfig.selector)) ||\n super._isOwnerOnlyAction(actionId);\n }\n\n function _getMiscData() internal view returns (bytes32) {\n return _miscData;\n }\n\n /**\n * @dev Inserts data into the least-significant 192 bits of the misc data storage slot.\n * Note that the remaining 64 bits are used for the swap fee percentage and cannot be overloaded.\n */\n function _setMiscData(bytes32 newData) internal {\n _miscData = _miscData.insertBits192(newData, 0);\n }\n\n // Join / Exit Hooks\n\n modifier onlyVault(bytes32 poolId) {\n _require(msg.sender == address(getVault()), Errors.CALLER_NOT_VAULT);\n _require(poolId == getPoolId(), Errors.INVALID_POOL_ID);\n _;\n }\n\n /**\n * @notice Vault hook for adding liquidity to a pool (including the first time, \"initializing\" the pool).\n * @dev This function can only be called from the Vault, from `joinPool`.\n */\n function onJoinPool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external override onlyVault(poolId) returns (uint256[] memory, uint256[] memory) {\n _beforeSwapJoinExit();\n\n uint256[] memory scalingFactors = _scalingFactors();\n\n if (totalSupply() == 0) {\n (uint256 bptAmountOut, uint256[] memory amountsIn) = _onInitializePool(\n poolId,\n sender,\n recipient,\n scalingFactors,\n userData\n );\n\n // On initialization, we lock _getMinimumBpt() by minting it for the zero address. This BPT acts as a\n // minimum as it will never be burned, which reduces potential issues with rounding, and also prevents the\n // Pool from ever being fully drained.\n _require(bptAmountOut >= _getMinimumBpt(), Errors.MINIMUM_BPT);\n _mintPoolTokens(address(0), _getMinimumBpt());\n _mintPoolTokens(recipient, bptAmountOut - _getMinimumBpt());\n\n // amountsIn are amounts entering the Pool, so we round up.\n _downscaleUpArray(amountsIn, scalingFactors);\n\n return (amountsIn, new uint256[](balances.length));\n } else {\n _upscaleArray(balances, scalingFactors);\n (uint256 bptAmountOut, uint256[] memory amountsIn) = _onJoinPool(\n poolId,\n sender,\n recipient,\n balances,\n lastChangeBlock,\n inRecoveryMode() ? 0 : protocolSwapFeePercentage, // Protocol fees are disabled while in recovery mode\n scalingFactors,\n userData\n );\n\n // Note we no longer use `balances` after calling `_onJoinPool`, which may mutate it.\n\n _mintPoolTokens(recipient, bptAmountOut);\n\n // amountsIn are amounts entering the Pool, so we round up.\n _downscaleUpArray(amountsIn, scalingFactors);\n\n // This Pool ignores the `dueProtocolFees` return value, so we simply return a zeroed-out array.\n return (amountsIn, new uint256[](balances.length));\n }\n }\n\n /**\n * @notice Vault hook for removing liquidity from a pool.\n * @dev This function can only be called from the Vault, from `exitPool`.\n */\n function onExitPool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external override onlyVault(poolId) returns (uint256[] memory, uint256[] memory) {\n uint256[] memory amountsOut;\n uint256 bptAmountIn;\n\n // When a user calls `exitPool`, this is the first point of entry from the Vault.\n // We first check whether this is a Recovery Mode exit - if so, we proceed using this special lightweight exit\n // mechanism which avoids computing any complex values, interacting with external contracts, etc., and generally\n // should always work, even if the Pool's mathematics or a dependency break down.\n if (userData.isRecoveryModeExitKind()) {\n // This exit kind is only available in Recovery Mode.\n _ensureInRecoveryMode();\n\n // Note that we don't upscale balances nor downscale amountsOut - we don't care about scaling factors during\n // a recovery mode exit.\n (bptAmountIn, amountsOut) = _doRecoveryModeExit(balances, totalSupply(), userData);\n } else {\n // Note that we only call this if we're not in a recovery mode exit.\n _beforeSwapJoinExit();\n\n uint256[] memory scalingFactors = _scalingFactors();\n _upscaleArray(balances, scalingFactors);\n\n (bptAmountIn, amountsOut) = _onExitPool(\n poolId,\n sender,\n recipient,\n balances,\n lastChangeBlock,\n inRecoveryMode() ? 0 : protocolSwapFeePercentage, // Protocol fees are disabled while in recovery mode\n scalingFactors,\n userData\n );\n\n // amountsOut are amounts exiting the Pool, so we round down.\n _downscaleDownArray(amountsOut, scalingFactors);\n }\n\n // Note we no longer use `balances` after calling `_onExitPool`, which may mutate it.\n\n _burnPoolTokens(sender, bptAmountIn);\n\n // This Pool ignores the `dueProtocolFees` return value, so we simply return a zeroed-out array.\n return (amountsOut, new uint256[](balances.length));\n }\n\n // Query functions\n\n /**\n * @notice \"Dry run\" `onJoinPool`.\n * @dev Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the\n * Vault with the same arguments, along with the number of tokens `sender` would have to supply.\n *\n * This function is not meant to be called directly, but rather from a helper contract that fetches current Vault\n * data, such as the protocol swap fee percentage and Pool balances.\n *\n * Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must\n * explicitly use eth_call instead of eth_sendTransaction.\n */\n function queryJoin(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external override returns (uint256 bptOut, uint256[] memory amountsIn) {\n InputHelpers.ensureInputLengthMatch(balances.length, _getTotalTokens());\n\n _queryAction(\n poolId,\n sender,\n recipient,\n balances,\n lastChangeBlock,\n protocolSwapFeePercentage,\n userData,\n _onJoinPool,\n _downscaleUpArray\n );\n\n // The `return` opcode is executed directly inside `_queryAction`, so execution never reaches this statement,\n // and we don't need to return anything here - it just silences compiler warnings.\n return (bptOut, amountsIn);\n }\n\n /**\n * @notice \"Dry run\" `onExitPool`.\n * @dev Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the\n * Vault with the same arguments, along with the number of tokens `recipient` would receive.\n *\n * This function is not meant to be called directly, but rather from a helper contract that fetches current Vault\n * data, such as the protocol swap fee percentage and Pool balances.\n *\n * Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must\n * explicitly use eth_call instead of eth_sendTransaction.\n */\n function queryExit(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external override returns (uint256 bptIn, uint256[] memory amountsOut) {\n InputHelpers.ensureInputLengthMatch(balances.length, _getTotalTokens());\n\n _queryAction(\n poolId,\n sender,\n recipient,\n balances,\n lastChangeBlock,\n protocolSwapFeePercentage,\n userData,\n _onExitPool,\n _downscaleDownArray\n );\n\n // The `return` opcode is executed directly inside `_queryAction`, so execution never reaches this statement,\n // and we don't need to return anything here - it just silences compiler warnings.\n return (bptIn, amountsOut);\n }\n\n // Internal hooks to be overridden by derived contracts - all token amounts (except BPT) in these interfaces are\n // upscaled.\n\n /**\n * @dev Called when the Pool is joined for the first time; that is, when the BPT total supply is zero.\n *\n * Returns the amount of BPT to mint, and the token amounts the Pool will receive in return.\n *\n * Minted BPT will be sent to `recipient`, except for _getMinimumBpt(), which will be deducted from this amount and\n * sent to the zero address instead. This will cause that BPT to remain forever locked there, preventing total BTP\n * from ever dropping below that value, and ensuring `_onInitializePool` can only be called once in the entire\n * Pool's lifetime.\n *\n * The tokens granted to the Pool will be transferred from `sender`. These amounts are considered upscaled and will\n * be downscaled (rounding up) before being returned to the Vault.\n */\n function _onInitializePool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal virtual returns (uint256 bptAmountOut, uint256[] memory amountsIn);\n\n /**\n * @dev Called whenever the Pool is joined after the first initialization join (see `_onInitializePool`).\n *\n * Returns the amount of BPT to mint, the token amounts that the Pool will receive in return, and the number of\n * tokens to pay in protocol swap fees.\n *\n * Implementations of this function might choose to mutate the `balances` array to save gas (e.g. when\n * performing intermediate calculations, such as subtraction of due protocol fees). This can be done safely.\n *\n * Minted BPT will be sent to `recipient`.\n *\n * The tokens granted to the Pool will be transferred from `sender`. These amounts are considered upscaled and will\n * be downscaled (rounding up) before being returned to the Vault.\n *\n * Due protocol swap fees will be taken from the Pool's balance in the Vault (see `IBasePool.onJoinPool`). These\n * amounts are considered upscaled and will be downscaled (rounding down) before being returned to the Vault.\n */\n function _onJoinPool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal virtual returns (uint256 bptAmountOut, uint256[] memory amountsIn);\n\n /**\n * @dev Called whenever the Pool is exited.\n *\n * Returns the amount of BPT to burn, the token amounts for each Pool token that the Pool will grant in return, and\n * the number of tokens to pay in protocol swap fees.\n *\n * Implementations of this function might choose to mutate the `balances` array to save gas (e.g. when\n * performing intermediate calculations, such as subtraction of due protocol fees). This can be done safely.\n *\n * BPT will be burnt from `sender`.\n *\n * The Pool will grant tokens to `recipient`. These amounts are considered upscaled and will be downscaled\n * (rounding down) before being returned to the Vault.\n *\n * Due protocol swap fees will be taken from the Pool's balance in the Vault (see `IBasePool.onExitPool`). These\n * amounts are considered upscaled and will be downscaled (rounding down) before being returned to the Vault.\n */\n function _onExitPool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n uint256[] memory scalingFactors,\n bytes memory userData\n ) internal virtual returns (uint256 bptAmountIn, uint256[] memory amountsOut);\n\n /**\n * @dev Called at the very beginning of swaps, joins and exits, even before the scaling factors are read. Derived\n * contracts can extend this implementation to perform any state-changing operations they might need (including e.g.\n * updating the scaling factors),\n *\n * The only scenario in which this function is not called is during a recovery mode exit. This makes it safe to\n * perform non-trivial computations or interact with external dependencies here, as recovery mode will not be\n * affected.\n *\n * Since this contract does not implement swaps, derived contracts must also make sure this function is called on\n * swap handlers.\n */\n function _beforeSwapJoinExit() internal virtual {\n // All joins, exits and swaps are disabled (except recovery mode exits).\n _ensureNotPaused();\n }\n\n // Internal functions\n\n /**\n * @dev Pays protocol fees by minting `bptAmount` to the Protocol Fee Collector.\n */\n function _payProtocolFees(uint256 bptAmount) internal {\n _mintPoolTokens(address(getProtocolFeesCollector()), bptAmount);\n }\n\n /**\n * @dev Adds swap fee amount to `amount`, returning a higher value.\n */\n function _addSwapFeeAmount(uint256 amount) internal view returns (uint256) {\n // This returns amount + fee amount, so we round up (favoring a higher fee amount).\n return amount.divUp(getSwapFeePercentage().complement());\n }\n\n /**\n * @dev Subtracts swap fee amount from `amount`, returning a lower value.\n */\n function _subtractSwapFeeAmount(uint256 amount) internal view returns (uint256) {\n // This returns amount - fee amount, so we round up (favoring a higher fee amount).\n uint256 feeAmount = amount.mulUp(getSwapFeePercentage());\n return amount.sub(feeAmount);\n }\n\n // Scaling\n\n /**\n * @dev Returns a scaling factor that, when multiplied to a token amount for `token`, normalizes its balance as if\n * it had 18 decimals.\n */\n function _computeScalingFactor(IERC20 token) internal view returns (uint256) {\n if (address(token) == address(this)) {\n return FixedPoint.ONE;\n }\n\n // Tokens that don't implement the `decimals` method are not supported.\n uint256 tokenDecimals = ERC20(address(token)).decimals();\n\n // Tokens with more than 18 decimals are not supported.\n uint256 decimalsDifference = Math.sub(18, tokenDecimals);\n return FixedPoint.ONE * 10**decimalsDifference;\n }\n\n /**\n * @dev Returns the scaling factor for one of the Pool's tokens. Reverts if `token` is not a token registered by the\n * Pool.\n *\n * All scaling factors are fixed-point values with 18 decimals, to allow for this function to be overridden by\n * derived contracts that need to apply further scaling, making these factors potentially non-integer.\n *\n * The largest 'base' scaling factor (i.e. in tokens with less than 18 decimals) is 10**18, which in fixed-point is\n * 10**36. This value can be multiplied with a 112 bit Vault balance with no overflow by a factor of ~1e7, making\n * even relatively 'large' factors safe to use.\n *\n * The 1e7 figure is the result of 2**256 / (1e18 * 1e18 * 2**112).\n */\n function _scalingFactor(IERC20 token) internal view virtual returns (uint256);\n\n /**\n * @dev Same as `_scalingFactor()`, except for all registered tokens (in the same order as registered). The Vault\n * will always pass balances in this order when calling any of the Pool hooks.\n */\n function _scalingFactors() internal view virtual returns (uint256[] memory);\n\n function getScalingFactors() external view override returns (uint256[] memory) {\n return _scalingFactors();\n }\n\n /**\n * @dev Applies `scalingFactor` to `amount`, resulting in a larger or equal value depending on whether it needed\n * scaling or not.\n */\n function _upscale(uint256 amount, uint256 scalingFactor) internal pure returns (uint256) {\n // Upscale rounding wouldn't necessarily always go in the same direction: in a swap for example the balance of\n // token in should be rounded up, and that of token out rounded down. This is the only place where we round in\n // the same direction for all amounts, as the impact of this rounding is expected to be minimal (and there's no\n // rounding error unless `_scalingFactor()` is overriden).\n return FixedPoint.mulDown(amount, scalingFactor);\n }\n\n /**\n * @dev Same as `_upscale`, but for an entire array. This function does not return anything, but instead *mutates*\n * the `amounts` array.\n */\n function _upscaleArray(uint256[] memory amounts, uint256[] memory scalingFactors) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = FixedPoint.mulDown(amounts[i], scalingFactors[i]);\n }\n }\n\n /**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded down.\n */\n function _downscaleDown(uint256 amount, uint256 scalingFactor) internal pure returns (uint256) {\n return FixedPoint.divDown(amount, scalingFactor);\n }\n\n /**\n * @dev Same as `_downscaleDown`, but for an entire array. This function does not return anything, but instead\n * *mutates* the `amounts` array.\n */\n function _downscaleDownArray(uint256[] memory amounts, uint256[] memory scalingFactors) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = FixedPoint.divDown(amounts[i], scalingFactors[i]);\n }\n }\n\n /**\n * @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n * whether it needed scaling or not. The result is rounded up.\n */\n function _downscaleUp(uint256 amount, uint256 scalingFactor) internal pure returns (uint256) {\n return FixedPoint.divUp(amount, scalingFactor);\n }\n\n /**\n * @dev Same as `_downscaleUp`, but for an entire array. This function does not return anything, but instead\n * *mutates* the `amounts` array.\n */\n function _downscaleUpArray(uint256[] memory amounts, uint256[] memory scalingFactors) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = FixedPoint.divUp(amounts[i], scalingFactors[i]);\n }\n }\n\n function _getAuthorizer() internal view override returns (IAuthorizer) {\n // Access control management is delegated to the Vault's Authorizer. This lets Balancer Governance manage which\n // accounts can call permissioned functions: for example, to perform emergency pauses.\n // If the owner is delegated, then *all* permissioned functions, including `setSwapFeePercentage`, will be under\n // Governance control.\n return getVault().getAuthorizer();\n }\n\n function _queryAction(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData,\n function(bytes32, address, address, uint256[] memory, uint256, uint256, uint256[] memory, bytes memory)\n internal\n returns (uint256, uint256[] memory) _action,\n function(uint256[] memory, uint256[] memory) internal view _downscaleArray\n ) private {\n // This uses the same technique used by the Vault in queryBatchSwap. Refer to that function for a detailed\n // explanation.\n\n if (msg.sender != address(this)) {\n // We perform an external call to ourselves, forwarding the same calldata. In this call, the else clause of\n // the preceding if statement will be executed instead.\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, ) = address(this).call(msg.data);\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // This call should always revert to decode the bpt and token amounts from the revert reason\n switch success\n case 0 {\n // Note we are manually writing the memory slot 0. We can safely overwrite whatever is\n // stored there as we take full control of the execution and then immediately return.\n\n // We copy the first 4 bytes to check if it matches with the expected signature, otherwise\n // there was another revert reason and we should forward it.\n returndatacopy(0, 0, 0x04)\n let error := and(mload(0), 0xffffffff00000000000000000000000000000000000000000000000000000000)\n\n // If the first 4 bytes don't match with the expected signature, we forward the revert reason.\n if eq(eq(error, 0x43adbafb00000000000000000000000000000000000000000000000000000000), 0) {\n returndatacopy(0, 0, returndatasize())\n revert(0, returndatasize())\n }\n\n // The returndata contains the signature, followed by the raw memory representation of the\n // `bptAmount` and `tokenAmounts` (array: length + data). We need to return an ABI-encoded\n // representation of these.\n // An ABI-encoded response will include one additional field to indicate the starting offset of\n // the `tokenAmounts` array. The `bptAmount` will be laid out in the first word of the\n // returndata.\n //\n // In returndata:\n // [ signature ][ bptAmount ][ tokenAmounts length ][ tokenAmounts values ]\n // [ 4 bytes ][ 32 bytes ][ 32 bytes ][ (32 * length) bytes ]\n //\n // We now need to return (ABI-encoded values):\n // [ bptAmount ][ tokeAmounts offset ][ tokenAmounts length ][ tokenAmounts values ]\n // [ 32 bytes ][ 32 bytes ][ 32 bytes ][ (32 * length) bytes ]\n\n // We copy 32 bytes for the `bptAmount` from returndata into memory.\n // Note that we skip the first 4 bytes for the error signature\n returndatacopy(0, 0x04, 32)\n\n // The offsets are 32-bytes long, so the array of `tokenAmounts` will start after\n // the initial 64 bytes.\n mstore(0x20, 64)\n\n // We now copy the raw memory array for the `tokenAmounts` from returndata into memory.\n // Since bpt amount and offset take up 64 bytes, we start copying at address 0x40. We also\n // skip the first 36 bytes from returndata, which correspond to the signature plus bpt amount.\n returndatacopy(0x40, 0x24, sub(returndatasize(), 36))\n\n // We finally return the ABI-encoded uint256 and the array, which has a total length equal to\n // the size of returndata, plus the 32 bytes of the offset but without the 4 bytes of the\n // error signature.\n return(0, add(returndatasize(), 28))\n }\n default {\n // This call should always revert, but we fail nonetheless if that didn't happen\n invalid()\n }\n }\n } else {\n // This imitates the relevant parts of the bodies of onJoin and onExit. Since they're not virtual, we know\n // that their implementations will match this regardless of what derived contracts might do.\n\n _beforeSwapJoinExit();\n\n uint256[] memory scalingFactors = _scalingFactors();\n _upscaleArray(balances, scalingFactors);\n\n (uint256 bptAmount, uint256[] memory tokenAmounts) = _action(\n poolId,\n sender,\n recipient,\n balances,\n lastChangeBlock,\n protocolSwapFeePercentage,\n scalingFactors,\n userData\n );\n\n _downscaleArray(tokenAmounts, scalingFactors);\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // We will return a raw representation of `bptAmount` and `tokenAmounts` in memory, which is composed of\n // a 32-byte uint256, followed by a 32-byte for the array length, and finally the 32-byte uint256 values\n // Because revert expects a size in bytes, we multiply the array length (stored at `tokenAmounts`) by 32\n let size := mul(mload(tokenAmounts), 32)\n\n // We store the `bptAmount` in the previous slot to the `tokenAmounts` array. We can make sure there\n // will be at least one available slot due to how the memory scratch space works.\n // We can safely overwrite whatever is stored in this slot as we will revert immediately after that.\n let start := sub(tokenAmounts, 0x20)\n mstore(start, bptAmount)\n\n // We send one extra value for the error signature \"QueryError(uint256,uint256[])\" which is 0x43adbafb\n // We use the previous slot to `bptAmount`.\n mstore(sub(start, 0x20), 0x0000000000000000000000000000000000000000000000000000000043adbafb)\n start := sub(start, 0x04)\n\n // When copying from `tokenAmounts` into returndata, we copy the additional 68 bytes to also return\n // the `bptAmount`, the array 's length, and the error signature.\n revert(start, add(size, 68))\n }\n }\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./IVault.sol\";\nimport \"./IPoolSwapStructs.sol\";\n\n/**\n * @dev Interface for adding and removing liquidity that all Pool contracts should implement. Note that this is not\n * the complete Pool contract interface, as it is missing the swap hooks. Pool contracts should also inherit from\n * either IGeneralPool or IMinimalSwapInfoPool\n */\ninterface IBasePool is IPoolSwapStructs {\n /**\n * @dev Called by the Vault when a user calls `IVault.joinPool` to add liquidity to this Pool. Returns how many of\n * each registered token the user should provide, as well as the amount of protocol fees the Pool owes to the Vault.\n * The Vault will then take tokens from `sender` and add them to the Pool's balances, as well as collect\n * the reported amount in protocol fees, which the pool should calculate based on `protocolSwapFeePercentage`.\n *\n * Protocol fees are reported and charged on join events so that the Pool is free of debt whenever new users join.\n *\n * `sender` is the account performing the join (from which tokens will be withdrawn), and `recipient` is the account\n * designated to receive any benefits (typically pool shares). `balances` contains the total balances\n * for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return.\n *\n * `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total\n * balance.\n *\n * `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of\n * join (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.)\n *\n * Contracts implementing this function should check that the caller is indeed the Vault before performing any\n * state-changing operations, such as minting pool shares.\n */\n function onJoinPool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn, uint256[] memory dueProtocolFeeAmounts);\n\n /**\n * @dev Called by the Vault when a user calls `IVault.exitPool` to remove liquidity from this Pool. Returns how many\n * tokens the Vault should deduct from the Pool's balances, as well as the amount of protocol fees the Pool owes\n * to the Vault. The Vault will then take tokens from the Pool's balances and send them to `recipient`,\n * as well as collect the reported amount in protocol fees, which the Pool should calculate based on\n * `protocolSwapFeePercentage`.\n *\n * Protocol fees are charged on exit events to guarantee that users exiting the Pool have paid their share.\n *\n * `sender` is the account performing the exit (typically the pool shareholder), and `recipient` is the account\n * to which the Vault will send the proceeds. `balances` contains the total token balances for each token\n * the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return.\n *\n * `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total\n * balance.\n *\n * `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of\n * exit (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.)\n *\n * Contracts implementing this function should check that the caller is indeed the Vault before performing any\n * state-changing operations, such as burning pool shares.\n */\n function onExitPool(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external returns (uint256[] memory amountsOut, uint256[] memory dueProtocolFeeAmounts);\n\n /**\n * @dev Returns this Pool's ID, used when interacting with the Vault (to e.g. join the Pool or swap with it).\n */\n function getPoolId() external view returns (bytes32);\n\n /**\n * @dev Returns the current swap fee percentage as a 18 decimal fixed point number, so e.g. 1e17 corresponds to a\n * 10% swap fee.\n */\n function getSwapFeePercentage() external view returns (uint256);\n\n /**\n * @dev Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically\n * not relevant for outside parties, but which might be useful for some types of Pools.\n */\n function getScalingFactors() external view returns (uint256[] memory);\n\n function queryJoin(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external returns (uint256 bptOut, uint256[] memory amountsIn);\n\n function queryExit(\n bytes32 poolId,\n address sender,\n address recipient,\n uint256[] memory balances,\n uint256 lastChangeBlock,\n uint256 protocolSwapFeePercentage,\n bytes memory userData\n ) external returns (uint256 bptIn, uint256[] memory amountsOut);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\nimport \"../solidity-utils/helpers/ISignaturesValidator.sol\";\nimport \"../solidity-utils/helpers/ITemporarilyPausable.sol\";\nimport \"../solidity-utils/misc/IWETH.sol\";\n\nimport \"./IAsset.sol\";\nimport \"./IAuthorizer.sol\";\nimport \"./IFlashLoanRecipient.sol\";\nimport \"./IProtocolFeesCollector.sol\";\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Full external interface for the Vault core contract - no external or public methods exist in the contract that\n * don't override one of these declarations.\n */\ninterface IVault is ISignaturesValidator, ITemporarilyPausable, IAuthentication {\n // Generalities about the Vault:\n //\n // - Whenever documentation refers to 'tokens', it strictly refers to ERC20-compliant token contracts. Tokens are\n // transferred out of the Vault by calling the `IERC20.transfer` function, and transferred in by calling\n // `IERC20.transferFrom`. In these cases, the sender must have previously allowed the Vault to use their tokens by\n // calling `IERC20.approve`. The only deviation from the ERC20 standard that is supported is functions not returning\n // a boolean value: in these scenarios, a non-reverting call is assumed to be successful.\n //\n // - All non-view functions in the Vault are non-reentrant: calling them while another one is mid-execution (e.g.\n // while execution control is transferred to a token contract during a swap) will result in a revert. View\n // functions can be called in a re-reentrant way, but doing so might cause them to return inconsistent results.\n // Contracts calling view functions in the Vault must make sure the Vault has not already been entered.\n //\n // - View functions revert if referring to either unregistered Pools, or unregistered tokens for registered Pools.\n\n // Authorizer\n //\n // Some system actions are permissioned, like setting and collecting protocol fees. This permissioning system exists\n // outside of the Vault in the Authorizer contract: the Vault simply calls the Authorizer to check if the caller\n // can perform a given action.\n\n /**\n * @dev Returns the Vault's Authorizer.\n */\n function getAuthorizer() external view returns (IAuthorizer);\n\n /**\n * @dev Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this.\n *\n * Emits an `AuthorizerChanged` event.\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n\n /**\n * @dev Emitted when a new authorizer is set by `setAuthorizer`.\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n // Relayers\n //\n // Additionally, it is possible for an account to perform certain actions on behalf of another one, using their\n // Vault ERC20 allowance and Internal Balance. These accounts are said to be 'relayers' for these Vault functions,\n // and are expected to be smart contracts with sound authentication mechanisms. For an account to be able to wield\n // this power, two things must occur:\n // - The Authorizer must grant the account the permission to be a relayer for the relevant Vault function. This\n // means that Balancer governance must approve each individual contract to act as a relayer for the intended\n // functions.\n // - Each user must approve the relayer to act on their behalf.\n // This double protection means users cannot be tricked into approving malicious relayers (because they will not\n // have been allowed by the Authorizer via governance), nor can malicious relayers approved by a compromised\n // Authorizer or governance drain user funds, since they would also need to be approved by each individual user.\n\n /**\n * @dev Returns true if `user` has approved `relayer` to act as a relayer for them.\n */\n function hasApprovedRelayer(address user, address relayer) external view returns (bool);\n\n /**\n * @dev Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise.\n *\n * Emits a `RelayerApprovalChanged` event.\n */\n function setRelayerApproval(\n address sender,\n address relayer,\n bool approved\n ) external;\n\n /**\n * @dev Emitted every time a relayer is approved or disapproved by `setRelayerApproval`.\n */\n event RelayerApprovalChanged(address indexed relayer, address indexed sender, bool approved);\n\n // Internal Balance\n //\n // Users can deposit tokens into the Vault, where they are allocated to their Internal Balance, and later\n // transferred or withdrawn. It can also be used as a source of tokens when joining Pools, as a destination\n // when exiting them, and as either when performing swaps. This usage of Internal Balance results in greatly reduced\n // gas costs when compared to relying on plain ERC20 transfers, leading to large savings for frequent users.\n //\n // Internal Balance management features batching, which means a single contract call can be used to perform multiple\n // operations of different kinds, with different senders and recipients, at once.\n\n /**\n * @dev Returns `user`'s Internal Balance for a set of tokens.\n */\n function getInternalBalance(address user, IERC20[] memory tokens) external view returns (uint256[] memory);\n\n /**\n * @dev Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer)\n * and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as\n * it lets integrators reuse a user's Vault allowance.\n *\n * For each operation, if the caller is not `sender`, it must be an authorized relayer for them.\n */\n function manageUserBalance(UserBalanceOp[] memory ops) external payable;\n\n /**\n * @dev Data for `manageUserBalance` operations, which include the possibility for ETH to be sent and received\n without manual WETH wrapping or unwrapping.\n */\n struct UserBalanceOp {\n UserBalanceOpKind kind;\n IAsset asset;\n uint256 amount;\n address sender;\n address payable recipient;\n }\n\n // There are four possible operations in `manageUserBalance`:\n //\n // - DEPOSIT_INTERNAL\n // Increases the Internal Balance of the `recipient` account by transferring tokens from the corresponding\n // `sender`. The sender must have allowed the Vault to use their tokens via `IERC20.approve()`.\n //\n // ETH can be used by passing the ETH sentinel value as the asset and forwarding ETH in the call: it will be wrapped\n // and deposited as WETH. Any ETH amount remaining will be sent back to the caller (not the sender, which is\n // relevant for relayers).\n //\n // Emits an `InternalBalanceChanged` event.\n //\n //\n // - WITHDRAW_INTERNAL\n // Decreases the Internal Balance of the `sender` account by transferring tokens to the `recipient`.\n //\n // ETH can be used by passing the ETH sentinel value as the asset. This will deduct WETH instead, unwrap it and send\n // it to the recipient as ETH.\n //\n // Emits an `InternalBalanceChanged` event.\n //\n //\n // - TRANSFER_INTERNAL\n // Transfers tokens from the Internal Balance of the `sender` account to the Internal Balance of `recipient`.\n //\n // Reverts if the ETH sentinel value is passed.\n //\n // Emits an `InternalBalanceChanged` event.\n //\n //\n // - TRANSFER_EXTERNAL\n // Transfers tokens from `sender` to `recipient`, using the Vault's ERC20 allowance. This is typically used by\n // relayers, as it lets them reuse a user's Vault allowance.\n //\n // Reverts if the ETH sentinel value is passed.\n //\n // Emits an `ExternalBalanceTransfer` event.\n\n enum UserBalanceOpKind { DEPOSIT_INTERNAL, WITHDRAW_INTERNAL, TRANSFER_INTERNAL, TRANSFER_EXTERNAL }\n\n /**\n * @dev Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through\n * interacting with Pools using Internal Balance.\n *\n * Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH\n * address.\n */\n event InternalBalanceChanged(address indexed user, IERC20 indexed token, int256 delta);\n\n /**\n * @dev Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account.\n */\n event ExternalBalanceTransfer(IERC20 indexed token, address indexed sender, address recipient, uint256 amount);\n\n // Pools\n //\n // There are three specialization settings for Pools, which allow for cheaper swaps at the cost of reduced\n // functionality:\n //\n // - General: no specialization, suited for all Pools. IGeneralPool is used for swap request callbacks, passing the\n // balance of all tokens in the Pool. These Pools have the largest swap costs (because of the extra storage reads),\n // which increase with the number of registered tokens.\n //\n // - Minimal Swap Info: IMinimalSwapInfoPool is used instead of IGeneralPool, which saves gas by only passing the\n // balance of the two tokens involved in the swap. This is suitable for some pricing algorithms, like the weighted\n // constant product one popularized by Balancer V1. Swap costs are smaller compared to general Pools, and are\n // independent of the number of registered tokens.\n //\n // - Two Token: only allows two tokens to be registered. This achieves the lowest possible swap gas cost. Like\n // minimal swap info Pools, these are called via IMinimalSwapInfoPool.\n\n enum PoolSpecialization { GENERAL, MINIMAL_SWAP_INFO, TWO_TOKEN }\n\n /**\n * @dev Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which\n * is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be\n * changed.\n *\n * The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`,\n * depending on the chosen specialization setting. This contract is known as the Pool's contract.\n *\n * Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words,\n * multiple Pools may share the same contract.\n *\n * Emits a `PoolRegistered` event.\n */\n function registerPool(PoolSpecialization specialization) external returns (bytes32);\n\n /**\n * @dev Emitted when a Pool is registered by calling `registerPool`.\n */\n event PoolRegistered(bytes32 indexed poolId, address indexed poolAddress, PoolSpecialization specialization);\n\n /**\n * @dev Returns a Pool's contract address and specialization setting.\n */\n function getPool(bytes32 poolId) external view returns (address, PoolSpecialization);\n\n /**\n * @dev Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n *\n * Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens,\n * exit by receiving registered tokens, and can only swap registered tokens.\n *\n * Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length\n * of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in\n * ascending order.\n *\n * The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset\n * Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`,\n * depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore\n * expected to be highly secured smart contracts with sound design principles, and the decision to register an\n * Asset Manager should not be made lightly.\n *\n * Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset\n * Manager is set, it cannot be changed except by deregistering the associated token and registering again with a\n * different Asset Manager.\n *\n * Emits a `TokensRegistered` event.\n */\n function registerTokens(\n bytes32 poolId,\n IERC20[] memory tokens,\n address[] memory assetManagers\n ) external;\n\n /**\n * @dev Emitted when a Pool registers tokens by calling `registerTokens`.\n */\n event TokensRegistered(bytes32 indexed poolId, IERC20[] tokens, address[] assetManagers);\n\n /**\n * @dev Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n *\n * Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total\n * balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens\n * must be deregistered in the same `deregisterTokens` call.\n *\n * A deregistered token can be re-registered later on, possibly with a different Asset Manager.\n *\n * Emits a `TokensDeregistered` event.\n */\n function deregisterTokens(bytes32 poolId, IERC20[] memory tokens) external;\n\n /**\n * @dev Emitted when a Pool deregisters tokens by calling `deregisterTokens`.\n */\n event TokensDeregistered(bytes32 indexed poolId, IERC20[] tokens);\n\n /**\n * @dev Returns detailed information for a Pool's registered token.\n *\n * `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens\n * withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token`\n * equals the sum of `cash` and `managed`.\n *\n * Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`,\n * `managed` or `total` balance to be greater than 2^112 - 1.\n *\n * `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a\n * join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for\n * example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a\n * change for this purpose, and will update `lastChangeBlock`.\n *\n * `assetManager` is the Pool's token Asset Manager.\n */\n function getPoolTokenInfo(bytes32 poolId, IERC20 token)\n external\n view\n returns (\n uint256 cash,\n uint256 managed,\n uint256 lastChangeBlock,\n address assetManager\n );\n\n /**\n * @dev Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of\n * the tokens' `balances` changed.\n *\n * The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all\n * Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order.\n *\n * If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same\n * order as passed to `registerTokens`.\n *\n * Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are\n * the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo`\n * instead.\n */\n function getPoolTokens(bytes32 poolId)\n external\n view\n returns (\n IERC20[] memory tokens,\n uint256[] memory balances,\n uint256 lastChangeBlock\n );\n\n /**\n * @dev Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will\n * trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized\n * Pool shares.\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount\n * to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces\n * these maximums.\n *\n * If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable\n * this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the\n * WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent\n * back to the caller (not the sender, which is important for relayers).\n *\n * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n * interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be\n * sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final\n * `assets` array might not be sorted. Pools with no registered tokens cannot be joined.\n *\n * If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only\n * be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be\n * withdrawn from Internal Balance: attempting to do so will trigger a revert.\n *\n * This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement\n * their own custom logic. This typically requires additional information from the user (such as the expected number\n * of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed\n * directly to the Pool's contract, as is `recipient`.\n *\n * Emits a `PoolBalanceChanged` event.\n */\n function joinPool(\n bytes32 poolId,\n address sender,\n address recipient,\n JoinPoolRequest memory request\n ) external payable;\n\n struct JoinPoolRequest {\n IAsset[] assets;\n uint256[] maxAmountsIn;\n bytes userData;\n bool fromInternalBalance;\n }\n\n /**\n * @dev Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will\n * trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized\n * Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see\n * `getPoolTokenInfo`).\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum\n * token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault:\n * it just enforces these minimums.\n *\n * If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To\n * enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead\n * of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit.\n *\n * `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n * interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must\n * be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the\n * final `assets` array might not be sorted. Pools with no registered tokens cannot be exited.\n *\n * If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise,\n * an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to\n * do so will trigger a revert.\n *\n * `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the\n * `tokens` array. This array must match the Pool's registered tokens.\n *\n * This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement\n * their own custom logic. This typically requires additional information from the user (such as the expected number\n * of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and\n * passed directly to the Pool's contract.\n *\n * Emits a `PoolBalanceChanged` event.\n */\n function exitPool(\n bytes32 poolId,\n address sender,\n address payable recipient,\n ExitPoolRequest memory request\n ) external;\n\n struct ExitPoolRequest {\n IAsset[] assets;\n uint256[] minAmountsOut;\n bytes userData;\n bool toInternalBalance;\n }\n\n /**\n * @dev Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively.\n */\n event PoolBalanceChanged(\n bytes32 indexed poolId,\n address indexed liquidityProvider,\n IERC20[] tokens,\n int256[] deltas,\n uint256[] protocolFeeAmounts\n );\n\n enum PoolBalanceChangeKind { JOIN, EXIT }\n\n // Swaps\n //\n // Users can swap tokens with Pools by calling the `swap` and `batchSwap` functions. To do this,\n // they need not trust Pool contracts in any way: all security checks are made by the Vault. They must however be\n // aware of the Pools' pricing algorithms in order to estimate the prices Pools will quote.\n //\n // The `swap` function executes a single swap, while `batchSwap` can perform multiple swaps in sequence.\n // In each individual swap, tokens of one kind are sent from the sender to the Pool (this is the 'token in'),\n // and tokens of another kind are sent from the Pool to the recipient in exchange (this is the 'token out').\n // More complex swaps, such as one token in to multiple tokens out can be achieved by batching together\n // individual swaps.\n //\n // There are two swap kinds:\n // - 'given in' swaps, where the amount of tokens in (sent to the Pool) is known, and the Pool determines (via the\n // `onSwap` hook) the amount of tokens out (to send to the recipient).\n // - 'given out' swaps, where the amount of tokens out (received from the Pool) is known, and the Pool determines\n // (via the `onSwap` hook) the amount of tokens in (to receive from the sender).\n //\n // Additionally, it is possible to chain swaps using a placeholder input amount, which the Vault replaces with\n // the calculated output of the previous swap. If the previous swap was 'given in', this will be the calculated\n // tokenOut amount. If the previous swap was 'given out', it will use the calculated tokenIn amount. These extended\n // swaps are known as 'multihop' swaps, since they 'hop' through a number of intermediate tokens before arriving at\n // the final intended token.\n //\n // In all cases, tokens are only transferred in and out of the Vault (or withdrawn from and deposited into Internal\n // Balance) after all individual swaps have been completed, and the net token balance change computed. This makes\n // certain swap patterns, such as multihops, or swaps that interact with the same token pair in multiple Pools, cost\n // much less gas than they would otherwise.\n //\n // It also means that under certain conditions it is possible to perform arbitrage by swapping with multiple\n // Pools in a way that results in net token movement out of the Vault (profit), with no tokens being sent in (only\n // updating the Pool's internal accounting).\n //\n // To protect users from front-running or the market changing rapidly, they supply a list of 'limits' for each token\n // involved in the swap, where either the maximum number of tokens to send (by passing a positive value) or the\n // minimum amount of tokens to receive (by passing a negative value) is specified.\n //\n // Additionally, a 'deadline' timestamp can also be provided, forcing the swap to fail if it occurs after\n // this point in time (e.g. if the transaction failed to be included in a block promptly).\n //\n // If interacting with Pools that hold WETH, it is possible to both send and receive ETH directly: the Vault will do\n // the wrapping and unwrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be\n // passed in the `assets` array instead of the WETH address. Note that it is possible to combine ETH and WETH in the\n // same swap. Any excess ETH will be sent back to the caller (not the sender, which is relevant for relayers).\n //\n // Finally, Internal Balance can be used when either sending or receiving tokens.\n\n enum SwapKind { GIVEN_IN, GIVEN_OUT }\n\n /**\n * @dev Performs a swap with a single Pool.\n *\n * If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens\n * taken from the Pool, which must be greater than or equal to `limit`.\n *\n * If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens\n * sent to the Pool, which must be less than or equal to `limit`.\n *\n * Internal Balance usage and the recipient are determined by the `funds` struct.\n *\n * Emits a `Swap` event.\n */\n function swap(\n SingleSwap memory singleSwap,\n FundManagement memory funds,\n uint256 limit,\n uint256 deadline\n ) external payable returns (uint256);\n\n /**\n * @dev Data for a single swap executed by `swap`. `amount` is either `amountIn` or `amountOut` depending on\n * the `kind` value.\n *\n * `assetIn` and `assetOut` are either token addresses, or the IAsset sentinel value for ETH (the zero address).\n * Note that Pools never interact with ETH directly: it will be wrapped to or unwrapped from WETH by the Vault.\n *\n * The `userData` field is ignored by the Vault, but forwarded to the Pool in the `onSwap` hook, and may be\n * used to extend swap behavior.\n */\n struct SingleSwap {\n bytes32 poolId;\n SwapKind kind;\n IAsset assetIn;\n IAsset assetOut;\n uint256 amount;\n bytes userData;\n }\n\n /**\n * @dev Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either\n * the amount of tokens sent to or received from the Pool, depending on the `kind` value.\n *\n * Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n * Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n * the same index in the `assets` array.\n *\n * Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a\n * Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or\n * `amountOut` depending on the swap kind.\n *\n * Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out\n * of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal\n * the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`.\n *\n * The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses,\n * or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and\n * out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to\n * or unwrapped from WETH by the Vault.\n *\n * Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies\n * the minimum or maximum amount of each token the vault is allowed to transfer.\n *\n * `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the\n * equivalent `swap` call.\n *\n * Emits `Swap` events.\n */\n function batchSwap(\n SwapKind kind,\n BatchSwapStep[] memory swaps,\n IAsset[] memory assets,\n FundManagement memory funds,\n int256[] memory limits,\n uint256 deadline\n ) external payable returns (int256[] memory);\n\n /**\n * @dev Data for each individual swap executed by `batchSwap`. The asset in and out fields are indexes into the\n * `assets` array passed to that function, and ETH assets are converted to WETH.\n *\n * If `amount` is zero, the multihop mechanism is used to determine the actual amount based on the amount in/out\n * from the previous swap, depending on the swap kind.\n *\n * The `userData` field is ignored by the Vault, but forwarded to the Pool in the `onSwap` hook, and may be\n * used to extend swap behavior.\n */\n struct BatchSwapStep {\n bytes32 poolId;\n uint256 assetInIndex;\n uint256 assetOutIndex;\n uint256 amount;\n bytes userData;\n }\n\n /**\n * @dev Emitted for each individual swap performed by `swap` or `batchSwap`.\n */\n event Swap(\n bytes32 indexed poolId,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut\n );\n\n /**\n * @dev All tokens in a swap are either sent from the `sender` account to the Vault, or from the Vault to the\n * `recipient` account.\n *\n * If the caller is not `sender`, it must be an authorized relayer for them.\n *\n * If `fromInternalBalance` is true, the `sender`'s Internal Balance will be preferred, performing an ERC20\n * transfer for the difference between the requested amount and the User's Internal Balance (if any). The `sender`\n * must have allowed the Vault to use their tokens via `IERC20.approve()`. This matches the behavior of\n * `joinPool`.\n *\n * If `toInternalBalance` is true, tokens will be deposited to `recipient`'s internal balance instead of\n * transferred. This matches the behavior of `exitPool`.\n *\n * Note that ETH cannot be deposited to or withdrawn from Internal Balance: attempting to do so will trigger a\n * revert.\n */\n struct FundManagement {\n address sender;\n bool fromInternalBalance;\n address payable recipient;\n bool toInternalBalance;\n }\n\n /**\n * @dev Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n * simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n *\n * Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n * the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n * receives are the same that an equivalent `batchSwap` call would receive.\n *\n * Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct.\n * This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens,\n * approve them for the Vault, or even know a user's address.\n *\n * Note that this function is not 'view' (due to implementation details): the client code must explicitly execute\n * eth_call instead of eth_sendTransaction.\n */\n function queryBatchSwap(\n SwapKind kind,\n BatchSwapStep[] memory swaps,\n IAsset[] memory assets,\n FundManagement memory funds\n ) external returns (int256[] memory assetDeltas);\n\n // Flash Loans\n\n /**\n * @dev Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it,\n * and then reverting unless the tokens plus a proportional protocol fee have been returned.\n *\n * The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount\n * for each token contract. `tokens` must be sorted in ascending order.\n *\n * The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the\n * `receiveFlashLoan` call.\n *\n * Emits `FlashLoan` events.\n */\n function flashLoan(\n IFlashLoanRecipient recipient,\n IERC20[] memory tokens,\n uint256[] memory amounts,\n bytes memory userData\n ) external;\n\n /**\n * @dev Emitted for each individual flash loan performed by `flashLoan`.\n */\n event FlashLoan(IFlashLoanRecipient indexed recipient, IERC20 indexed token, uint256 amount, uint256 feeAmount);\n\n // Asset Management\n //\n // Each token registered for a Pool can be assigned an Asset Manager, which is able to freely withdraw the Pool's\n // tokens from the Vault, deposit them, or assign arbitrary values to its `managed` balance (see\n // `getPoolTokenInfo`). This makes them extremely powerful and dangerous. Even if an Asset Manager only directly\n // controls one of the tokens in a Pool, a malicious manager could set that token's balance to manipulate the\n // prices of the other tokens, and then drain the Pool with swaps. The risk of using Asset Managers is therefore\n // not constrained to the tokens they are managing, but extends to the entire Pool's holdings.\n //\n // However, a properly designed Asset Manager smart contract can be safely used for the Pool's benefit,\n // for example by lending unused tokens out for interest, or using them to participate in voting protocols.\n //\n // This concept is unrelated to the IAsset interface.\n\n /**\n * @dev Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates.\n *\n * Pool Balance management features batching, which means a single contract call can be used to perform multiple\n * operations of different kinds, with different Pools and tokens, at once.\n *\n * For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`.\n */\n function managePoolBalance(PoolBalanceOp[] memory ops) external;\n\n struct PoolBalanceOp {\n PoolBalanceOpKind kind;\n bytes32 poolId;\n IERC20 token;\n uint256 amount;\n }\n\n /**\n * Withdrawals decrease the Pool's cash, but increase its managed balance, leaving the total balance unchanged.\n *\n * Deposits increase the Pool's cash, but decrease its managed balance, leaving the total balance unchanged.\n *\n * Updates don't affect the Pool's cash balance, but because the managed balance changes, it does alter the total.\n * The external amount can be either increased or decreased by this call (i.e., reporting a gain or a loss).\n */\n enum PoolBalanceOpKind { WITHDRAW, DEPOSIT, UPDATE }\n\n /**\n * @dev Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`.\n */\n event PoolBalanceManaged(\n bytes32 indexed poolId,\n address indexed assetManager,\n IERC20 indexed token,\n int256 cashDelta,\n int256 managedDelta\n );\n\n // Protocol Fees\n //\n // Some operations cause the Vault to collect tokens in the form of protocol fees, which can then be withdrawn by\n // permissioned accounts.\n //\n // There are two kinds of protocol fees:\n //\n // - flash loan fees: charged on all flash loans, as a percentage of the amounts lent.\n //\n // - swap fees: a percentage of the fees charged by Pools when performing swaps. For a number of reasons, including\n // swap gas costs and interface simplicity, protocol swap fees are not charged on each individual swap. Rather,\n // Pools are expected to keep track of how much they have charged in swap fees, and pay any outstanding debts to the\n // Vault when they are joined or exited. This prevents users from joining a Pool with unpaid debt, as well as\n // exiting a Pool in debt without first paying their share.\n\n /**\n * @dev Returns the current protocol fee module.\n */\n function getProtocolFeesCollector() external view returns (IProtocolFeesCollector);\n\n /**\n * @dev Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an\n * error in some part of the system.\n *\n * The Vault can only be paused during an initial time period, after which pausing is forever disabled.\n *\n * While the contract is paused, the following features are disabled:\n * - depositing and transferring internal balance\n * - transferring external balance (using the Vault's allowance)\n * - swaps\n * - joining Pools\n * - Asset Manager interactions\n *\n * Internal Balance can still be withdrawn, and Pools exited.\n */\n function setPaused(bool paused) external;\n\n /**\n * @dev Returns the Vault's WETH instance.\n */\n function WETH() external view returns (IWETH);\n // solhint-disable-previous-line func-name-mixedcase\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./IVault.sol\";\n\ninterface IPoolSwapStructs {\n // This is not really an interface - it just defines common structs used by other interfaces: IGeneralPool and\n // IMinimalSwapInfoPool.\n //\n // This data structure represents a request for a token swap, where `kind` indicates the swap type ('given in' or\n // 'given out') which indicates whether or not the amount sent by the pool is known.\n //\n // The pool receives `tokenIn` and sends `tokenOut`. `amount` is the number of `tokenIn` tokens the pool will take\n // in, or the number of `tokenOut` tokens the Pool will send out, depending on the given swap `kind`.\n //\n // All other fields are not strictly necessary for most swaps, but are provided to support advanced scenarios in\n // some Pools.\n //\n // `poolId` is the ID of the Pool involved in the swap - this is useful for Pool contracts that implement more than\n // one Pool.\n //\n // The meaning of `lastChangeBlock` depends on the Pool specialization:\n // - Two Token or Minimal Swap Info: the last block in which either `tokenIn` or `tokenOut` changed its total\n // balance.\n // - General: the last block in which *any* of the Pool's registered tokens changed its total balance.\n //\n // `from` is the origin address for the funds the Pool receives, and `to` is the destination address\n // where the Pool sends the outgoing tokens.\n //\n // `userData` is extra data provided by the caller - typically a signature from a trusted party.\n struct SwapRequest {\n IVault.SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amount;\n // Misc data\n bytes32 poolId;\n uint256 lastChangeBlock;\n address from;\n address to;\n bytes userData;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface IAuthentication {\n /**\n * @dev Returns the action identifier associated with the external function described by `selector`.\n */\n function getActionId(bytes4 selector) external view returns (bytes32);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface for the SignatureValidator helper, used to support meta-transactions.\n */\ninterface ISignaturesValidator {\n /**\n * @dev Returns the EIP712 domain separator.\n */\n function getDomainSeparator() external view returns (bytes32);\n\n /**\n * @dev Returns the next nonce used by an address to sign messages.\n */\n function getNextNonce(address user) external view returns (uint256);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface for the TemporarilyPausable helper.\n */\ninterface ITemporarilyPausable {\n /**\n * @dev Emitted every time the pause state changes by `_setPaused`.\n */\n event PausedStateChanged(bool paused);\n\n /**\n * @dev Returns the current paused state.\n */\n function getPausedState()\n external\n view\n returns (\n bool paused,\n uint256 pauseWindowEndTime,\n uint256 bufferPeriodEndTime\n );\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../openzeppelin/IERC20.sol\";\n\n/**\n * @dev Interface for WETH9.\n * See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol\n */\ninterface IWETH is IERC20 {\n function deposit() external payable;\n\n function withdraw(uint256 amount) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\ninterface IAuthorizer {\n /**\n * @dev Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n */\n function canPerform(\n bytes32 actionId,\n address account,\n address where\n ) external view returns (bool);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n// Inspired by Aave Protocol's IFlashLoanReceiver.\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\ninterface IFlashLoanRecipient {\n /**\n * @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient.\n *\n * At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this\n * call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the\n * Vault, or else the entire flash loan will revert.\n *\n * `userData` is the same value passed in the `IVault.flashLoan` call.\n */\n function receiveFlashLoan(\n IERC20[] memory tokens,\n uint256[] memory amounts,\n uint256[] memory feeAmounts,\n bytes memory userData\n ) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./IVault.sol\";\nimport \"./IAuthorizer.sol\";\n\ninterface IProtocolFeesCollector {\n event SwapFeePercentageChanged(uint256 newSwapFeePercentage);\n event FlashLoanFeePercentageChanged(uint256 newFlashLoanFeePercentage);\n\n function withdrawCollectedFees(\n IERC20[] calldata tokens,\n uint256[] calldata amounts,\n address recipient\n ) external;\n\n function setSwapFeePercentage(uint256 newSwapFeePercentage) external;\n\n function setFlashLoanFeePercentage(uint256 newFlashLoanFeePercentage) external;\n\n function getSwapFeePercentage() external view returns (uint256);\n\n function getFlashLoanFeePercentage() external view returns (uint256);\n\n function getCollectedFeeAmounts(IERC20[] memory tokens) external view returns (uint256[] memory feeAmounts);\n\n function getAuthorizer() external view returns (IAuthorizer);\n\n function vault() external view returns (IVault);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\ninterface IAssetManager {\n /**\n * @notice Emitted when asset manager is rebalanced\n */\n event Rebalance(bytes32 poolId);\n\n /**\n * @notice Sets the config\n */\n function setConfig(bytes32 poolId, bytes calldata config) external;\n\n /**\n * Note: No function to read the asset manager config is included in IAssetManager\n * as the signature is expected to vary between asset manager implementations\n */\n\n /**\n * @notice Returns the asset manager's token\n */\n function getToken() external view returns (IERC20);\n\n /**\n * @return the current assets under management of this asset manager\n */\n function getAUM(bytes32 poolId) external view returns (uint256);\n\n /**\n * @return poolCash - The up-to-date cash balance of the pool\n * @return poolManaged - The up-to-date managed balance of the pool\n */\n function getPoolBalances(bytes32 poolId) external view returns (uint256 poolCash, uint256 poolManaged);\n\n /**\n * @return The difference in tokens between the target investment\n * and the currently invested amount (i.e. the amount that can be invested)\n */\n function maxInvestableBalance(bytes32 poolId) external view returns (int256);\n\n /**\n * @notice Updates the Vault on the value of the pool's investment returns\n */\n function updateBalanceOfPool(bytes32 poolId) external;\n\n /**\n * @notice Determines whether the pool should rebalance given the provided balances\n */\n function shouldRebalance(uint256 cash, uint256 managed) external view returns (bool);\n\n /**\n * @notice Rebalances funds between the pool and the asset manager to maintain target investment percentage.\n * @param poolId - the poolId of the pool to be rebalanced\n * @param force - a boolean representing whether a rebalance should be forced even when the pool is near balance\n */\n function rebalance(bytes32 poolId, bool force) external;\n\n /**\n * @notice allows an authorized rebalancer to remove capital to facilitate large withdrawals\n * @param poolId - the poolId of the pool to withdraw funds back to\n * @param amount - the amount of tokens to withdraw back to the pool\n */\n function capitalOut(bytes32 poolId, uint256 amount) external;\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/openzeppelin/IERC20.sol\";\n\ninterface IControlledPool {\n function setSwapFeePercentage(uint256 swapFeePercentage) external;\n\n function setAssetManagerPoolConfig(IERC20 token, bytes memory poolConfig) external;\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\nimport \"../math/Math.sol\";\n\n/**\n * @dev Library for encoding and decoding values stored inside a 256 bit word. Typically used to pack multiple values in\n * a single storage slot, saving gas by performing less storage accesses.\n *\n * Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two\n * 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128.\n *\n * We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and\n * error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or\n * memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location),\n * using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even\n * prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-intensive,\n * and the cost of accesing memory increases quadratically with the number of allocated words. Manual packing and\n * unpacking is therefore the preferred approach.\n */\nlibrary WordCodec {\n // Masks are values with the least significant N bits set. They can be used to extract an encoded value from a word,\n // or to insert a new one replacing the old.\n uint256 private constant _MASK_1 = 2**(1) - 1;\n uint256 private constant _MASK_192 = 2**(192) - 1;\n\n // In-place insertion\n\n /**\n * @dev Inserts an unsigned integer of bitLength, shifted by an offset, into a 256 bit word,\n * replacing the old value. Returns the new word.\n */\n function insertUint(\n bytes32 word,\n uint256 value,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n return clearedWord | bytes32(value << offset);\n }\n\n /**\n * @dev Inserts a signed integer shifted by an offset into a 256 bit word, replacing the old value. Returns\n * the new word.\n *\n * Assumes `value` can be represented using `bitLength` bits.\n */\n function insertInt(\n bytes32 word,\n int256 value,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // Integer values need masking to remove the upper bits of negative values.\n return clearedWord | bytes32((uint256(value) & mask) << offset);\n }\n\n // Encoding\n\n /**\n * @dev Encodes an unsigned integer shifted by an offset. Ensures value fits within\n * `bitLength` bits.\n *\n * The return value can be ORed bitwise with other encoded values to form a 256 bit word.\n */\n function encodeUint(\n uint256 value,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n return bytes32(value << offset);\n }\n\n /**\n * @dev Encodes a signed integer shifted by an offset.\n *\n * The return value can be ORed bitwise with other encoded values to form a 256 bit word.\n */\n function encodeInt(\n int256 value,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n // Integer values need masking to remove the upper bits of negative values.\n return bytes32((uint256(value) & mask) << offset);\n }\n\n // Decoding\n\n /**\n * @dev Decodes and returns an unsigned integer with `bitLength` bits, shifted by an offset, from a 256 bit word.\n */\n function decodeUint(\n bytes32 word,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (uint256) {\n return uint256(word >> offset) & ((1 << bitLength) - 1);\n }\n\n /**\n * @dev Decodes and returns a signed integer with `bitLength` bits, shifted by an offset, from a 256 bit word.\n */\n function decodeInt(\n bytes32 word,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (int256) {\n int256 maxInt = int256((1 << (bitLength - 1)) - 1);\n uint256 mask = (1 << bitLength) - 1;\n\n int256 value = int256(uint256(word >> offset) & mask);\n // In case the decoded value is greater than the max positive integer that can be represented with bitLength\n // bits, we know it was originally a negative integer. Therefore, we mask it to restore the sign in the 256 bit\n // representation.\n return value > maxInt ? (value | int256(~mask)) : value;\n }\n\n // Special cases\n\n /**\n * @dev Decodes and returns a boolean shifted by an offset from a 256 bit word.\n */\n function decodeBool(bytes32 word, uint256 offset) internal pure returns (bool) {\n return (uint256(word >> offset) & _MASK_1) == 1;\n }\n\n /**\n * @dev Inserts a 192 bit value shifted by an offset into a 256 bit word, replacing the old value.\n * Returns the new word.\n *\n * Assumes `value` can be represented using 192 bits.\n */\n function insertBits192(\n bytes32 word,\n bytes32 value,\n uint256 offset\n ) internal pure returns (bytes32) {\n bytes32 clearedWord = bytes32(uint256(word) & ~(_MASK_192 << offset));\n return clearedWord | bytes32((uint256(value) & _MASK_192) << offset);\n }\n\n /**\n * @dev Inserts a boolean value shifted by an offset into a 256 bit word, replacing the old value. Returns the new\n * word.\n */\n function insertBool(\n bytes32 word,\n bool value,\n uint256 offset\n ) internal pure returns (bytes32) {\n bytes32 clearedWord = bytes32(uint256(word) & ~(_MASK_1 << offset));\n return clearedWord | bytes32(uint256(value ? 1 : 0) << offset);\n }\n\n // Helpers\n\n function _validateEncodingParams(\n uint256 value,\n uint256 offset,\n uint256 bitLength\n ) private pure {\n _require(offset < 256, Errors.OUT_OF_BOUNDS);\n // We never accept 256 bit values (which would make the codec pointless), and the larger the offset the smaller\n // the maximum bit length.\n _require(bitLength >= 1 && bitLength <= Math.min(255, 256 - offset), Errors.OUT_OF_BOUNDS);\n\n // Testing unsigned values for size is straightforward: their upper bits must be cleared.\n _require(value >> bitLength == 0, Errors.CODEC_OVERFLOW);\n }\n\n function _validateEncodingParams(\n int256 value,\n uint256 offset,\n uint256 bitLength\n ) private pure {\n _require(offset < 256, Errors.OUT_OF_BOUNDS);\n // We never accept 256 bit values (which would make the codec pointless), and the larger the offset the smaller\n // the maximum bit length.\n _require(bitLength >= 1 && bitLength <= Math.min(255, 256 - offset), Errors.OUT_OF_BOUNDS);\n\n // Testing signed values for size is a bit more involved.\n if (value >= 0) {\n // For positive values, we can simply check that the upper bits are clear. Notice we remove one bit from the\n // length for the sign bit.\n _require(value >> (bitLength - 1) == 0, Errors.CODEC_OVERFLOW);\n } else {\n // Negative values can receive the same treatment by making them positive, with the caveat that the range\n // for negative values in two's complement supports one more value than for the positive case.\n _require(Math.abs(value + 1) >> (bitLength - 1) == 0, Errors.CODEC_OVERFLOW);\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\";\n\n/**\n * @dev Allows for a contract to be paused during an initial period after deployment, disabling functionality. Can be\n * used as an emergency switch in case a security vulnerability or threat is identified.\n *\n * The contract can only be paused during the Pause Window, a period that starts at deployment. It can also be\n * unpaused and repaused any number of times during this period. This is intended to serve as a safety measure: it lets\n * system managers react quickly to potentially dangerous situations, knowing that this action is reversible if careful\n * analysis later determines there was a false alarm.\n *\n * If the contract is paused when the Pause Window finishes, it will remain in the paused state through an additional\n * Buffer Period, after which it will be automatically unpaused forever. This is to ensure there is always enough time\n * to react to an emergency, even if the threat is discovered shortly before the Pause Window expires.\n *\n * Note that since the contract can only be paused within the Pause Window, unpausing during the Buffer Period is\n * irreversible.\n */\nabstract contract TemporarilyPausable is ITemporarilyPausable {\n // The Pause Window and Buffer Period are timestamp-based: they should not be relied upon for sub-minute accuracy.\n // solhint-disable not-rely-on-time\n\n uint256 private constant _MAX_PAUSE_WINDOW_DURATION = 90 days;\n uint256 private constant _MAX_BUFFER_PERIOD_DURATION = 30 days;\n\n uint256 private immutable _pauseWindowEndTime;\n uint256 private immutable _bufferPeriodEndTime;\n\n bool private _paused;\n\n constructor(uint256 pauseWindowDuration, uint256 bufferPeriodDuration) {\n _require(pauseWindowDuration <= _MAX_PAUSE_WINDOW_DURATION, Errors.MAX_PAUSE_WINDOW_DURATION);\n _require(bufferPeriodDuration <= _MAX_BUFFER_PERIOD_DURATION, Errors.MAX_BUFFER_PERIOD_DURATION);\n\n uint256 pauseWindowEndTime = block.timestamp + pauseWindowDuration;\n\n _pauseWindowEndTime = pauseWindowEndTime;\n _bufferPeriodEndTime = pauseWindowEndTime + bufferPeriodDuration;\n }\n\n /**\n * @dev Reverts if the contract is paused.\n */\n modifier whenNotPaused() {\n _ensureNotPaused();\n _;\n }\n\n /**\n * @dev Returns the current contract pause status, as well as the end times of the Pause Window and Buffer\n * Period.\n */\n function getPausedState()\n external\n view\n override\n returns (\n bool paused,\n uint256 pauseWindowEndTime,\n uint256 bufferPeriodEndTime\n )\n {\n paused = !_isNotPaused();\n pauseWindowEndTime = _getPauseWindowEndTime();\n bufferPeriodEndTime = _getBufferPeriodEndTime();\n }\n\n /**\n * @dev Sets the pause state to `paused`. The contract can only be paused until the end of the Pause Window, and\n * unpaused until the end of the Buffer Period.\n *\n * Once the Buffer Period expires, this function reverts unconditionally.\n */\n function _setPaused(bool paused) internal {\n if (paused) {\n _require(block.timestamp < _getPauseWindowEndTime(), Errors.PAUSE_WINDOW_EXPIRED);\n } else {\n _require(block.timestamp < _getBufferPeriodEndTime(), Errors.BUFFER_PERIOD_EXPIRED);\n }\n\n _paused = paused;\n emit PausedStateChanged(paused);\n }\n\n /**\n * @dev Reverts if the contract is paused.\n */\n function _ensureNotPaused() internal view {\n _require(_isNotPaused(), Errors.PAUSED);\n }\n\n /**\n * @dev Reverts if the contract is not paused.\n */\n function _ensurePaused() internal view {\n _require(!_isNotPaused(), Errors.NOT_PAUSED);\n }\n\n /**\n * @dev Returns true if the contract is unpaused.\n *\n * Once the Buffer Period expires, the gas cost of calling this function is reduced dramatically, as storage is no\n * longer accessed.\n */\n function _isNotPaused() internal view returns (bool) {\n // After the Buffer Period, the (inexpensive) timestamp check short-circuits the storage access.\n return block.timestamp > _getBufferPeriodEndTime() || !_paused;\n }\n\n // These getters lead to reduced bytecode size by inlining the immutable variables in a single place.\n\n function _getPauseWindowEndTime() private view returns (uint256) {\n return _pauseWindowEndTime;\n }\n\n function _getBufferPeriodEndTime() private view returns (uint256) {\n return _bufferPeriodEndTime;\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\";\n\nimport \"./SafeMath.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is IERC20 {\n using SafeMath for uint256;\n\n mapping(address => uint256) private _balances;\n\n mapping(address => mapping(address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}. The total supply should only be read using this function\n *\n * Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other\n * storage values).\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev Sets a new value for the total supply. It should only be set using this function.\n *\n * * Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other\n * storage values).\n */\n function _setTotalSupply(uint256 value) internal virtual {\n _totalSupply = value;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(msg.sender, recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(msg.sender, spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(\n sender,\n msg.sender,\n _allowances[sender][msg.sender].sub(amount, Errors.ERC20_TRANSFER_EXCEEDS_ALLOWANCE)\n );\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(\n msg.sender,\n spender,\n _allowances[msg.sender][spender].sub(subtractedValue, Errors.ERC20_DECREASED_ALLOWANCE_BELOW_ZERO)\n );\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(\n address sender,\n address recipient,\n uint256 amount\n ) internal virtual {\n _require(sender != address(0), Errors.ERC20_TRANSFER_FROM_ZERO_ADDRESS);\n _require(recipient != address(0), Errors.ERC20_TRANSFER_TO_ZERO_ADDRESS);\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, Errors.ERC20_TRANSFER_EXCEEDS_BALANCE);\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n _beforeTokenTransfer(address(0), account, amount);\n\n _setTotalSupply(totalSupply().add(amount));\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n _require(account != address(0), Errors.ERC20_BURN_FROM_ZERO_ADDRESS);\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, Errors.ERC20_BURN_EXCEEDS_BALANCE);\n _setTotalSupply(totalSupply().sub(amount));\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(\n address owner,\n address spender,\n uint256 amount\n ) internal virtual {\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 amount\n ) internal virtual {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\";\n\n/**\n * @title Highly opinionated token implementation\n * @author Balancer Labs\n * @dev\n * - Includes functions to increase and decrease allowance as a workaround\n * for the well-known issue with `approve`:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n * - Allows for 'infinite allowance', where an allowance of 0xff..ff is not\n * decreased by calls to transferFrom\n * - Lets a token holder use `transferFrom` to send their own tokens,\n * without first setting allowance\n * - Emits 'Approval' events whenever allowance is changed by `transferFrom`\n * - Assigns infinite allowance for all token holders to the Vault\n */\ncontract BalancerPoolToken is ERC20Permit {\n IVault private immutable _vault;\n\n constructor(\n string memory tokenName,\n string memory tokenSymbol,\n IVault vault\n ) ERC20(tokenName, tokenSymbol) ERC20Permit(tokenName) {\n _vault = vault;\n }\n\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n // Overrides\n\n /**\n * @dev Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval.\n *\n * This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this\n * contract inherits.\n */\n function allowance(address owner, address spender) public view override returns (uint256) {\n if (spender == address(getVault())) {\n return uint256(-1);\n } else {\n return super.allowance(owner, spender);\n }\n }\n\n /**\n * @dev Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) public override returns (bool) {\n uint256 currentAllowance = allowance(sender, msg.sender);\n _require(msg.sender == sender || currentAllowance >= amount, Errors.ERC20_TRANSFER_EXCEEDS_ALLOWANCE);\n\n _transfer(sender, recipient, amount);\n\n if (msg.sender != sender && currentAllowance != uint256(-1)) {\n // Because of the previous require, we know that if msg.sender != sender then currentAllowance >= amount\n _approve(sender, msg.sender, currentAllowance - amount);\n }\n\n return true;\n }\n\n /**\n * @dev Override to allow decreasing allowance by more than the current amount (setting it to zero)\n */\n function decreaseAllowance(address spender, uint256 amount) public override returns (bool) {\n uint256 currentAllowance = allowance(msg.sender, spender);\n\n if (amount >= currentAllowance) {\n _approve(msg.sender, spender, 0);\n } else {\n // No risk of underflow due to if condition\n _approve(msg.sender, spender, currentAllowance - amount);\n }\n\n return true;\n }\n\n // Internal functions\n\n function _mintPoolTokens(address recipient, uint256 amount) internal {\n _mint(recipient, amount);\n }\n\n function _burnPoolTokens(address sender, uint256 amount) internal {\n _burn(sender, amount);\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @dev Base authorization layer implementation for Pools.\n *\n * The owner account can call some of the permissioned functions - access control of the rest is delegated to the\n * Authorizer. Note that this owner is immutable: more sophisticated permission schemes, such as multiple ownership,\n * granular roles, etc., could be built on top of this by making the owner a smart contract.\n *\n * Access control of all other permissioned functions is delegated to an Authorizer. It is also possible to delegate\n * control of *all* permissioned functions to the Authorizer by setting the owner address to `_DELEGATE_OWNER`.\n */\nabstract contract BasePoolAuthorization is Authentication {\n address private immutable _owner;\n\n address private constant _DELEGATE_OWNER = 0xBA1BA1ba1BA1bA1bA1Ba1BA1ba1BA1bA1ba1ba1B;\n\n constructor(address owner) {\n _owner = owner;\n }\n\n function getOwner() public view returns (address) {\n return _owner;\n }\n\n function getAuthorizer() external view returns (IAuthorizer) {\n return _getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n if ((getOwner() != _DELEGATE_OWNER) && _isOwnerOnlyAction(actionId)) {\n // Only the owner can perform \"owner only\" actions, unless the owner is delegated.\n return msg.sender == getOwner();\n } else {\n // Non-owner actions are always processed via the Authorizer, as \"owner only\" ones are when delegated.\n return _getAuthorizer().canPerform(actionId, account, address(this));\n }\n }\n\n function _isOwnerOnlyAction(bytes32) internal view virtual returns (bool) {\n return false;\n }\n\n function _getAuthorizer() internal view virtual returns (IAuthorizer);\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport \"./BasePoolAuthorization.sol\";\n\n/**\n * @notice Handle storage and state changes for pools that support \"Recovery Mode\".\n *\n * @dev This is intended to provide a safe way to exit any pool during some kind of emergency, to avoid locking funds\n * in the event the pool enters a non-functional state (i.e., some code that normally runs during exits is causing\n * them to revert).\n *\n * Recovery Mode is *not* the same as pausing the pool. The pause function is only available during a short window\n * after factory deployment. Pausing can only be intentionally reversed during a buffer period, and the contract\n * will permanently unpause itself thereafter. Paused pools are completely disabled, in a kind of suspended animation,\n * until they are voluntarily or involuntarily unpaused.\n *\n * By contrast, a privileged account - typically a governance multisig - can place a pool in Recovery Mode at any\n * time, and it is always reversible. The pool is *not* disabled while in this mode: though of course whatever\n * condition prompted the transition to Recovery Mode has likely effectively disabled some functions. Rather,\n * a special \"clean\" exit is enabled, which runs the absolute minimum code necessary to exit proportionally.\n * In particular, stable pools do not attempt to compute the invariant (which is a complex, iterative calculation\n * that can fail in extreme circumstances), and no protocol fees are collected.\n *\n * It is critical to ensure that turning on Recovery Mode would do no harm, if activated maliciously or in error.\n */\nabstract contract RecoveryMode is IRecoveryMode, BasePoolAuthorization {\n using FixedPoint for uint256;\n using BasePoolUserData for bytes;\n\n /**\n * @dev Reverts if the contract is in Recovery Mode.\n */\n modifier whenNotInRecoveryMode() {\n _ensureNotInRecoveryMode();\n _;\n }\n\n /**\n * @notice Enable recovery mode, which enables a special safe exit path for LPs.\n * @dev Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may\n * perform certain operations in a \"safer\" manner that is less likely to fail, in an attempt to keep the pool\n * running, even in a pathological state. Unlike the Pause operation, which is only available during a short window\n * after factory deployment, Recovery Mode can always be enabled.\n */\n function enableRecoveryMode() external override authenticate {\n _setRecoveryMode(true);\n }\n\n /**\n * @notice Disable recovery mode, which disables the special safe exit path for LPs.\n * @dev Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly\n * necessary.\n */\n function disableRecoveryMode() external override authenticate {\n _setRecoveryMode(false);\n }\n\n // Defer implementation for functions that require storage\n\n /**\n * @notice Override to check storage and return whether the pool is in Recovery Mode\n */\n function inRecoveryMode() public view virtual override returns (bool);\n\n /**\n * @dev Override to update storage and emit the event\n *\n * No complex code or external calls that could fail should be placed in the implementations,\n * which could jeopardize the ability to enable and disable Recovery Mode.\n */\n function _setRecoveryMode(bool enabled) internal virtual;\n\n /**\n * @dev Reverts if the contract is not in Recovery Mode.\n */\n function _ensureInRecoveryMode() internal view {\n _require(inRecoveryMode(), Errors.NOT_IN_RECOVERY_MODE);\n }\n\n /**\n * @dev Reverts if the contract is in Recovery Mode.\n */\n function _ensureNotInRecoveryMode() internal view {\n _require(!inRecoveryMode(), Errors.IN_RECOVERY_MODE);\n }\n\n /**\n * @dev A minimal proportional exit, suitable as is for most pools: though not for pools with preminted BPT\n * or other special considerations. Designed to be overridden if a pool needs to do extra processing,\n * such as scaling a stored invariant, or caching the new total supply.\n *\n * No complex code or external calls should be made in derived contracts that override this!\n */\n function _doRecoveryModeExit(\n uint256[] memory balances,\n uint256 totalSupply,\n bytes memory userData\n ) internal virtual returns (uint256, uint256[] memory) {\n uint256 bptAmountIn = userData.recoveryModeExit();\n\n uint256[] memory amountsOut = _computeProportionalAmountsOut(balances, totalSupply, bptAmountIn);\n\n return (bptAmountIn, amountsOut);\n }\n\n function _computeProportionalAmountsOut(\n uint256[] memory balances,\n uint256 totalSupply,\n uint256 bptAmountIn\n ) internal pure returns (uint256[] memory amountsOut) {\n /**********************************************************************************************\n // exactBPTInForTokensOut //\n // (per token) //\n // aO = tokenAmountOut / bptIn \\ //\n // b = tokenBalance a0 = b * | --------------------- | //\n // bptIn = bptAmountIn \\ bptTotalSupply / //\n // bpt = bptTotalSupply //\n **********************************************************************************************/\n\n // Since we're computing an amount out, we round down overall. This means rounding down on both the\n // multiplication and division.\n\n uint256 bptRatio = bptAmountIn.divDown(totalSupply);\n\n amountsOut = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; i++) {\n amountsOut[i] = balances[i].mulDown(bptRatio);\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n _require(c >= a, Errors.ADD_OVERFLOW);\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return sub(a, b, Errors.SUB_OVERFLOW);\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n uint256 errorCode\n ) internal pure returns (uint256) {\n _require(b <= a, errorCode);\n uint256 c = a - b;\n\n return c;\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\";\n\nimport \"./ERC20.sol\";\nimport \"../helpers/EOASignaturesValidator.sol\";\n\n/**\n * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * _Available since v3.4._\n */\nabstract contract ERC20Permit is ERC20, IERC20Permit, EOASignaturesValidator {\n // solhint-disable-next-line var-name-mixedcase\n bytes32 private constant _PERMIT_TYPEHASH = keccak256(\n \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"\n );\n\n /**\n * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n *\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\n */\n constructor(string memory name) EIP712(name, \"1\") {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @dev See {IERC20Permit-permit}.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual override {\n bytes32 structHash = keccak256(\n abi.encode(_PERMIT_TYPEHASH, owner, spender, value, getNextNonce(owner), deadline)\n );\n\n _ensureValidSignature(owner, structHash, _toArraySignature(v, r, s), deadline, Errors.INVALID_SIGNATURE);\n\n _approve(owner, spender, value);\n }\n\n /**\n * @dev See {IERC20Permit-nonces}.\n */\n function nonces(address owner) public view override returns (uint256) {\n return getNextNonce(owner);\n }\n\n /**\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\n return getDomainSeparator();\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,\n * given `owner`'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\";\n\nimport \"../openzeppelin/EIP712.sol\";\n\n/**\n * @dev Utility for signing Solidity function calls.\n */\nabstract contract EOASignaturesValidator is ISignaturesValidator, EIP712 {\n // Replay attack prevention for each account.\n mapping(address => uint256) internal _nextNonce;\n\n function getDomainSeparator() public view override returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n function getNextNonce(address account) public view override returns (uint256) {\n return _nextNonce[account];\n }\n\n function _ensureValidSignature(\n address account,\n bytes32 structHash,\n bytes memory signature,\n uint256 errorCode\n ) internal {\n return _ensureValidSignature(account, structHash, signature, type(uint256).max, errorCode);\n }\n\n function _ensureValidSignature(\n address account,\n bytes32 structHash,\n bytes memory signature,\n uint256 deadline,\n uint256 errorCode\n ) internal {\n bytes32 digest = _hashTypedDataV4(structHash);\n _require(_isValidSignature(account, digest, signature), errorCode);\n\n // We could check for the deadline before validating the signature, but this leads to saner error processing (as\n // we only care about expired deadlines if the signature is correct) and only affects the gas cost of the revert\n // scenario, which will only occur infrequently, if ever.\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n _require(deadline >= block.timestamp, Errors.EXPIRED_SIGNATURE);\n\n // We only advance the nonce after validating the signature. This is irrelevant for this module, but it can be\n // important in derived contracts that override _isValidSignature (e.g. SignaturesValidator), as we want for\n // the observable state to still have the current nonce as the next valid one.\n _nextNonce[account] += 1;\n }\n\n function _isValidSignature(\n address account,\n bytes32 digest,\n bytes memory signature\n ) internal view virtual returns (bool) {\n _require(signature.length == 65, Errors.MALFORMED_SIGNATURE);\n\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the r, s and v signature parameters, and the only way to get them is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n address recoveredAddress = ecrecover(digest, v, r, s);\n\n // ecrecover returns the zero address on recover failure, so we need to handle that explicitly.\n return (recoveredAddress != address(0) && recoveredAddress == account);\n }\n\n function _toArraySignature(\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (bytes memory) {\n bytes memory signature = new bytes(65);\n // solhint-disable-next-line no-inline-assembly\n assembly {\n mstore(add(signature, 32), r)\n mstore(add(signature, 64), s)\n mstore8(add(signature, 96), v)\n }\n\n return signature;\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712 {\n /* solhint-disable var-name-mixedcase */\n bytes32 private immutable _HASHED_NAME;\n bytes32 private immutable _HASHED_VERSION;\n bytes32 private immutable _TYPE_HASH;\n\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n _HASHED_NAME = keccak256(bytes(name));\n _HASHED_VERSION = keccak256(bytes(version));\n _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view virtual returns (bytes32) {\n return keccak256(abi.encode(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION, _getChainId(), address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n // Silence state mutability warning without generating bytecode.\n // See https://github.com/ethereum/solidity/issues/10090#issuecomment-741789128 and\n // https://github.com/ethereum/solidity/issues/2691\n this;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @dev Building block for performing access control on external functions.\n *\n * This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied\n * to external functions to only make them callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /**\n * @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n */\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /**\n * @dev Reverts unless the caller is allowed to call the entry point function.\n */\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n _require(_canPerform(actionId, msg.sender), Errors.SENDER_NOT_ALLOWED);\n }\n\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nlibrary BasePoolUserData {\n // Special ExitKind for all pools, used in Recovery Mode. Use the max 8-bit value to prevent conflicts\n // with future additions to the ExitKind enums (or any front-end code that maps to existing values)\n uint8 public constant RECOVERY_MODE_EXIT_KIND = 255;\n\n // Return true if this is the special exit kind.\n function isRecoveryModeExitKind(bytes memory self) internal pure returns (bool) {\n // Check for the \"no data\" case, or abi.decode would revert\n return self.length > 0 && abi.decode(self, (uint8)) == RECOVERY_MODE_EXIT_KIND;\n }\n\n // Parse the bptAmountIn out of the userData\n function recoveryModeExit(bytes memory self) internal pure returns (uint256 bptAmountIn) {\n (, bptAmountIn) = abi.decode(self, (uint8, uint256));\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\n/**\n * @dev Interface for the RecoveryMode module.\n */\ninterface IRecoveryMode {\n /**\n * @dev Emitted when the Recovery Mode status changes.\n */\n event RecoveryModeStateChanged(bool enabled);\n\n /**\n * @notice Enables Recovery Mode in the Pool, disabling protocol fee collection and allowing for safe proportional\n * exits with low computational complexity and no dependencies.\n */\n function enableRecoveryMode() external;\n\n /**\n * @notice Disables Recovery Mode in the Pool, restoring protocol fee collection and disallowing proportional exits.\n */\n function disableRecoveryMode() external;\n\n /**\n * @notice Returns true if the Pool is in Recovery Mode.\n */\n function inRecoveryMode() external view returns (bool);\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\";\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\";\n\nimport \"../RecoveryMode.sol\";\n\n/**\n * @dev The Vault does not provide the protocol swap fee percentage in swap hooks (as swaps don't typically need this\n * value), so for swaps that need this value, we would have to to fetch it ourselves from the\n * ProtocolFeePercentagesProvider. Additionally, other protocol fee types (such as Yield or AUM) can only be obtained\n * by making said call.\n *\n * However, these values change so rarely that it doesn't make sense to perform the required calls to get the current\n * values in every single user interaction. Instead, we keep a local copy that can be permissionlessly updated by anyone\n * with the real value. We also pack these values together, performing a single storage read to get them all.\n *\n * When initialized with a special sentinel value, the swap fee is delegated, meaning the mutable protocol swap fee\n * cache is set to the current value stored in the ProtocolFeePercentagesProvider, and can be updated by anyone with a\n * call to `updateProtocolFeePercentageCache`. Any other value means the protocol swap fee is fixed, so it is instead\n * stored in the immutable `_fixedProtocolSwapFeePercentage`.\n */\nabstract contract ProtocolFeeCache is RecoveryMode {\n using SafeCast for uint256;\n\n IProtocolFeePercentagesProvider private immutable _protocolFeeProvider;\n\n // Protocol Fee Percentages can never be larger than 100% (1e18), which fits in ~59 bits, so using 64 for each type\n // is sufficient.\n struct FeeTypeCache {\n uint64 swapFee;\n uint64 yieldFee;\n uint64 aumFee;\n }\n\n FeeTypeCache private _cache;\n\n event ProtocolFeePercentageCacheUpdated(uint256 indexed feeType, uint256 protocolFeePercentage);\n\n // Swap fees can be set to a fixed value at construction, or delegated to the ProtocolFeePercentagesProvider if\n // passing the special sentinel value.\n uint256 public constant DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL = type(uint256).max;\n\n bool private immutable _delegatedProtocolSwapFees;\n\n // Only valid when `_delegatedProtocolSwapFees` is false\n uint256 private immutable _fixedProtocolSwapFeePercentage;\n\n constructor(IProtocolFeePercentagesProvider protocolFeeProvider, uint256 protocolSwapFeePercentage) {\n // Protocol swap fees are delegated to the value reported by the ProtocolFeePercentagesProvider if the sentinel\n // value is passed.\n bool delegatedProtocolSwapFees = protocolSwapFeePercentage == DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL;\n\n _delegatedProtocolSwapFees = delegatedProtocolSwapFees;\n _protocolFeeProvider = protocolFeeProvider;\n\n _updateProtocolFeeCache(protocolFeeProvider, ProtocolFeeType.YIELD);\n _updateProtocolFeeCache(protocolFeeProvider, ProtocolFeeType.AUM);\n\n if (delegatedProtocolSwapFees) {\n _updateProtocolFeeCache(protocolFeeProvider, ProtocolFeeType.SWAP);\n } else {\n _require(\n protocolSwapFeePercentage <= protocolFeeProvider.getFeeTypeMaximumPercentage(ProtocolFeeType.SWAP),\n Errors.SWAP_FEE_PERCENTAGE_TOO_HIGH\n );\n\n // We cannot set `_fixedProtocolSwapFeePercentage` here due to it being immutable so instead we must set it\n // in the main function scope with a value based on whether protocol fees are delegated.\n\n // Emit an event as we do in `_updateProtocolFeeCache` to appear the same to offchain indexers.\n emit ProtocolFeePercentageCacheUpdated(ProtocolFeeType.SWAP, protocolSwapFeePercentage);\n }\n\n // As `_fixedProtocolSwapFeePercentage` is immutable we must set a value, but just set to zero if it's not used.\n _fixedProtocolSwapFeePercentage = delegatedProtocolSwapFees ? 0 : protocolSwapFeePercentage;\n }\n\n /**\n * @dev Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is\n * immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the\n * ProtocolFeePercentagesProvider.\n */\n function getProtocolFeePercentageCache(uint256 feeType) public view returns (uint256) {\n if (inRecoveryMode()) {\n return 0;\n }\n\n if (feeType == ProtocolFeeType.SWAP) {\n return getProtocolSwapFeeDelegation() ? _cache.swapFee : _fixedProtocolSwapFeePercentage;\n } else if (feeType == ProtocolFeeType.YIELD) {\n return _cache.yieldFee;\n } else if (feeType == ProtocolFeeType.AUM) {\n return _cache.aumFee;\n } else {\n _revert(Errors.UNHANDLED_FEE_TYPE);\n }\n }\n\n /**\n * @dev Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated).\n * Updates the cache to the latest value set by governance.\n */\n function updateProtocolFeePercentageCache() external {\n _beforeProtocolFeeCacheUpdate();\n\n if (getProtocolSwapFeeDelegation()) {\n _updateProtocolFeeCache(_protocolFeeProvider, ProtocolFeeType.SWAP);\n }\n\n _updateProtocolFeeCache(_protocolFeeProvider, ProtocolFeeType.YIELD);\n _updateProtocolFeeCache(_protocolFeeProvider, ProtocolFeeType.AUM);\n }\n\n /**\n * @dev Override in derived contracts to perform some action before the cache is updated. This is typically relevant\n * to Pools that incur protocol debt between operations. To avoid altering the amount due retroactively, this debt\n * needs to be paid before the fee percentages change.\n */\n function _beforeProtocolFeeCacheUpdate() internal virtual {}\n\n /**\n * @dev Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider.\n */\n function getProtocolSwapFeeDelegation() public view returns (bool) {\n return _delegatedProtocolSwapFees;\n }\n\n function _updateProtocolFeeCache(IProtocolFeePercentagesProvider protocolFeeProvider, uint256 feeType) private {\n uint256 currentValue = protocolFeeProvider.getFeeTypePercentage(feeType);\n\n if (feeType == ProtocolFeeType.SWAP) {\n _cache.swapFee = currentValue.toUint64();\n } else if (feeType == ProtocolFeeType.YIELD) {\n _cache.yieldFee = currentValue.toUint64();\n } else if (feeType == ProtocolFeeType.AUM) {\n _cache.aumFee = currentValue.toUint64();\n } else {\n _revert(Errors.UNHANDLED_FEE_TYPE);\n }\n\n emit ProtocolFeePercentageCacheUpdated(feeType, currentValue);\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\nimport \"./ProtocolFees.sol\";\n\nlibrary InvariantGrowthProtocolSwapFees {\n using FixedPoint for uint256;\n\n function getProtocolOwnershipPercentage(\n uint256 invariantGrowthRatio,\n uint256 supplyGrowthRatio,\n uint256 protocolSwapFeePercentage\n ) internal pure returns (uint256) {\n // Joins and exits are symmetrical; for simplicity, we consider a join, where the invariant and supply\n // both increase.\n\n // |-------------------------|-- original invariant * invariantGrowthRatio\n // | increase from fees |\n // |-------------------------|-- original invariant * supply growth ratio (fee-less invariant)\n // | |\n // | increase from balances |\n // |-------------------------|-- original invariant\n // | |\n // | | |------------------|-- currentSupply\n // | | | BPT minted |\n // | | |------------------|-- previousSupply\n // | original invariant | | original supply |\n // |_________________________| |__________________|\n //\n // If the join is proportional, the invariant and supply will likewise increase proportionally,\n // so the growth ratios (invariantGrowthRatio / supplyGrowthRatio) will be equal. In this case, we do not charge\n // any protocol fees.\n // We also charge no protocol fees in the case where `invariantGrowthRatio < supplyGrowthRatio` to avoid\n // potential underflows, however this should only occur in extremely low volume actions due solely to rounding\n // error.\n\n if ((supplyGrowthRatio >= invariantGrowthRatio) || (protocolSwapFeePercentage == 0)) return 0;\n\n // If the join is non-proportional, the supply increase will be proportionally less than the invariant increase,\n // since the BPT minted will be based on fewer tokens (because swap fees are not included). So the supply growth\n // is due entirely to the balance changes, while the invariant growth also includes swap fees.\n //\n // To isolate the amount of increase by fees then, we multiply the original invariant by the supply growth\n // ratio to get the \"feeless invariant\". The difference between the final invariant and this value is then\n // the amount of the invariant due to fees, which we convert to a percentage by normalizing against the\n // final invariant. This is expressed as the expression below:\n //\n // invariantGrowthFromFees = currentInvariant - supplyGrowthRatio * previousInvariant\n //\n // We then divide through by current invariant so the LHS can be identified as the fraction of the pool which\n // is made up of accumulated swap fees.\n //\n // swapFeesPercentage = 1 - supplyGrowthRatio * previousInvariant / currentInvariant\n //\n // We then define `invariantGrowthRatio` in a similar fashion to `supplyGrowthRatio` to give the result:\n //\n // swapFeesPercentage = 1 - supplyGrowthRatio / invariantGrowthRatio\n //\n // Using this form allows us to consider only the ratios of the two invariants, rather than their absolute\n // values: a useful property, as this is sometimes easier than calculating the full invariant twice.\n\n // We've already checked that `supplyGrowthRatio` is smaller than `invariantGrowthRatio`, and hence their ratio\n // smaller than FixedPoint.ONE, allowing for unchecked arithmetic.\n uint256 swapFeesPercentage = FixedPoint.ONE - supplyGrowthRatio.divDown(invariantGrowthRatio);\n\n // We then multiply by the protocol swap fee percentage to get the fraction of the pool which the protocol\n // should own once fees have been collected.\n return swapFeesPercentage.mulDown(protocolSwapFeePercentage);\n }\n\n function calcDueProtocolFees(\n uint256 invariantGrowthRatio,\n uint256 previousSupply,\n uint256 currentSupply,\n uint256 protocolSwapFeePercentage\n ) internal pure returns (uint256) {\n uint256 protocolOwnershipPercentage = getProtocolOwnershipPercentage(\n invariantGrowthRatio,\n currentSupply.divDown(previousSupply),\n protocolSwapFeePercentage\n );\n\n return ProtocolFees.bptForPoolOwnershipPercentage(currentSupply, protocolOwnershipPercentage);\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n *\n * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n * all math on `uint256` and `int256` and then downcasting.\n */\nlibrary SafeCast {\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n _require(value >> 255 == 0, Errors.SAFE_CAST_VALUE_CANT_FIT_INT256);\n return int256(value);\n }\n\n /**\n * @dev Converts an unsigned uint256 into an unsigned uint64.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxUint64.\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n _require(value <= type(uint64).max, Errors.SAFE_CAST_VALUE_CANT_FIT_UINT64);\n return uint64(value);\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\";\n\nlibrary ProtocolFees {\n using FixedPoint for uint256;\n\n /**\n * @dev Calculates the amount of BPT necessary to give ownership of a given percentage of the Pool.\n * Note that this function reverts if `poolPercentage` >= 100%, it's expected that the caller will enforce this.\n * @param totalSupply - The total supply of the pool prior to minting BPT.\n * @param poolOwnershipPercentage - The desired ownership percentage of the pool to have as a result of minting BPT.\n * @return bptAmount - The amount of BPT to mint such that it is `poolPercentage` of the resultant total supply.\n */\n function bptForPoolOwnershipPercentage(uint256 totalSupply, uint256 poolOwnershipPercentage)\n internal\n pure\n returns (uint256)\n {\n // If we mint some amount `bptAmount` of BPT then the percentage ownership of the pool this grants is given by:\n // `poolOwnershipPercentage = bptAmount / (totalSupply + bptAmount)`.\n // Solving for `bptAmount`, we arrive at:\n // `bptAmount = totalSupply * poolOwnershipPercentage / (1 - poolOwnershipPercentage)`.\n return Math.divDown(Math.mul(totalSupply, poolOwnershipPercentage), poolOwnershipPercentage.complement());\n }\n}\n" + }, + "contracts/test/MockComposableStablePool.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol\";\n\nimport \"../ComposableStablePool.sol\";\n\ncontract MockComposableStablePool is ComposableStablePool, MockFailureModes {\n constructor(NewPoolParams memory params) ComposableStablePool(params) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function mockCacheTokenRateIfNecessary(uint256 index) external {\n _cacheTokenRateIfNecessary(index);\n }\n\n function isOwnerOnlyAction(bytes32 actionId) external view returns (bool) {\n return _isOwnerOnlyAction(actionId);\n }\n\n function _updateTokenRateCache(\n uint256 index,\n IRateProvider provider,\n uint256 duration\n ) internal override whenNotInFailureMode(FailureMode.PRICE_RATE) {\n return super._updateTokenRateCache(index, provider, duration);\n }\n\n function _onSwapGivenIn(\n SwapRequest memory request,\n uint256[] memory balancesIncludingBpt,\n uint256 indexIn,\n uint256 indexOut\n ) internal virtual override whenNotInFailureMode(FailureMode.INVARIANT) returns (uint256 amountOut) {\n return super._onSwapGivenIn(request, balancesIncludingBpt, indexIn, indexOut);\n }\n\n function _onSwapGivenOut(\n SwapRequest memory request,\n uint256[] memory balancesIncludingBpt,\n uint256 indexIn,\n uint256 indexOut\n ) internal virtual override whenNotInFailureMode(FailureMode.INVARIANT) returns (uint256 amountIn) {\n return super._onSwapGivenOut(request, balancesIncludingBpt, indexIn, indexOut);\n }\n\n function beforeJoinExit(uint256[] memory registeredBalances)\n external\n returns (\n uint256 preJoinExitSupply,\n uint256[] memory balances,\n uint256 currentAmp,\n uint256 preJoinExitInvariant\n )\n {\n return _beforeJoinExit(registeredBalances);\n }\n\n function getVirtualSupply() external view returns (uint256) {\n // For a 3 token General Pool, it is cheaper to query the balance for a single token than to read all balances,\n // as getPoolTokenInfo will check for token existence, token balance and Asset Manager (3 reads), while\n // getPoolTokens will read the number of tokens, their addresses and balances (7 reads).\n // The more tokens the Pool has, the more expensive `getPoolTokens` becomes, while `getPoolTokenInfo`'s gas\n // remains constant.\n (uint256 cash, uint256 managed, , ) = getVault().getPoolTokenInfo(getPoolId(), IERC20(this));\n\n // Note that unlike all other balances, the Vault's BPT balance does not need scaling as its scaling factor is\n // ONE. This addition cannot overflow due to the Vault's balance limits.\n return _getVirtualSupply(cash + managed);\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\nabstract contract MockFailureModes {\n enum FailureMode { INVARIANT, PRICE_RATE }\n\n // Set to true to simulate a given failure mode\n mapping(FailureMode => bool) private _failureState;\n\n // Error message to return in simulated failure mode\n mapping(FailureMode => uint256) private _failureCode;\n\n modifier whenNotInFailureMode(FailureMode mode) {\n _ensureNotFailed(mode);\n _;\n }\n\n // Simulate a failure by turning on the associated failure mode flag\n function setFailureMode(FailureMode mode, bool failed) external {\n _failureState[mode] = failed;\n }\n\n // It is *possible* for the same failure state to generate different error messages in different situations\n // (though ideally this would not be the case). Allow for updating the associated code here.\n function setFailureCode(FailureMode mode, uint256 errorCode) external {\n _failureCode[mode] = errorCode;\n }\n\n // Revert with the associated message if this failure mode is activated\n function _ensureNotFailed(FailureMode mode) private view {\n if (_failureState[mode]) {\n _revert(_failureCode[mode] == 0 ? Errors.INDUCED_FAILURE : _failureCode[mode]);\n }\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\";\n\n/**\n * @dev Library used to deploy contracts with specific code. This can be used for long-term storage of immutable data as\n * contract code, which can be retrieved via the `extcodecopy` opcode.\n */\nlibrary CodeDeployer {\n // During contract construction, the full code supplied exists as code, and can be accessed via `codesize` and\n // `codecopy`. This is not the contract's final code however: whatever the constructor returns is what will be\n // stored as its code.\n //\n // We use this mechanism to have a simple constructor that stores whatever is appended to it. The following opcode\n // sequence corresponds to the creation code of the following equivalent Solidity contract, plus padding to make the\n // full code 32 bytes long:\n //\n // contract CodeDeployer {\n // constructor() payable {\n // uint256 size;\n // assembly {\n // size := sub(codesize(), 32) // size of appended data, as constructor is 32 bytes long\n // codecopy(0, 32, size) // copy all appended data to memory at position 0\n // return(0, size) // return appended data for it to be stored as code\n // }\n // }\n // }\n //\n // More specifically, it is composed of the following opcodes (plus padding):\n //\n // [1] PUSH1 0x20\n // [2] CODESIZE\n // [3] SUB\n // [4] DUP1\n // [6] PUSH1 0x20\n // [8] PUSH1 0x00\n // [9] CODECOPY\n // [11] PUSH1 0x00\n // [12] RETURN\n //\n // The padding is just the 0xfe sequence (invalid opcode). It is important as it lets us work in-place, avoiding\n // memory allocation and copying.\n bytes32\n private constant _DEPLOYER_CREATION_CODE = 0x602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe;\n\n /**\n * @dev Deploys a contract with `code` as its code, returning the destination address.\n *\n * Reverts if deployment fails.\n */\n function deploy(bytes memory code) internal returns (address destination) {\n bytes32 deployerCreationCode = _DEPLOYER_CREATION_CODE;\n\n // We need to concatenate the deployer creation code and `code` in memory, but want to avoid copying all of\n // `code` (which could be quite long) into a new memory location. Therefore, we operate in-place using\n // assembly.\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let codeLength := mload(code)\n\n // `code` is composed of length and data. We've already stored its length in `codeLength`, so we simply\n // replace it with the deployer creation code (which is exactly 32 bytes long).\n mstore(code, deployerCreationCode)\n\n // At this point, `code` now points to the deployer creation code immediately followed by `code`'s data\n // contents. This is exactly what the deployer expects to receive when created.\n destination := create(0, code, add(codeLength, 32))\n\n // Finally, we restore the original length in order to not mutate `code`.\n mstore(code, codeLength)\n }\n\n // The create opcode returns the zero address when contract creation fails, so we revert if this happens.\n _require(destination != address(0), Errors.CODE_DEPLOYMENT_FAILED);\n }\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"./CodeDeployer.sol\";\n\n/**\n * @dev Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when\n * the contract's creation code grows close to 24kB.\n *\n * Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB.\n */\nabstract contract BaseSplitCodeFactory {\n // The contract's creation code is stored as code in two separate addresses, and retrieved via `extcodecopy`. This\n // means this factory supports contracts with creation code of up to 48kB.\n // We rely on inline-assembly to achieve this, both to make the entire operation highly gas efficient, and because\n // `extcodecopy` is not available in Solidity.\n\n // solhint-disable no-inline-assembly\n\n address private immutable _creationCodeContractA;\n uint256 private immutable _creationCodeSizeA;\n\n address private immutable _creationCodeContractB;\n uint256 private immutable _creationCodeSizeB;\n\n /**\n * @dev The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`.\n */\n constructor(bytes memory creationCode) {\n uint256 creationCodeSize = creationCode.length;\n\n // We are going to deploy two contracts: one with approximately the first half of `creationCode`'s contents\n // (A), and another with the remaining half (B).\n // We store the lengths in both immutable and stack variables, since immutable variables cannot be read during\n // construction.\n uint256 creationCodeSizeA = creationCodeSize / 2;\n _creationCodeSizeA = creationCodeSizeA;\n\n uint256 creationCodeSizeB = creationCodeSize - creationCodeSizeA;\n _creationCodeSizeB = creationCodeSizeB;\n\n // To deploy the contracts, we're going to use `CodeDeployer.deploy()`, which expects a memory array with\n // the code to deploy. Note that we cannot simply create arrays for A and B's code by copying or moving\n // `creationCode`'s contents as they are expected to be very large (> 24kB), so we must operate in-place.\n\n // Memory: [ code length ] [ A.data ] [ B.data ]\n\n // Creating A's array is simple: we simply replace `creationCode`'s length with A's length. We'll later restore\n // the original length.\n\n bytes memory creationCodeA;\n assembly {\n creationCodeA := creationCode\n mstore(creationCodeA, creationCodeSizeA)\n }\n\n // Memory: [ A.length ] [ A.data ] [ B.data ]\n // ^ creationCodeA\n\n _creationCodeContractA = CodeDeployer.deploy(creationCodeA);\n\n // Creating B's array is a bit more involved: since we cannot move B's contents, we are going to create a 'new'\n // memory array starting at A's last 32 bytes, which will be replaced with B's length. We'll back-up this last\n // byte to later restore it.\n\n bytes memory creationCodeB;\n bytes32 lastByteA;\n\n assembly {\n // `creationCode` points to the array's length, not data, so by adding A's length to it we arrive at A's\n // last 32 bytes.\n creationCodeB := add(creationCode, creationCodeSizeA)\n lastByteA := mload(creationCodeB)\n mstore(creationCodeB, creationCodeSizeB)\n }\n\n // Memory: [ A.length ] [ A.data[ : -1] ] [ B.length ][ B.data ]\n // ^ creationCodeA ^ creationCodeB\n\n _creationCodeContractB = CodeDeployer.deploy(creationCodeB);\n\n // We now restore the original contents of `creationCode` by writing back the original length and A's last byte.\n assembly {\n mstore(creationCodeA, creationCodeSize)\n mstore(creationCodeB, lastByteA)\n }\n }\n\n /**\n * @dev Returns the two addresses where the creation code of the contract crated by this factory is stored.\n */\n function getCreationCodeContracts() public view returns (address contractA, address contractB) {\n return (_creationCodeContractA, _creationCodeContractB);\n }\n\n /**\n * @dev Returns the creation code of the contract this factory creates.\n */\n function getCreationCode() public view returns (bytes memory) {\n return _getCreationCodeWithArgs(\"\");\n }\n\n /**\n * @dev Returns the creation code that will result in a contract being deployed with `constructorArgs`.\n */\n function _getCreationCodeWithArgs(bytes memory constructorArgs) private view returns (bytes memory code) {\n // This function exists because `abi.encode()` cannot be instructed to place its result at a specific address.\n // We need for the ABI-encoded constructor arguments to be located immediately after the creation code, but\n // cannot rely on `abi.encodePacked()` to perform concatenation as that would involve copying the creation code,\n // which would be prohibitively expensive.\n // Instead, we compute the creation code in a pre-allocated array that is large enough to hold *both* the\n // creation code and the constructor arguments, and then copy the ABI-encoded arguments (which should not be\n // overly long) right after the end of the creation code.\n\n // Immutable variables cannot be used in assembly, so we store them in the stack first.\n address creationCodeContractA = _creationCodeContractA;\n uint256 creationCodeSizeA = _creationCodeSizeA;\n address creationCodeContractB = _creationCodeContractB;\n uint256 creationCodeSizeB = _creationCodeSizeB;\n\n uint256 creationCodeSize = creationCodeSizeA + creationCodeSizeB;\n uint256 constructorArgsSize = constructorArgs.length;\n\n uint256 codeSize = creationCodeSize + constructorArgsSize;\n\n assembly {\n // First, we allocate memory for `code` by retrieving the free memory pointer and then moving it ahead of\n // `code` by the size of the creation code plus constructor arguments, and 32 bytes for the array length.\n code := mload(0x40)\n mstore(0x40, add(code, add(codeSize, 32)))\n\n // We now store the length of the code plus constructor arguments.\n mstore(code, codeSize)\n\n // Next, we concatenate the creation code stored in A and B.\n let dataStart := add(code, 32)\n extcodecopy(creationCodeContractA, dataStart, 0, creationCodeSizeA)\n extcodecopy(creationCodeContractB, add(dataStart, creationCodeSizeA), 0, creationCodeSizeB)\n }\n\n // Finally, we copy the constructorArgs to the end of the array. Unfortunately there is no way to avoid this\n // copy, as it is not possible to tell Solidity where to store the result of `abi.encode()`.\n uint256 constructorArgsDataPtr;\n uint256 constructorArgsCodeDataPtr;\n assembly {\n constructorArgsDataPtr := add(constructorArgs, 32)\n constructorArgsCodeDataPtr := add(add(code, 32), creationCodeSize)\n }\n\n _memcpy(constructorArgsCodeDataPtr, constructorArgsDataPtr, constructorArgsSize);\n }\n\n /**\n * @dev Deploys a contract with constructor arguments. To create `constructorArgs`, call `abi.encode()` with the\n * contract's constructor arguments, in order.\n */\n function _create(bytes memory constructorArgs) internal virtual returns (address) {\n bytes memory creationCode = _getCreationCodeWithArgs(constructorArgs);\n\n address destination;\n assembly {\n destination := create(0, add(creationCode, 32), mload(creationCode))\n }\n\n if (destination == address(0)) {\n // Bubble up inner revert reason\n // solhint-disable-next-line no-inline-assembly\n assembly {\n returndatacopy(0, 0, returndatasize())\n revert(0, returndatasize())\n }\n }\n\n return destination;\n }\n\n // From\n // https://github.com/Arachnid/solidity-stringutils/blob/b9a6f6615cf18a87a823cbc461ce9e140a61c305/src/strings.sol\n function _memcpy(\n uint256 dest,\n uint256 src,\n uint256 len\n ) private pure {\n // Copy word-length chunks while possible\n for (; len >= 32; len -= 32) {\n assembly {\n mstore(dest, mload(src))\n }\n dest += 32;\n src += 32;\n }\n\n // Copy remaining bytes\n uint256 mask = 256**(32 - len) - 1;\n assembly {\n let srcpart := and(mload(src), not(mask))\n let destpart := and(mload(dest), mask)\n mstore(dest, or(destpart, srcpart))\n }\n }\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\";\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\";\n\n/**\n * @notice Base contract for Pool factories.\n *\n * Pools are deployed from factories to allow third parties to reason about them. Unknown Pools may have arbitrary\n * logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts created by\n * the factory) is very powerful.\n *\n * @dev By using the split code mechanism, we can deploy Pools with creation code so large that a regular factory\n * contract would not be able to store it.\n *\n * Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will\n * become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently\n * prevent the creation of any future pools from the factory.\n */\nabstract contract BasePoolFactory is IBasePoolFactory, BaseSplitCodeFactory, SingletonAuthentication {\n IProtocolFeePercentagesProvider private immutable _protocolFeeProvider;\n\n mapping(address => bool) private _isPoolFromFactory;\n bool private _disabled;\n\n event PoolCreated(address indexed pool);\n event FactoryDisabled();\n\n constructor(\n IVault vault,\n IProtocolFeePercentagesProvider protocolFeeProvider,\n bytes memory creationCode\n ) BaseSplitCodeFactory(creationCode) SingletonAuthentication(vault) {\n _protocolFeeProvider = protocolFeeProvider;\n }\n\n function isPoolFromFactory(address pool) external view override returns (bool) {\n return _isPoolFromFactory[pool];\n }\n\n function isDisabled() public view override returns (bool) {\n return _disabled;\n }\n\n function disable() external override authenticate {\n _ensureEnabled();\n\n _disabled = true;\n\n emit FactoryDisabled();\n }\n\n function _ensureEnabled() internal view {\n _require(!isDisabled(), Errors.DISABLED);\n }\n\n function getProtocolFeePercentagesProvider() public view returns (IProtocolFeePercentagesProvider) {\n return _protocolFeeProvider;\n }\n\n function _create(bytes memory constructorArgs) internal virtual override returns (address) {\n _ensureEnabled();\n\n address pool = super._create(constructorArgs);\n\n _isPoolFromFactory[pool] = true;\n\n emit PoolCreated(pool);\n\n return pool;\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\n\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @dev Returns true if `pool` was created by this factory.\n */\n function isPoolFromFactory(address pool) external view returns (bool);\n\n /**\n * @dev Check whether the derived factory has been disabled.\n */\n function isDisabled() external view returns (bool);\n\n /**\n * @dev Disable the factory, preventing the creation of more pools. Already existing pools are unaffected.\n * Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n" + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"./Authentication.sol\";\n\nabstract contract SingletonAuthentication is Authentication {\n IVault private immutable _vault;\n\n // Use the contract's own address to disambiguate action identifiers\n constructor(IVault vault) Authentication(bytes32(uint256(address(this)))) {\n _vault = vault;\n }\n\n /**\n * @notice Returns the Balancer Vault\n */\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Returns the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n return getAuthorizer().canPerform(actionId, account, address(this));\n }\n\n function _canPerform(\n bytes32 actionId,\n address account,\n address where\n ) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../solidity-utils/helpers/IAuthentication.sol\";\nimport \"../vault/IVault.sol\";\n\ninterface IAuthorizerAdaptor is IAuthentication {\n /**\n * @notice Returns the Balancer Vault\n */\n function getVault() external view returns (IVault);\n\n /**\n * @notice Returns the Authorizer\n */\n function getAuthorizer() external view returns (IAuthorizer);\n\n /**\n * @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\n * @param target - Address of the contract to be called\n * @param data - Calldata to be sent to the target contract\n * @return The bytes encoded return value from the performed function call\n */\n function performAction(address target, bytes calldata data) external payable returns (bytes memory);\n}\n" + }, + "contracts/test/MockStablePoolAmplification.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"../StablePoolAmplification.sol\";\n\ncontract MockStablePoolAmplification is StablePoolAmplification {\n IVault private immutable _vault;\n\n constructor(\n IVault vault,\n address owner,\n uint256 amplificationParameter\n )\n StablePoolAmplification(amplificationParameter)\n BasePoolAuthorization(owner)\n Authentication(bytes32(uint256(address(this))))\n {\n _vault = vault;\n }\n\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n function _getAuthorizer() internal view override returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n" + }, + "contracts/test/MockStableMath.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"../StableMath.sol\";\n\ncontract MockStableMath {\n function invariant(uint256 amp, uint256[] memory balances) external pure returns (uint256) {\n return StableMath._calculateInvariant(amp, balances);\n }\n\n function outGivenIn(\n uint256 amp,\n uint256[] memory balances,\n uint256 tokenIndexIn,\n uint256 tokenIndexOut,\n uint256 tokenAmountIn\n ) external pure returns (uint256) {\n return\n StableMath._calcOutGivenIn(\n amp,\n balances,\n tokenIndexIn,\n tokenIndexOut,\n tokenAmountIn,\n StableMath._calculateInvariant(amp, balances)\n );\n }\n\n function inGivenOut(\n uint256 amp,\n uint256[] memory balances,\n uint256 tokenIndexIn,\n uint256 tokenIndexOut,\n uint256 tokenAmountOut\n ) external pure returns (uint256) {\n return\n StableMath._calcInGivenOut(\n amp,\n balances,\n tokenIndexIn,\n tokenIndexOut,\n tokenAmountOut,\n StableMath._calculateInvariant(amp, balances)\n );\n }\n\n function exactTokensInForBPTOut(\n uint256 amp,\n uint256[] memory balances,\n uint256[] memory amountsIn,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFee\n ) external pure returns (uint256) {\n return\n StableMath._calcBptOutGivenExactTokensIn(\n amp,\n balances,\n amountsIn,\n bptTotalSupply,\n currentInvariant,\n swapFee\n );\n }\n\n function tokenInForExactBPTOut(\n uint256 amp,\n uint256[] memory balances,\n uint256 tokenIndex,\n uint256 bptAmountOut,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFee\n ) external pure returns (uint256) {\n return\n StableMath._calcTokenInGivenExactBptOut(\n amp,\n balances,\n tokenIndex,\n bptAmountOut,\n bptTotalSupply,\n currentInvariant,\n swapFee\n );\n }\n\n function exactBPTInForTokenOut(\n uint256 amp,\n uint256[] memory balances,\n uint256 tokenIndex,\n uint256 bptAmountIn,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFee\n ) external pure returns (uint256) {\n return\n StableMath._calcTokenOutGivenExactBptIn(\n amp,\n balances,\n tokenIndex,\n bptAmountIn,\n bptTotalSupply,\n currentInvariant,\n swapFee\n );\n }\n\n function bptInForExactTokensOut(\n uint256 amp,\n uint256[] memory balances,\n uint256[] memory amountsOut,\n uint256 bptTotalSupply,\n uint256 currentInvariant,\n uint256 swapFee\n ) external pure returns (uint256) {\n return\n StableMath._calcBptInGivenExactTokensOut(\n amp,\n balances,\n amountsOut,\n bptTotalSupply,\n currentInvariant,\n swapFee\n );\n }\n\n function getTokenBalanceGivenInvariantAndAllOtherBalances(\n uint256 amplificationParameter,\n uint256[] memory balances,\n uint256 currentInvariant,\n uint256 tokenIndex\n ) external pure returns (uint256) {\n return\n StableMath._getTokenBalanceGivenInvariantAndAllOtherBalances(\n amplificationParameter,\n balances,\n currentInvariant,\n tokenIndex\n );\n }\n}\n" + }, + "contracts/test/MockComposableStablePoolProtocolFees.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\";\n\nimport \"../ComposableStablePoolProtocolFees.sol\";\n\ncontract MockComposableStablePoolProtocolFees is ComposableStablePoolProtocolFees {\n constructor(\n IVault vault,\n IProtocolFeePercentagesProvider protocolFeeProvider,\n IERC20[] memory tokens,\n IRateProvider[] memory tokenRateProviders,\n uint256[] memory tokenRateCacheDurations,\n bool[] memory exemptFromYieldProtocolFeeFlags\n )\n ComposableStablePoolStorage(\n StorageParams({\n registeredTokens: _insertSorted(tokens, IERC20(this)),\n tokenRateProviders: tokenRateProviders,\n exemptFromYieldProtocolFeeFlags: exemptFromYieldProtocolFeeFlags\n })\n )\n ComposableStablePoolRates(\n RatesParams({\n tokens: tokens,\n rateProviders: tokenRateProviders,\n tokenRateCacheDurations: tokenRateCacheDurations\n })\n )\n ProtocolFeeCache(protocolFeeProvider, ProtocolFeeCache.DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL)\n BasePool(\n vault,\n IVault.PoolSpecialization.GENERAL,\n \"MockStablePoolStorage\",\n \"MOCK_BPT\",\n _insertSorted(tokens, IERC20(this)),\n new address[](tokens.length + 1),\n 1e12, // BasePool._MIN_SWAP_FEE_PERCENTAGE\n 0,\n 0,\n address(0)\n )\n {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function payProtocolFeesBeforeJoinExit(\n uint256[] memory registeredBalances,\n uint256 lastJoinExitAmp,\n uint256 lastPostJoinExitInvariant\n ) external returns (uint256 virtualSupply, uint256[] memory balances) {\n (virtualSupply, balances, ) = _payProtocolFeesBeforeJoinExit(\n registeredBalances,\n lastJoinExitAmp,\n lastPostJoinExitInvariant\n );\n }\n\n function updateInvariantAfterJoinExit(\n uint256 currentAmp,\n uint256[] memory balances,\n uint256 preJoinExitInvariant,\n uint256 preJoinExitSupply,\n uint256 postJoinExitSupply\n ) external {\n return\n _updateInvariantAfterJoinExit(\n currentAmp,\n balances,\n preJoinExitInvariant,\n preJoinExitSupply,\n postJoinExitSupply\n );\n }\n\n function updatePostJoinExit(uint256 currentAmp, uint256 postJoinExitInvariant) external {\n _updatePostJoinExit(currentAmp, postJoinExitInvariant);\n }\n\n function setTotalSupply(uint256 newSupply) external {\n _setTotalSupply(newSupply);\n }\n\n function getGrowthInvariants(uint256[] memory balances, uint256 lastPostJoinExitAmp)\n external\n view\n returns (\n uint256 swapFeeGrowthInvariant,\n uint256 totalNonExemptGrowthInvariant,\n uint256 totalGrowthInvariant\n )\n {\n return _getGrowthInvariants(balances, lastPostJoinExitAmp);\n }\n\n function getProtocolPoolOwnershipPercentage(\n uint256[] memory balances,\n uint256 lastJoinExitAmp,\n uint256 lastPostJoinExitInvariant\n ) external view returns (uint256) {\n (uint256 percentage, ) = _getProtocolPoolOwnershipPercentage(\n balances,\n lastJoinExitAmp,\n lastPostJoinExitInvariant\n );\n return percentage;\n }\n\n // Stubbed functions\n\n function _scalingFactors() internal view virtual override returns (uint256[] memory) {}\n\n function _onInitializePool(\n bytes32,\n address,\n address,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n\n function _onJoinPool(\n bytes32,\n address,\n address,\n uint256[] memory,\n uint256,\n uint256,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n\n function _onExitPool(\n bytes32,\n address,\n address,\n uint256[] memory,\n uint256,\n uint256,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n}\n" + }, + "contracts/test/MockComposableStablePoolStorage.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\";\n\nimport \"../ComposableStablePoolStorage.sol\";\n\ncontract MockComposableStablePoolStorage is ComposableStablePoolStorage {\n constructor(\n IVault vault,\n IERC20[] memory tokens,\n IRateProvider[] memory tokenRateProviders,\n bool[] memory exemptFromYieldProtocolFeeFlags\n )\n ComposableStablePoolStorage(\n StorageParams({\n registeredTokens: _insertSorted(tokens, IERC20(this)),\n tokenRateProviders: tokenRateProviders,\n exemptFromYieldProtocolFeeFlags: exemptFromYieldProtocolFeeFlags\n })\n )\n BasePool(\n vault,\n IVault.PoolSpecialization.GENERAL,\n \"MockComposableStablePoolStorage\",\n \"MOCK_BPT\",\n _insertSorted(tokens, IERC20(this)),\n new address[](tokens.length + 1),\n 1e12, // BasePool._MIN_SWAP_FEE_PERCENTAGE\n 0,\n 0,\n address(0)\n )\n {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function skipBptIndex(uint256 index) external view returns (uint256) {\n return _skipBptIndex(index);\n }\n\n function addBptIndex(uint256 index) external view returns (uint256) {\n return _addBptIndex(index);\n }\n\n function dropBptItem(uint256[] memory amounts) external view returns (uint256[] memory) {\n return _dropBptItem(amounts);\n }\n\n function addBptItem(uint256[] memory amounts, uint256 bptAmount)\n external\n view\n returns (uint256[] memory amountsWithBpt)\n {\n return _addBptItem(amounts, bptAmount);\n }\n\n function getRateProvider0() external view returns (IRateProvider) {\n return _rateProvider0;\n }\n\n function getRateProvider1() external view returns (IRateProvider) {\n return _rateProvider1;\n }\n\n function getRateProvider2() external view returns (IRateProvider) {\n return _rateProvider2;\n }\n\n function getRateProvider3() external view returns (IRateProvider) {\n return _rateProvider3;\n }\n\n function getRateProvider4() external view returns (IRateProvider) {\n return _rateProvider4;\n }\n\n function getRateProvider5() external view returns (IRateProvider) {\n return _rateProvider5;\n }\n\n function getScalingFactor0() external view returns (uint256) {\n return _scalingFactor0;\n }\n\n function getScalingFactor1() external view returns (uint256) {\n return _scalingFactor1;\n }\n\n function getScalingFactor2() external view returns (uint256) {\n return _scalingFactor2;\n }\n\n function getScalingFactor3() external view returns (uint256) {\n return _scalingFactor3;\n }\n\n function getScalingFactor4() external view returns (uint256) {\n return _scalingFactor4;\n }\n\n function getScalingFactor5() external view returns (uint256) {\n return _scalingFactor5;\n }\n\n function getRateProvider(uint256 index) external view returns (IRateProvider) {\n return _getRateProvider(index);\n }\n\n // This assumes the tokenIndex is valid. If it's not, it will just return false.\n function isTokenExemptFromYieldProtocolFeeByIndex(uint256 tokenIndex) external view returns (bool) {\n return _isTokenExemptFromYieldProtocolFee(tokenIndex);\n }\n\n function areAllTokensExempt() external view returns (bool) {\n return _areAllTokensExempt();\n }\n\n function areNoTokensExempt() external view returns (bool) {\n return _areNoTokensExempt();\n }\n\n // Stubbed functions\n\n function _scalingFactors() internal view virtual override returns (uint256[] memory) {}\n\n function _onInitializePool(\n bytes32,\n address,\n address,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n\n function _onJoinPool(\n bytes32,\n address,\n address,\n uint256[] memory,\n uint256,\n uint256,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n\n function _onExitPool(\n bytes32,\n address,\n address,\n uint256[] memory,\n uint256,\n uint256,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n}\n" + }, + "contracts/test/MockComposableStablePoolRates.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\n\nimport \"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\";\n\nimport \"../ComposableStablePoolRates.sol\";\n\ncontract MockComposableStablePoolRates is ComposableStablePoolRates {\n constructor(\n IVault vault,\n IERC20[] memory tokens,\n IRateProvider[] memory tokenRateProviders,\n uint256[] memory tokenRateCacheDurations,\n bool[] memory exemptFromYieldProtocolFeeFlags,\n address owner\n )\n ComposableStablePoolRates(RatesParams(tokens, tokenRateProviders, tokenRateCacheDurations))\n ComposableStablePoolStorage(\n StorageParams(_insertSorted(tokens, IERC20(this)), tokenRateProviders, exemptFromYieldProtocolFeeFlags)\n )\n BasePool(\n vault,\n IVault.PoolSpecialization.GENERAL,\n \"MockStablePoolStorage\",\n \"MOCK_BPT\",\n _insertSorted(tokens, IERC20(this)),\n new address[](tokens.length + 1),\n 1e12, // BasePool._MIN_SWAP_FEE_PERCENTAGE\n 0,\n 0,\n owner\n )\n {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function cacheTokenRatesIfNecessary() external {\n _cacheTokenRatesIfNecessary();\n }\n\n function cacheTokenRateIfNecessary(IERC20 token) external {\n _cacheTokenRateIfNecessary(_getTokenIndex(token));\n }\n\n function updateOldRates() external {\n _updateOldRates();\n }\n\n function getAdjustedBalances(uint256[] memory balances, bool ignoreExemptFlags)\n external\n view\n returns (uint256[] memory)\n {\n return _getAdjustedBalances(balances, ignoreExemptFlags);\n }\n\n function _onInitializePool(\n bytes32,\n address,\n address,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n\n function _onJoinPool(\n bytes32,\n address,\n address,\n uint256[] memory,\n uint256,\n uint256,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n\n function _onExitPool(\n bytes32,\n address,\n address,\n uint256[] memory,\n uint256,\n uint256,\n uint256[] memory,\n bytes memory\n ) internal pure override returns (uint256, uint256[] memory) {\n revert(\"NOT_IMPLEMENTED\");\n }\n}\n" + }, + "contracts/ComposableStablePoolFactory.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\";\nimport \"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\";\n\nimport \"@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol\";\nimport \"@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol\";\n\nimport \"./ComposableStablePool.sol\";\n\ncontract ComposableStablePoolFactory is IVersion, IPoolVersion, BasePoolFactory, FactoryWidePauseWindow {\n string private _version;\n string private _poolVersion;\n\n constructor(\n IVault vault,\n IProtocolFeePercentagesProvider protocolFeeProvider,\n string memory factoryVersion,\n string memory poolVersion\n ) BasePoolFactory(vault, protocolFeeProvider, type(ComposableStablePool).creationCode) {\n _version = factoryVersion;\n _poolVersion = poolVersion;\n }\n\n function version() external view override returns (string memory) {\n return _version;\n }\n\n function getPoolVersion() public view override returns (string memory) {\n return _poolVersion;\n }\n\n /**\n * @dev Deploys a new `ComposableStablePool`.\n */\n function create(\n string memory name,\n string memory symbol,\n IERC20[] memory tokens,\n uint256 amplificationParameter,\n IRateProvider[] memory rateProviders,\n uint256[] memory tokenRateCacheDurations,\n bool[] memory exemptFromYieldProtocolFeeFlags,\n uint256 swapFeePercentage,\n address owner\n ) external returns (ComposableStablePool) {\n (uint256 pauseWindowDuration, uint256 bufferPeriodDuration) = getPauseConfiguration();\n return\n ComposableStablePool(\n _create(\n abi.encode(\n ComposableStablePool.NewPoolParams({\n vault: getVault(),\n protocolFeeProvider: getProtocolFeePercentagesProvider(),\n name: name,\n symbol: symbol,\n tokens: tokens,\n rateProviders: rateProviders,\n tokenRateCacheDurations: tokenRateCacheDurations,\n exemptFromYieldProtocolFeeFlags: exemptFromYieldProtocolFeeFlags,\n amplificationParameter: amplificationParameter,\n swapFeePercentage: swapFeePercentage,\n pauseWindowDuration: pauseWindowDuration,\n bufferPeriodDuration: bufferPeriodDuration,\n owner: owner,\n version: getPoolVersion()\n })\n )\n )\n );\n }\n}\n" + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity >=0.7.0 <0.9.0;\n\n/**\n * @notice Simple interface to retrieve the version of pools deployed by a pool factory.\n */\ninterface IPoolVersion {\n /**\n * @dev Returns a JSON representation of the deployed pool version containing name, version number and task ID.\n *\n * This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about\n * each other. Note that this value will only be updated at factory creation time.\n */\n function getPoolVersion() external view returns (string memory);\n}\n" + }, + "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol": { + "content": "// SPDX-License-Identifier: GPL-3.0-or-later\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n\n// You should have received a copy of the GNU General Public License\n// along with this program. If not, see .\n\npragma solidity ^0.7.0;\npragma experimental ABIEncoderV2;\n\n/**\n * @dev Utility to create Pool factories for Pools that use the `TemporarilyPausable` contract.\n *\n * By calling `TemporarilyPausable`'s constructor with the result of `getPauseConfiguration`, all Pools created by this\n * factory will share the same Pause Window end time, after which both old and new Pools will not be pausable.\n */\ncontract FactoryWidePauseWindow {\n // This contract relies on timestamps in a similar way as `TemporarilyPausable` does - the same caveats apply.\n // solhint-disable not-rely-on-time\n\n uint256 private constant _INITIAL_PAUSE_WINDOW_DURATION = 90 days;\n uint256 private constant _BUFFER_PERIOD_DURATION = 30 days;\n\n // Time when the pause window for all created Pools expires, and the pause window duration of new Pools becomes\n // zero.\n uint256 private immutable _poolsPauseWindowEndTime;\n\n constructor() {\n _poolsPauseWindowEndTime = block.timestamp + _INITIAL_PAUSE_WINDOW_DURATION;\n }\n\n /**\n * @dev Returns the current `TemporarilyPausable` configuration that will be applied to Pools created by this\n * factory.\n *\n * `pauseWindowDuration` will decrease over time until it reaches zero, at which point both it and\n * `bufferPeriodDuration` will be zero forever, meaning deployed Pools will not be pausable.\n */\n function getPauseConfiguration() public view returns (uint256 pauseWindowDuration, uint256 bufferPeriodDuration) {\n uint256 currentTime = block.timestamp;\n if (currentTime < _poolsPauseWindowEndTime) {\n // The buffer period is always the same since its duration is related to how much time is needed to respond\n // to a potential emergency. The Pause Window duration however decreases as the end time approaches.\n\n pauseWindowDuration = _poolsPauseWindowEndTime - currentTime; // No need for checked arithmetic.\n bufferPeriodDuration = _BUFFER_PERIOD_DURATION;\n } else {\n // After the end time, newly created Pools have no Pause Window, nor Buffer Period (since they are not\n // pausable in the first place).\n\n pauseWindowDuration = 0;\n bufferPeriodDuration = 0;\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 9999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "output": { + "contracts": { + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol": { + "IAuthorizerAdaptor": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "performAction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getVault()": "8d928af8", + "performAction(address,bytes)": "4036176a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"performAction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"performAction(address,bytes)\":{\"params\":{\"data\":\"- Calldata to be sent to the target contract\",\"target\":\"- Address of the contract to be called\"},\"returns\":{\"_0\":\"The bytes encoded return value from the performed function call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"},\"performAction(address,bytes)\":{\"notice\":\"Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":\"IAuthorizerAdaptor\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol": { + "StablePoolUserData": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202483499ac996de98608a7facacae45f736f1de00f528e95ab3024a28e21f35fa64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP4 0x49 SWAP11 0xC9 SWAP7 0xDE SWAP9 PUSH1 0x8A PUSH32 0xACACAE45F736F1DE00F528E95AB3024A28E21F35FA64736F6C63430007010033 ", + "sourceMap": "713:2017:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202483499ac996de98608a7facacae45f736f1de00f528e95ab3024a28e21f35fa64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x24 DUP4 0x49 SWAP11 0xC9 SWAP7 0xDE SWAP9 PUSH1 0x8A PUSH32 0xACACAE45F736F1DE00F528E95AB3024A28E21F35FA64736F6C63430007010033 ", + "sourceMap": "713:2017:1:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol\":\"StablePoolUserData\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol\":{\"keccak256\":\"0x809d1ab36b1c4190aeffd3bad9c8a54880a9524c679e770ef185323dafaf6833\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a7d7e901eafecae0f4a8829bbb952cda0928f55290d368ab1370c92284d1469\",\"dweb:/ipfs/QmWDpNu8sZEwK3nmetwoaXrASta5RWqGZb7Z4TqHnMu7a1\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol": { + "BasePoolUserData": { + "abi": [ + { + "inputs": [], + "name": "RECOVERY_MODE_EXIT_KIND", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608f610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c806309564cb1146038575b600080fd5b603e6054565b6040805160ff9092168252519081900360200190f35b60ff8156fea26469706673582212201759ea0ca298dbb5e50d07d373f4a738519e02ddecb3bc809c14e96706ab574a64736f6c63430007010033", + "opcodes": "PUSH1 0x8F PUSH2 0x24 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x17 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9564CB1 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3E PUSH1 0x54 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0xFF DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR MSIZE 0xEA 0xC LOG2 SWAP9 0xDB 0xB5 0xE5 0xD SMOD 0xD3 PUSH20 0xF4A738519E02DDECB3BC809C14E96706AB574A64 PUSH20 0x6F6C634300070100330000000000000000000000 ", + "sourceMap": "713:811:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "730000000000000000000000000000000000000000301460806040526004361060335760003560e01c806309564cb1146038575b600080fd5b603e6054565b6040805160ff9092168252519081900360200190f35b60ff8156fea26469706673582212201759ea0ca298dbb5e50d07d373f4a738519e02ddecb3bc809c14e96706ab574a64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x33 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x9564CB1 EQ PUSH1 0x38 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x3E PUSH1 0x54 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0xFF DUP2 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 OR MSIZE 0xEA 0xC LOG2 SWAP9 0xDB 0xB5 0xE5 0xD SMOD 0xD3 PUSH20 0xF4A738519E02DDECB3BC809C14E96706AB574A64 PUSH20 0x6F6C634300070100330000000000000000000000 ", + "sourceMap": "713:811:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;955:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;1003:3;955:51;:::o" + }, + "methodIdentifiers": { + "RECOVERY_MODE_EXIT_KIND()": "09564cb1" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"RECOVERY_MODE_EXIT_KIND\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":\"BasePoolUserData\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol": { + "IAssetManager": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "Rebalance", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "capitalOut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "getAUM", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "getPoolBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "poolCash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolManaged", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "maxInvestableBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "force", + "type": "bool" + } + ], + "name": "rebalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "config", + "type": "bytes" + } + ], + "name": "setConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "managed", + "type": "uint256" + } + ], + "name": "shouldRebalance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "updateBalanceOfPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "capitalOut(bytes32,uint256)": "2b13a509", + "getAUM(bytes32)": "dc99fc21", + "getPoolBalances(bytes32)": "76bad529", + "getToken()": "21df0da7", + "maxInvestableBalance(bytes32)": "ea748923", + "rebalance(bytes32,bool)": "4c936d8a", + "setConfig(bytes32,bytes)": "18e736d4", + "shouldRebalance(uint256,uint256)": "9c64ad30", + "updateBalanceOfPool(bytes32)": "0b5ff6b9" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"Rebalance\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"capitalOut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getAUM\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getPoolBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolManaged\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"maxInvestableBalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"force\",\"type\":\"bool\"}],\"name\":\"rebalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"managed\",\"type\":\"uint256\"}],\"name\":\"shouldRebalance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"updateBalanceOfPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"capitalOut(bytes32,uint256)\":{\"params\":{\"amount\":\"- the amount of tokens to withdraw back to the pool\",\"poolId\":\"- the poolId of the pool to withdraw funds back to\"}},\"getAUM(bytes32)\":{\"returns\":{\"_0\":\"the current assets under management of this asset manager\"}},\"getPoolBalances(bytes32)\":{\"returns\":{\"poolCash\":\"- The up-to-date cash balance of the pool\",\"poolManaged\":\"- The up-to-date managed balance of the pool\"}},\"maxInvestableBalance(bytes32)\":{\"returns\":{\"_0\":\"The difference in tokens between the target investment and the currently invested amount (i.e. the amount that can be invested)\"}},\"rebalance(bytes32,bool)\":{\"params\":{\"force\":\"- a boolean representing whether a rebalance should be forced even when the pool is near balance\",\"poolId\":\"- the poolId of the pool to be rebalanced\"}}},\"version\":1},\"userdoc\":{\"events\":{\"Rebalance(bytes32)\":{\"notice\":\"Emitted when asset manager is rebalanced\"}},\"kind\":\"user\",\"methods\":{\"capitalOut(bytes32,uint256)\":{\"notice\":\"allows an authorized rebalancer to remove capital to facilitate large withdrawals\"},\"getToken()\":{\"notice\":\"Returns the asset manager's token\"},\"rebalance(bytes32,bool)\":{\"notice\":\"Rebalances funds between the pool and the asset manager to maintain target investment percentage.\"},\"setConfig(bytes32,bytes)\":{\"notice\":\"Sets the config\"},\"shouldRebalance(uint256,uint256)\":{\"notice\":\"Determines whether the pool should rebalance given the provided balances\"},\"updateBalanceOfPool(bytes32)\":{\"notice\":\"Updates the Vault on the value of the pool's investment returns\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":\"IAssetManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol": { + "IBasePoolFactory": { + "abi": [ + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "disable()": "2f2770db", + "getActionId(bytes4)": "851c1bb3", + "isDisabled()": "6c57f5a9", + "isPoolFromFactory(address)": "6634b753" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Disable the factory, preventing the creation of more pools. Already existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"isDisabled()\":{\"details\":\"Check whether the derived factory has been disabled.\"},\"isPoolFromFactory(address)\":{\"details\":\"Returns true if `pool` was created by this factory.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol\":{\"keccak256\":\"0xf5cf4f466955514781a7a7c571b905ed20168ea5b352963bcf5dd2d8fd4fd0e9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5e0c9405a058b809ceee4d89187c67926f20e2ec5cf9f5b77d14226780674b27\",\"dweb:/ipfs/QmXCbDCthmF34C7bzHMS15x8jV7kBXgmGe2Xwoop1b9NQ4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol": { + "IControlledPool": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":\"IControlledPool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol": { + "IPoolVersion": { + "abi": [ + { + "inputs": [], + "name": "getPoolVersion", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getPoolVersion()": "3f819b6f" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPoolVersion()\":{\"details\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID. This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be updated at factory creation time.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Simple interface to retrieve the version of pools deployed by a pool factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol\":\"IPoolVersion\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol\":{\"keccak256\":\"0xa4d02a91c12fb22b14ef4180dfc3909f8de5d0fc0fdbffd437dc5b5bba9b3920\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b830017902f0da9ba73219585e18d31ca226af95900724961090be9bc3627d0a\",\"dweb:/ipfs/QmUTon5DFuK81ghM1baGD1Tq8izYM5iPzvVqkmRNuESWdF\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol": { + "IRateProvider": { + "abi": [ + { + "inputs": [], + "name": "getRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getRate()": "679aefce" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"Returns an 18 decimal fixed point number that is the exchange rate of the token to some other underlying token. The meaning of this rate depends on the context.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol": { + "IRecoveryMode": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "inRecoveryMode()": "b35056b8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the RecoveryMode module.\",\"events\":{\"RecoveryModeStateChanged(bool)\":{\"details\":\"Emitted when the Recovery Mode status changes.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disables Recovery Mode in the Pool, restoring protocol fee collection and disallowing proportional exits.\"},\"enableRecoveryMode()\":{\"notice\":\"Enables Recovery Mode in the Pool, disabling protocol fee collection and allowing for safe proportional exits with low computational complexity and no dependencies.\"},\"inRecoveryMode()\":{\"notice\":\"Returns true if the Pool is in Recovery Mode.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":\"IRecoveryMode\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol": { + "IVersion": { + "abi": [ + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "version()": "54fd4d50" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"Returns a JSON representation of the contract version containing name, version number and task ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\":{\"keccak256\":\"0x19103ec3d00cbdbe25ef95721ba669cfcfaf046a60447a1b49986026e61fc57c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6765d86f532928df96af43990b5bccd20a0d2965707cb5e9d5afda9580be3fe4\",\"dweb:/ipfs/QmZmhVpWcGpFk9u4iy4srKs248c9FdAzjjmdMATexpqa6j\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol": { + "Errors": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ca965609751c2043f614aa3a01f92449c0f01c84aa82828b806b8df7147372f064736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCA SWAP7 JUMP MULMOD PUSH22 0x1C2043F614AA3A01F92449C0F01C84AA82828B806B8D 0xF7 EQ PUSH20 0x72F064736F6C6343000701003300000000000000 ", + "sourceMap": "5050:9524:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ca965609751c2043f614aa3a01f92449c0f01c84aa82828b806b8df7147372f064736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xCA SWAP7 JUMP MULMOD PUSH22 0x1C2043F614AA3A01F92449C0F01C84AA82828B806B8D 0xF7 EQ PUSH20 0x72F064736F6C6343000701003300000000000000 ", + "sourceMap": "5050:9524:10:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":\"Errors\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "IAuthentication": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol": { + "ISignaturesValidator": { + "abi": [ + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the SignatureValidator helper, used to support meta-transactions.\",\"kind\":\"dev\",\"methods\":{\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getNextNonce(address)\":{\"details\":\"Returns the next nonce used by an address to sign messages.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":\"ISignaturesValidator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol": { + "ITemporarilyPausable": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getPausedState()": "1c0de051" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the TemporarilyPausable helper.\",\"events\":{\"PausedStateChanged(bool)\":{\"details\":\"Emitted every time the pause state changes by `_setPaused`.\"}},\"kind\":\"dev\",\"methods\":{\"getPausedState()\":{\"details\":\"Returns the current paused state.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":\"ITemporarilyPausable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol": { + "IWETH": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "deposit()": "d0e30db0", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "withdraw(uint256)": "2e1a7d4d" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for WETH9. See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol": { + "IERC20": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the amount of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the amount of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol": { + "IERC20Permit": { + "abi": [ + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over `owner`'s tokens, given `owner`'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol": { + "IProtocolFeePercentagesProvider": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "percentage", + "type": "uint256" + } + ], + "name": "ProtocolFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "maximumPercentage", + "type": "uint256" + } + ], + "name": "ProtocolFeeTypeRegistered", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getFeeTypeMaximumPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getFeeTypeName", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getFeeTypePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "isValidFeeType", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "isValidFeeTypePercentage", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "uint256", + "name": "maximumValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialValue", + "type": "uint256" + } + ], + "name": "registerFeeType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "setFeeTypePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getFeeTypeMaximumPercentage(uint256)": "5e2cae4c", + "getFeeTypeName(uint256)": "b661eda1", + "getFeeTypePercentage(uint256)": "1a7c3263", + "isValidFeeType(uint256)": "868897a0", + "isValidFeeTypePercentage(uint256,uint256)": "74735e0b", + "registerFeeType(uint256,string,uint256,uint256)": "7268d6ce", + "setFeeTypePercentage(uint256,uint256)": "4d44f0e9" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"percentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maximumPercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeeTypeRegistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getFeeTypeMaximumPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getFeeTypeName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getFeeTypePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"isValidFeeType\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"isValidFeeTypePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"maximumValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialValue\",\"type\":\"uint256\"}],\"name\":\"registerFeeType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"setFeeTypePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Source of truth for all Protocol Fee percentages, that is, how much the protocol charges certain actions. Some of these values may also be retrievable from other places (such as the swap fee percentage), but this is the preferred source nonetheless.\",\"kind\":\"dev\",\"methods\":{\"getFeeTypeMaximumPercentage(uint256)\":{\"details\":\"Returns `feeType`'s maximum value.\"},\"getFeeTypeName(uint256)\":{\"details\":\"Returns `feeType`'s name.\"},\"getFeeTypePercentage(uint256)\":{\"details\":\"Returns the current percentage value for `feeType`. This is the preferred mechanism for querying these - whenever possible, use this fucntion instead of e.g. querying the ProtocolFeesCollector.\"},\"isValidFeeType(uint256)\":{\"details\":\"Returns true if `feeType` has been registered and can be queried.\"},\"isValidFeeTypePercentage(uint256,uint256)\":{\"details\":\"Returns true if `value` is a valid percentage value for `feeType`.\"},\"registerFeeType(uint256,string,uint256,uint256)\":{\"details\":\"Registers a new fee type in the system, making it queryable via `getFeeTypePercentage` and `getFeeTypeName`, as well as configurable via `setFeeTypePercentage`. `feeType` can be any arbitrary value (that is not in use). It is not possible to de-register fee types, nor change their name or maximum value.\"},\"setFeeTypePercentage(uint256,uint256)\":{\"details\":\"Sets the percentage value for `feeType` to `newValue`. IMPORTANT: it is possible for a third party to modify the SWAP and FLASH_LOAN fee type values directly in the ProtocolFeesCollector, without invoking this function. This will result in the `ProtocolFeePercentageChanged` event not being emitted despite their value changing. Such usage of the ProtocolFeesCollector is however discouraged: only this contract should be granted permission to call `setSwapFeePercentage` and `setFlashLoanFeePercentage`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":\"IProtocolFeePercentagesProvider\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]}},\"version\":1}" + }, + "ProtocolFeeType": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203a11cd6d43ae6e07e2db8f8a91d8b47a54fb787ca756877f50d58690057cc1f064736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASPRICE GT 0xCD PUSH14 0x43AE6E07E2DB8F8A91D8B47A54FB PUSH25 0x7CA756877F50D58690057CC1F064736F6C6343000701003300 ", + "sourceMap": "3992:551:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203a11cd6d43ae6e07e2db8f8a91d8b47a54fb787ca756877f50d58690057cc1f064736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASPRICE GT 0xCD PUSH14 0x43AE6E07E2DB8F8A91D8B47A54FB PUSH25 0x7CA756877F50D58690057CC1F064736F6C6343000701003300 ", + "sourceMap": "3992:551:17:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":\"ProtocolFeeType\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol": { + "IAsset": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like types. This concept is unrelated to a Pool's Asset Managers.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":\"IAsset\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol": { + "IAuthorizer": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "actionId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "where", + "type": "address" + } + ], + "name": "canPerform", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "canPerform(bytes32,address,address)": "9be2a884" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"details\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol": { + "IBasePool": { + "abi": [ + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "dueProtocolFeeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "dueProtocolFeeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getPoolId()": "38fff2d0", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"dueProtocolFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"dueProtocolFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for adding and removing liquidity that all Pool contracts should implement. Note that this is not the complete Pool contract interface, as it is missing the swap hooks. Pool contracts should also inherit from either IGeneralPool or IMinimalSwapInfoPool\",\"kind\":\"dev\",\"methods\":{\"getPoolId()\":{\"details\":\"Returns this Pool's ID, used when interacting with the Vault (to e.g. join the Pool or swap with it).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"Returns the current swap fee percentage as a 18 decimal fixed point number, so e.g. 1e17 corresponds to a 10% swap fee.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Called by the Vault when a user calls `IVault.exitPool` to remove liquidity from this Pool. Returns how many tokens the Vault should deduct from the Pool's balances, as well as the amount of protocol fees the Pool owes to the Vault. The Vault will then take tokens from the Pool's balances and send them to `recipient`, as well as collect the reported amount in protocol fees, which the Pool should calculate based on `protocolSwapFeePercentage`. Protocol fees are charged on exit events to guarantee that users exiting the Pool have paid their share. `sender` is the account performing the exit (typically the pool shareholder), and `recipient` is the account to which the Vault will send the proceeds. `balances` contains the total token balances for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return. `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total balance. `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of exit (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.) Contracts implementing this function should check that the caller is indeed the Vault before performing any state-changing operations, such as burning pool shares.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Called by the Vault when a user calls `IVault.joinPool` to add liquidity to this Pool. Returns how many of each registered token the user should provide, as well as the amount of protocol fees the Pool owes to the Vault. The Vault will then take tokens from `sender` and add them to the Pool's balances, as well as collect the reported amount in protocol fees, which the pool should calculate based on `protocolSwapFeePercentage`. Protocol fees are reported and charged on join events so that the Pool is free of debt whenever new users join. `sender` is the account performing the join (from which tokens will be withdrawn), and `recipient` is the account designated to receive any benefits (typically pool shares). `balances` contains the total balances for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return. `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total balance. `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of join (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.) Contracts implementing this function should check that the caller is indeed the Vault before performing any state-changing operations, such as minting pool shares.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":\"IBasePool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol": { + "IFlashLoanRecipient": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "feeAmounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "receiveFlashLoan", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "receiveFlashLoan(address[],uint256[],uint256[],bytes)": "f04f2707" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"receiveFlashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"receiveFlashLoan(address[],uint256[],uint256[],bytes)\":{\"details\":\"When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient. At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the Vault, or else the entire flash loan will revert. `userData` is the same value passed in the `IVault.flashLoan` call.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":\"IFlashLoanRecipient\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol": { + "IGeneralPool": { + "abi": [ + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "dueProtocolFeeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "dueProtocolFeeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IPoolSwapStructs.SwapRequest", + "name": "swapRequest", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + } + ], + "name": "onSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getPoolId()": "38fff2d0", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": "01ec954a", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"dueProtocolFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"dueProtocolFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IPoolSwapStructs.SwapRequest\",\"name\":\"swapRequest\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"IPools with the General specialization setting should implement this interface. This is called by the Vault when a user calls `IVault.swap` or `IVault.batchSwap` to swap with this Pool. Returns the number of tokens the Pool will grant to the user in a 'given in' swap, or that the user will grant to the pool in a 'given out' swap. This can often be implemented by a `view` function, since many pricing algorithms don't need to track state changes in swaps. However, contracts implementing this in non-view functions should check that the caller is indeed the Vault.\",\"kind\":\"dev\",\"methods\":{\"getPoolId()\":{\"details\":\"Returns this Pool's ID, used when interacting with the Vault (to e.g. join the Pool or swap with it).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"Returns the current swap fee percentage as a 18 decimal fixed point number, so e.g. 1e17 corresponds to a 10% swap fee.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Called by the Vault when a user calls `IVault.exitPool` to remove liquidity from this Pool. Returns how many tokens the Vault should deduct from the Pool's balances, as well as the amount of protocol fees the Pool owes to the Vault. The Vault will then take tokens from the Pool's balances and send them to `recipient`, as well as collect the reported amount in protocol fees, which the Pool should calculate based on `protocolSwapFeePercentage`. Protocol fees are charged on exit events to guarantee that users exiting the Pool have paid their share. `sender` is the account performing the exit (typically the pool shareholder), and `recipient` is the account to which the Vault will send the proceeds. `balances` contains the total token balances for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return. `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total balance. `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of exit (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.) Contracts implementing this function should check that the caller is indeed the Vault before performing any state-changing operations, such as burning pool shares.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Called by the Vault when a user calls `IVault.joinPool` to add liquidity to this Pool. Returns how many of each registered token the user should provide, as well as the amount of protocol fees the Pool owes to the Vault. The Vault will then take tokens from `sender` and add them to the Pool's balances, as well as collect the reported amount in protocol fees, which the pool should calculate based on `protocolSwapFeePercentage`. Protocol fees are reported and charged on join events so that the Pool is free of debt whenever new users join. `sender` is the account performing the join (from which tokens will be withdrawn), and `recipient` is the account designated to receive any benefits (typically pool shares). `balances` contains the total balances for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return. `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total balance. `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of join (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.) Contracts implementing this function should check that the caller is indeed the Vault before performing any state-changing operations, such as minting pool shares.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\":\"IGeneralPool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\":{\"keccak256\":\"0x7f11733a5cd8f81c123c02f79d94ead7b65217021ebddafda10e796a25e1ef41\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7333060b9ff67e1fe734903d45b0c69ff8308b744f7c2fb8fbf630ae9d589bd6\",\"dweb:/ipfs/Qmf4rZHqsjfKDk5cSp38fv24SS8bAYJxYYQzn63TV6aPCo\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol": { + "IPoolSwapStructs": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":\"IPoolSwapStructs\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol": { + "IProtocolFeesCollector": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newFlashLoanFeePercentage", + "type": "uint256" + } + ], + "name": "FlashLoanFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getCollectedFeeAmounts", + "outputs": [ + { + "internalType": "uint256[]", + "name": "feeAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFlashLoanFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newFlashLoanFeePercentage", + "type": "uint256" + } + ], + "name": "setFlashLoanFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newSwapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "withdrawCollectedFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getAuthorizer()": "aaabadc5", + "getCollectedFeeAmounts(address[])": "e42abf35", + "getFlashLoanFeePercentage()": "d877845c", + "getSwapFeePercentage()": "55c67628", + "setFlashLoanFeePercentage(uint256)": "6b6b9f69", + "setSwapFeePercentage(uint256)": "38e9922e", + "vault()": "fbfa77cf", + "withdrawCollectedFees(address[],uint256[],address)": "6daefab6" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFlashLoanFeePercentage\",\"type\":\"uint256\"}],\"name\":\"FlashLoanFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getCollectedFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFlashLoanFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newFlashLoanFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setFlashLoanFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawCollectedFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":\"IProtocolFeesCollector\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol": { + "IVault": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "AuthorizerChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "ExternalBalanceTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract IFlashLoanRecipient", + "name": "recipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "feeAmount", + "type": "uint256" + } + ], + "name": "FlashLoan", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "delta", + "type": "int256" + } + ], + "name": "InternalBalanceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "int256[]", + "name": "deltas", + "type": "int256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "protocolFeeAmounts", + "type": "uint256[]" + } + ], + "name": "PoolBalanceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "assetManager", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "cashDelta", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "managedDelta", + "type": "int256" + } + ], + "name": "PoolBalanceManaged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum IVault.PoolSpecialization", + "name": "specialization", + "type": "uint8" + } + ], + "name": "PoolRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "RelayerApprovalChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "name": "Swap", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "TokensDeregistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "assetManagers", + "type": "address[]" + } + ], + "name": "TokensRegistered", + "type": "event" + }, + { + "inputs": [], + "name": "WETH", + "outputs": [ + { + "internalType": "contract IWETH", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "assetInIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "assetOutIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IVault.BatchSwapStep[]", + "name": "swaps", + "type": "tuple[]" + }, + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.FundManagement", + "name": "funds", + "type": "tuple" + }, + { + "internalType": "int256[]", + "name": "limits", + "type": "int256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "batchSwap", + "outputs": [ + { + "internalType": "int256[]", + "name": "", + "type": "int256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "deregisterTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "minAmountsOut", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.ExitPoolRequest", + "name": "request", + "type": "tuple" + } + ], + "name": "exitPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFlashLoanRecipient", + "name": "recipient", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "flashLoan", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "getInternalBalance", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "enum IVault.PoolSpecialization", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getPoolTokenInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "managed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetManager", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + } + ], + "name": "getPoolTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "relayer", + "type": "address" + } + ], + "name": "hasApprovedRelayer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "components": [ + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "maxAmountsIn", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.JoinPoolRequest", + "name": "request", + "type": "tuple" + } + ], + "name": "joinPool", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.PoolBalanceOpKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct IVault.PoolBalanceOp[]", + "name": "ops", + "type": "tuple[]" + } + ], + "name": "managePoolBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.UserBalanceOpKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IAsset", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "internalType": "struct IVault.UserBalanceOp[]", + "name": "ops", + "type": "tuple[]" + } + ], + "name": "manageUserBalance", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "assetInIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "assetOutIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IVault.BatchSwapStep[]", + "name": "swaps", + "type": "tuple[]" + }, + { + "internalType": "contract IAsset[]", + "name": "assets", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.FundManagement", + "name": "funds", + "type": "tuple" + } + ], + "name": "queryBatchSwap", + "outputs": [ + { + "internalType": "int256[]", + "name": "assetDeltas", + "type": "int256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IVault.PoolSpecialization", + "name": "specialization", + "type": "uint8" + } + ], + "name": "registerPool", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "assetManagers", + "type": "address[]" + } + ], + "name": "registerTokens", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IAuthorizer", + "name": "newAuthorizer", + "type": "address" + } + ], + "name": "setAuthorizer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "setPaused", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setRelayerApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IAsset", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "contract IAsset", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IVault.SingleSwap", + "name": "singleSwap", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bool", + "name": "fromInternalBalance", + "type": "bool" + }, + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + }, + { + "internalType": "bool", + "name": "toInternalBalance", + "type": "bool" + } + ], + "internalType": "struct IVault.FundManagement", + "name": "funds", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "WETH()": "ad5c4648", + "batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256)": "945bcec9", + "deregisterTokens(bytes32,address[])": "7d3aeb96", + "exitPool(bytes32,address,address,(address[],uint256[],bytes,bool))": "8bdb3913", + "flashLoan(address,address[],uint256[],bytes)": "5c38449e", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getDomainSeparator()": "ed24911d", + "getInternalBalance(address,address[])": "0f5a6efa", + "getNextNonce(address)": "90193b7c", + "getPausedState()": "1c0de051", + "getPool(bytes32)": "f6c00927", + "getPoolTokenInfo(bytes32,address)": "b05f8e48", + "getPoolTokens(bytes32)": "f94d4668", + "getProtocolFeesCollector()": "d2946c2b", + "hasApprovedRelayer(address,address)": "fec90d72", + "joinPool(bytes32,address,address,(address[],uint256[],bytes,bool))": "b95cac28", + "managePoolBalance((uint8,bytes32,address,uint256)[])": "e6c46092", + "manageUserBalance((uint8,address,uint256,address,address)[])": "0e8e3e84", + "queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool))": "f84d066e", + "registerPool(uint8)": "09b2760f", + "registerTokens(bytes32,address[],address[])": "66a9c7d2", + "setAuthorizer(address)": "058a628f", + "setPaused(bool)": "16c38b3c", + "setRelayerApproval(address,address,bool)": "fa6e671d", + "swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256)": "52bbbe29" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ExternalBalanceTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IFlashLoanRecipient\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"feeAmount\",\"type\":\"uint256\"}],\"name\":\"FlashLoan\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"InternalBalanceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"deltas\",\"type\":\"int256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"protocolFeeAmounts\",\"type\":\"uint256[]\"}],\"name\":\"PoolBalanceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assetManager\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"cashDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"managedDelta\",\"type\":\"int256\"}],\"name\":\"PoolBalanceManaged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum IVault.PoolSpecialization\",\"name\":\"specialization\",\"type\":\"uint8\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"RelayerApprovalChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"TokensDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"assetManagers\",\"type\":\"address[]\"}],\"name\":\"TokensRegistered\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"assetInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"assetOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IVault.BatchSwapStep[]\",\"name\":\"swaps\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.FundManagement\",\"name\":\"funds\",\"type\":\"tuple\"},{\"internalType\":\"int256[]\",\"name\":\"limits\",\"type\":\"int256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"batchSwap\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"deregisterTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.ExitPoolRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"exitPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFlashLoanRecipient\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"flashLoan\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getInternalBalance\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum IVault.PoolSpecialization\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"managed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"hasApprovedRelayer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.JoinPoolRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"joinPool\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.PoolBalanceOpKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IVault.PoolBalanceOp[]\",\"name\":\"ops\",\"type\":\"tuple[]\"}],\"name\":\"managePoolBalance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.UserBalanceOpKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IAsset\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"}],\"internalType\":\"struct IVault.UserBalanceOp[]\",\"name\":\"ops\",\"type\":\"tuple[]\"}],\"name\":\"manageUserBalance\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"assetInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"assetOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IVault.BatchSwapStep[]\",\"name\":\"swaps\",\"type\":\"tuple[]\"},{\"internalType\":\"contract IAsset[]\",\"name\":\"assets\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.FundManagement\",\"name\":\"funds\",\"type\":\"tuple\"}],\"name\":\"queryBatchSwap\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"assetDeltas\",\"type\":\"int256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum IVault.PoolSpecialization\",\"name\":\"specialization\",\"type\":\"uint8\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"assetManagers\",\"type\":\"address[]\"}],\"name\":\"registerTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setRelayerApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IAsset\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"contract IAsset\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IVault.SingleSwap\",\"name\":\"singleSwap\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"fromInternalBalance\",\"type\":\"bool\"},{\"internalType\":\"address payable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"toInternalBalance\",\"type\":\"bool\"}],\"internalType\":\"struct IVault.FundManagement\",\"name\":\"funds\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Full external interface for the Vault core contract - no external or public methods exist in the contract that don't override one of these declarations.\",\"events\":{\"AuthorizerChanged(address)\":{\"details\":\"Emitted when a new authorizer is set by `setAuthorizer`.\"},\"ExternalBalanceTransfer(address,address,address,uint256)\":{\"details\":\"Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account.\"},\"FlashLoan(address,address,uint256,uint256)\":{\"details\":\"Emitted for each individual flash loan performed by `flashLoan`.\"},\"InternalBalanceChanged(address,address,int256)\":{\"details\":\"Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through interacting with Pools using Internal Balance. Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH address.\"},\"PoolBalanceChanged(bytes32,address,address[],int256[],uint256[])\":{\"details\":\"Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively.\"},\"PoolBalanceManaged(bytes32,address,address,int256,int256)\":{\"details\":\"Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`.\"},\"PoolRegistered(bytes32,address,uint8)\":{\"details\":\"Emitted when a Pool is registered by calling `registerPool`.\"},\"RelayerApprovalChanged(address,address,bool)\":{\"details\":\"Emitted every time a relayer is approved or disapproved by `setRelayerApproval`.\"},\"Swap(bytes32,address,address,uint256,uint256)\":{\"details\":\"Emitted for each individual swap performed by `swap` or `batchSwap`.\"},\"TokensDeregistered(bytes32,address[])\":{\"details\":\"Emitted when a Pool deregisters tokens by calling `deregisterTokens`.\"},\"TokensRegistered(bytes32,address[],address[])\":{\"details\":\"Emitted when a Pool registers tokens by calling `registerTokens`.\"}},\"kind\":\"dev\",\"methods\":{\"WETH()\":{\"details\":\"Returns the Vault's WETH instance.\"},\"batchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool),int256[],uint256)\":{\"details\":\"Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either the amount of tokens sent to or received from the Pool, depending on the `kind` value. Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at the same index in the `assets` array. Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or `amountOut` depending on the swap kind. Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`. The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses, or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to or unwrapped from WETH by the Vault. Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies the minimum or maximum amount of each token the vault is allowed to transfer. `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the equivalent `swap` call. Emits `Swap` events.\"},\"deregisterTokens(bytes32,address[])\":{\"details\":\"Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract. Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens must be deregistered in the same `deregisterTokens` call. A deregistered token can be re-registered later on, possibly with a different Asset Manager. Emits a `TokensDeregistered` event.\"},\"exitPool(bytes32,address,address,(address[],uint256[],bytes,bool))\":{\"details\":\"Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see `getPoolTokenInfo`). If the caller is not `sender`, it must be an authorized relayer for them. The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault: it just enforces these minimums. If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit. `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final `assets` array might not be sorted. Pools with no registered tokens cannot be exited. If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise, an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to do so will trigger a revert. `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the `tokens` array. This array must match the Pool's registered tokens. This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement their own custom logic. This typically requires additional information from the user (such as the expected number of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and passed directly to the Pool's contract. Emits a `PoolBalanceChanged` event.\"},\"flashLoan(address,address[],uint256[],bytes)\":{\"details\":\"Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it, and then reverting unless the tokens plus a proportional protocol fee have been returned. The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount for each token contract. `tokens` must be sorted in ascending order. The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the `receiveFlashLoan` call. Emits `FlashLoan` events.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"details\":\"Returns the Vault's Authorizer.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getInternalBalance(address,address[])\":{\"details\":\"Returns `user`'s Internal Balance for a set of tokens.\"},\"getNextNonce(address)\":{\"details\":\"Returns the next nonce used by an address to sign messages.\"},\"getPausedState()\":{\"details\":\"Returns the current paused state.\"},\"getPool(bytes32)\":{\"details\":\"Returns a Pool's contract address and specialization setting.\"},\"getPoolTokenInfo(bytes32,address)\":{\"details\":\"Returns detailed information for a Pool's registered token. `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token` equals the sum of `cash` and `managed`. Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`, `managed` or `total` balance to be greater than 2^112 - 1. `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a change for this purpose, and will update `lastChangeBlock`. `assetManager` is the Pool's token Asset Manager.\"},\"getPoolTokens(bytes32)\":{\"details\":\"Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of the tokens' `balances` changed. The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order. If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same order as passed to `registerTokens`. Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo` instead.\"},\"getProtocolFeesCollector()\":{\"details\":\"Returns the current protocol fee module.\"},\"hasApprovedRelayer(address,address)\":{\"details\":\"Returns true if `user` has approved `relayer` to act as a relayer for them.\"},\"joinPool(bytes32,address,address,(address[],uint256[],bytes,bool))\":{\"details\":\"Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized Pool shares. If the caller is not `sender`, it must be an authorized relayer for them. The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces these maximums. If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent back to the caller (not the sender, which is important for relayers). `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final `assets` array might not be sorted. Pools with no registered tokens cannot be joined. If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be withdrawn from Internal Balance: attempting to do so will trigger a revert. This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement their own custom logic. This typically requires additional information from the user (such as the expected number of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed directly to the Pool's contract, as is `recipient`. Emits a `PoolBalanceChanged` event.\"},\"managePoolBalance((uint8,bytes32,address,uint256)[])\":{\"details\":\"Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates. Pool Balance management features batching, which means a single contract call can be used to perform multiple operations of different kinds, with different Pools and tokens, at once. For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`.\"},\"manageUserBalance((uint8,address,uint256,address,address)[])\":{\"details\":\"Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer) and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as it lets integrators reuse a user's Vault allowance. For each operation, if the caller is not `sender`, it must be an authorized relayer for them.\"},\"queryBatchSwap(uint8,(bytes32,uint256,uint256,uint256,bytes)[],address[],(address,bool,address,bool))\":{\"details\":\"Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result. Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH) the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it receives are the same that an equivalent `batchSwap` call would receive. Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct. This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens, approve them for the Vault, or even know a user's address. Note that this function is not 'view' (due to implementation details): the client code must explicitly execute eth_call instead of eth_sendTransaction.\"},\"registerPool(uint8)\":{\"details\":\"Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be changed. The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`, depending on the chosen specialization setting. This contract is known as the Pool's contract. Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words, multiple Pools may share the same contract. Emits a `PoolRegistered` event.\"},\"registerTokens(bytes32,address[],address[])\":{\"details\":\"Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract. Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens, exit by receiving registered tokens, and can only swap registered tokens. Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in ascending order. The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`, depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore expected to be highly secured smart contracts with sound design principles, and the decision to register an Asset Manager should not be made lightly. Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset Manager is set, it cannot be changed except by deregistering the associated token and registering again with a different Asset Manager. Emits a `TokensRegistered` event.\"},\"setAuthorizer(address)\":{\"details\":\"Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this. Emits an `AuthorizerChanged` event.\"},\"setPaused(bool)\":{\"details\":\"Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an error in some part of the system. The Vault can only be paused during an initial time period, after which pausing is forever disabled. While the contract is paused, the following features are disabled: - depositing and transferring internal balance - transferring external balance (using the Vault's allowance) - swaps - joining Pools - Asset Manager interactions Internal Balance can still be withdrawn, and Pools exited.\"},\"setRelayerApproval(address,address,bool)\":{\"details\":\"Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise. Emits a `RelayerApprovalChanged` event.\"},\"swap((bytes32,uint8,address,address,uint256,bytes),(address,bool,address,bool),uint256,uint256)\":{\"details\":\"Performs a swap with a single Pool. If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens taken from the Pool, which must be greater than or equal to `limit`. If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens sent to the Pool, which must be less than or equal to `limit`. Internal Balance usage and the recipient are determined by the `funds` struct. Emits a `Swap` event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol": { + "BalancerPoolToken": { + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "tokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "tokenSymbol", + "type": "string" + }, + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101006040523480156200001257600080fd5b506040516200120b3803806200120b833981810160405260608110156200003857600080fd5b81019080805160405193929190846401000000008211156200005957600080fd5b9083019060208201858111156200006f57600080fd5b82516401000000008111828201881017156200008a57600080fd5b82525081516020918201929091019080838360005b83811015620000b95781810151838201526020016200009f565b50505050905090810190601f168015620000e75780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010b57600080fd5b9083019060208201858111156200012157600080fd5b82516401000000008111828201881017156200013c57600080fd5b82525081516020918201929091019080838360005b838110156200016b57818101518382015260200162000151565b50505050905090810190601f168015620001995780820380516001836020036101000a031916815260200191505b50604081815260209283015182820190915260018252603160f81b838301528651909450869350839283918791620001d79160039185019062000250565b508051620001ed90600490602084019062000250565b505060058054601260ff19909116179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260601b6001600160601b03191660e05250620002ec9050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200029357805160ff1916838001178555620002c3565b82800160010185558215620002c3579182015b82811115620002c3578251825591602001919060010190620002a6565b50620002d1929150620002d5565b5090565b5b80821115620002d15760008155600101620002d6565b60805160a05160c05160e05160601c610ee6620003256000398061069f525080610ba9525080610beb525080610bca5250610ee66000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80637ecebe00116100b2578063a457c2d711610081578063d505accf11610066578063d505accf146103ea578063dd62ed3e1461044a578063ed24911d146104855761011b565b8063a457c2d714610378578063a9059cbb146103b15761011b565b80637ecebe00146102d95780638d928af81461030c57806390193b7c1461033d57806395d89b41146103705761011b565b8063313ce567116100ee578063313ce567146102475780633644e51514610265578063395093511461026d57806370a08231146102a65761011b565b806306fdde0314610120578063095ea7b31461019d57806318160ddd146101ea57806323b872dd14610204575b600080fd5b61012861048d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016257818101518382015260200161014a565b50505050905090810190601f16801561018f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d6600480360360408110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610541565b604080519115158252519081900360200190f35b6101f2610558565b60408051918252519081900360200190f35b6101d66004803603606081101561021a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561055e565b61024f61060a565b6040805160ff9092168252519081900360200190f35b6101f2610613565b6101d66004803603604081101561028357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610622565b6101f2600480360360208110156102bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661066a565b6101f2600480360360208110156102ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610692565b61031461069d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f26004803603602081101561035357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106c1565b6101286106e9565b6101d66004803603604081101561038e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610768565b6101d6600480360360408110156103c757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107a6565b610448600480360360e081101561040057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356107b3565b005b6101f26004803603604081101561046057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610888565b6101f26108fd565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b600061054e338484610907565b5060015b92915050565b60025490565b60008061056b8533610888565b905061059c3373ffffffffffffffffffffffffffffffffffffffff871614806105945750838210155b61019e610976565b6105a7858585610988565b3373ffffffffffffffffffffffffffffffffffffffff8616148015906105ed57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b156105ff576105ff8533858403610907565b506001949350505050565b60055460ff1690565b600061061d6108fd565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161054e9185906106659086610ab1565b610907565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6000610552826106c1565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105375780601f1061050c57610100808354040283529160200191610537565b6000806107753385610888565b905080831061078f5761078a33856000610907565b61079c565b61079c3385858403610907565b5060019392505050565b600061054e338484610988565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107e28c6106c1565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050610873888261086a878787610aca565b886101f8610b09565b61087e888888610907565b5050505050505050565b600061089261069d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108ec57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610552565b6108f68383610b6d565b9050610552565b600061061d610ba5565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b816109845761098481610c70565b5050565b6109ac73ffffffffffffffffffffffffffffffffffffffff84161515610198610976565b6109d073ffffffffffffffffffffffffffffffffffffffff83161515610199610976565b6109db838383610c9d565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054610a0e90826101a0610ca2565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610a4a9082610ab1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828201610ac38482101583610976565b9392505050565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000610b1485610cb8565b9050610b2a610b24878387610d1f565b83610976565b610b39428410156101b8610976565b50505073ffffffffffffffffffffffffffffffffffffffff9092166000908152600660205260409020805460010190555050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610c12610e31565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120905090565b610c9a817f42414c0000000000000000000000000000000000000000000000000000000000610e35565b50565b505050565b6000610cb18484111583610976565b5050900390565b6000610cc2610ba5565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000610d3182516041146101b9610976565b60008060006020850151925060408501519150606085015160001a9050600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610daa573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610e2557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b98975050505050505050565b4690565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea26469706673582212203121b0ec57033ac572e5f54dd38205a8ef30f47e382f174837058d245f9fe54664736f6c63430007010033", + "opcodes": "PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x120B CODESIZE SUB DUP1 PUSH3 0x120B DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x6F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xB9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x9F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0xE7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x10B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH3 0x13C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x16B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x151 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH3 0x199 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD MLOAD DUP3 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1 DUP3 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL DUP4 DUP4 ADD MSTORE DUP7 MLOAD SWAP1 SWAP5 POP DUP7 SWAP4 POP DUP4 SWAP3 DUP4 SWAP2 DUP8 SWAP2 PUSH3 0x1D7 SWAP2 PUSH1 0x3 SWAP2 DUP6 ADD SWAP1 PUSH3 0x250 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x1ED SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x250 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0x12 PUSH1 0xFF NOT SWAP1 SWAP2 AND OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xE0 MSTORE POP PUSH3 0x2EC SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x293 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x2C3 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x2C3 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x2C3 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x2A6 JUMP JUMPDEST POP PUSH3 0x2D1 SWAP3 SWAP2 POP PUSH3 0x2D5 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2D1 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2D6 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH1 0x60 SHR PUSH2 0xEE6 PUSH3 0x325 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x69F MSTORE POP DUP1 PUSH2 0xBA9 MSTORE POP DUP1 PUSH2 0xBEB MSTORE POP DUP1 PUSH2 0xBCA MSTORE POP PUSH2 0xEE6 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x485 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3B1 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x33D JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x370 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x26D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2A6 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x204 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128 PUSH2 0x48D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x162 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x18F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x541 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH2 0x558 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x55E JUMP JUMPDEST PUSH2 0x24F PUSH2 0x60A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH2 0x613 JUMP JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x622 JUMP JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x692 JUMP JUMPDEST PUSH2 0x314 PUSH2 0x69D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x768 JUMP JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x448 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x7B3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x888 JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x8FD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x537 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x50C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x537 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x51A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54E CALLER DUP5 DUP5 PUSH2 0x907 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x56B DUP6 CALLER PUSH2 0x888 JUMP JUMPDEST SWAP1 POP PUSH2 0x59C CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND EQ DUP1 PUSH2 0x594 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x976 JUMP JUMPDEST PUSH2 0x5A7 DUP6 DUP6 DUP6 PUSH2 0x988 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x5ED JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x5FF JUMPI PUSH2 0x5FF DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x907 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x61D PUSH2 0x8FD JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x54E SWAP2 DUP6 SWAP1 PUSH2 0x665 SWAP1 DUP7 PUSH2 0xAB1 JUMP JUMPDEST PUSH2 0x907 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x552 DUP3 PUSH2 0x6C1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x537 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x50C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x537 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x775 CALLER DUP6 PUSH2 0x888 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x78F JUMPI PUSH2 0x78A CALLER DUP6 PUSH1 0x0 PUSH2 0x907 JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST PUSH2 0x79C CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x907 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54E CALLER DUP5 DUP5 PUSH2 0x988 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x7E2 DUP13 PUSH2 0x6C1 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x873 DUP9 DUP3 PUSH2 0x86A DUP8 DUP8 DUP8 PUSH2 0xACA JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0xB09 JUMP JUMPDEST PUSH2 0x87E DUP9 DUP9 DUP9 PUSH2 0x907 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x892 PUSH2 0x69D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x8EC JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x552 JUMP JUMPDEST PUSH2 0x8F6 DUP4 DUP4 PUSH2 0xB6D JUMP JUMPDEST SWAP1 POP PUSH2 0x552 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x61D PUSH2 0xBA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x984 JUMPI PUSH2 0x984 DUP2 PUSH2 0xC70 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x9AC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x976 JUMP JUMPDEST PUSH2 0x9D0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x976 JUMP JUMPDEST PUSH2 0x9DB DUP4 DUP4 DUP4 PUSH2 0xC9D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA0E SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0xCA2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA4A SWAP1 DUP3 PUSH2 0xAB1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0xAC3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x976 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB14 DUP6 PUSH2 0xCB8 JUMP JUMPDEST SWAP1 POP PUSH2 0xB2A PUSH2 0xB24 DUP8 DUP4 DUP8 PUSH2 0xD1F JUMP JUMPDEST DUP4 PUSH2 0x976 JUMP JUMPDEST PUSH2 0xB39 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x976 JUMP JUMPDEST POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0xC12 PUSH2 0xE31 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xC9A DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0xE35 JUMP JUMPDEST POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCB1 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x976 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC2 PUSH2 0xBA5 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD31 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x976 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xE25 JUMPI POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE 0x21 0xB0 0xEC JUMPI SUB GASPRICE 0xC5 PUSH19 0xE5F54DD38205A8EF30F47E382F174837058D24 0x5F SWAP16 0xE5 CHAINID PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1513:2527:26:-:0;;;1599:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1599:192:26;;;;;;;;;;-1:-1:-1;1599:192:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1599:192:26;;;;;;;;;;-1:-1:-1;1599:192:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1599:192:26;;;;;;;;;2020:280:50;;;;;;;;;-1:-1:-1;;;2020:280:50;;;;2118:13:51;;1599:192:26;;-1:-1:-1;1749:9:26;;-1:-1:-1;1749:9:26;;;;1724:11;;2118:13:51;;:5;;:13;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;2180:2;-1:-1:-1;;2168:14:51;;;;;;-1:-1:-1;2100:22:50;;;;;;;2085:37;;2150:25;;;;;2132:43;;-1:-1:-1;2198:95:50;2185:108;;1770:14:26::2;::::0;-1:-1:-1;;;;;;1770:14:26;::::2;::::0;-1:-1:-1;1513:2527:26;;-1:-1:-1;1513:2527:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1513:2527:26;;;-1:-1:-1;1513:2527:26;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2030": [ + { + "length": 32, + "start": 1695 + } + ], + "8847": [ + { + "length": 32, + "start": 3018 + } + ], + "8849": [ + { + "length": 32, + "start": 3051 + } + ], + "8851": [ + { + "length": 32, + "start": 2985 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061011b5760003560e01c80637ecebe00116100b2578063a457c2d711610081578063d505accf11610066578063d505accf146103ea578063dd62ed3e1461044a578063ed24911d146104855761011b565b8063a457c2d714610378578063a9059cbb146103b15761011b565b80637ecebe00146102d95780638d928af81461030c57806390193b7c1461033d57806395d89b41146103705761011b565b8063313ce567116100ee578063313ce567146102475780633644e51514610265578063395093511461026d57806370a08231146102a65761011b565b806306fdde0314610120578063095ea7b31461019d57806318160ddd146101ea57806323b872dd14610204575b600080fd5b61012861048d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016257818101518382015260200161014a565b50505050905090810190601f16801561018f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d6600480360360408110156101b357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610541565b604080519115158252519081900360200190f35b6101f2610558565b60408051918252519081900360200190f35b6101d66004803603606081101561021a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561055e565b61024f61060a565b6040805160ff9092168252519081900360200190f35b6101f2610613565b6101d66004803603604081101561028357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610622565b6101f2600480360360208110156102bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661066a565b6101f2600480360360208110156102ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610692565b61031461069d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101f26004803603602081101561035357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106c1565b6101286106e9565b6101d66004803603604081101561038e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610768565b6101d6600480360360408110156103c757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107a6565b610448600480360360e081101561040057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356107b3565b005b6101f26004803603604081101561046057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610888565b6101f26108fd565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b600061054e338484610907565b5060015b92915050565b60025490565b60008061056b8533610888565b905061059c3373ffffffffffffffffffffffffffffffffffffffff871614806105945750838210155b61019e610976565b6105a7858585610988565b3373ffffffffffffffffffffffffffffffffffffffff8616148015906105ed57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b156105ff576105ff8533858403610907565b506001949350505050565b60055460ff1690565b600061061d6108fd565b905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161054e9185906106659086610ab1565b610907565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6000610552826106c1565b7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105375780601f1061050c57610100808354040283529160200191610537565b6000806107753385610888565b905080831061078f5761078a33856000610907565b61079c565b61079c3385858403610907565b5060019392505050565b600061054e338484610988565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107e28c6106c1565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050610873888261086a878787610aca565b886101f8610b09565b61087e888888610907565b5050505050505050565b600061089261069d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108ec57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610552565b6108f68383610b6d565b9050610552565b600061061d610ba5565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b816109845761098481610c70565b5050565b6109ac73ffffffffffffffffffffffffffffffffffffffff84161515610198610976565b6109d073ffffffffffffffffffffffffffffffffffffffff83161515610199610976565b6109db838383610c9d565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054610a0e90826101a0610ca2565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610a4a9082610ab1565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000828201610ac38482101583610976565b9392505050565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000610b1485610cb8565b9050610b2a610b24878387610d1f565b83610976565b610b39428410156101b8610976565b50505073ffffffffffffffffffffffffffffffffffffffff9092166000908152600660205260409020805460010190555050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610c12610e31565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120905090565b610c9a817f42414c0000000000000000000000000000000000000000000000000000000000610e35565b50565b505050565b6000610cb18484111583610976565b5050900390565b6000610cc2610ba5565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000610d3182516041146101b9610976565b60008060006020850151925060408501519150606085015160001a9050600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610daa573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590610e2557508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b98975050505050505050565b4690565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea26469706673582212203121b0ec57033ac572e5f54dd38205a8ef30f47e382f174837058d245f9fe54664736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x11B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0x66 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x3EA JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x485 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x3B1 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x2D9 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x30C JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x33D JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x370 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x313CE567 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x26D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x2A6 JUMPI PUSH2 0x11B JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x120 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x204 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x128 PUSH2 0x48D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x162 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x14A JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x18F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x1B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x541 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH2 0x558 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x21A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x55E JUMP JUMPDEST PUSH2 0x24F PUSH2 0x60A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH2 0x613 JUMP JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x622 JUMP JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x66A JUMP JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x692 JUMP JUMPDEST PUSH2 0x314 PUSH2 0x69D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x353 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x128 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x38E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x768 JUMP JUMPDEST PUSH2 0x1D6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7A6 JUMP JUMPDEST PUSH2 0x448 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x400 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x7B3 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x460 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x888 JUMP JUMPDEST PUSH2 0x1F2 PUSH2 0x8FD JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x537 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x50C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x537 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x51A JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54E CALLER DUP5 DUP5 PUSH2 0x907 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x56B DUP6 CALLER PUSH2 0x888 JUMP JUMPDEST SWAP1 POP PUSH2 0x59C CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND EQ DUP1 PUSH2 0x594 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x976 JUMP JUMPDEST PUSH2 0x5A7 DUP6 DUP6 DUP6 PUSH2 0x988 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x5ED JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x5FF JUMPI PUSH2 0x5FF DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x907 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x61D PUSH2 0x8FD JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x54E SWAP2 DUP6 SWAP1 PUSH2 0x665 SWAP1 DUP7 PUSH2 0xAB1 JUMP JUMPDEST PUSH2 0x907 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x552 DUP3 PUSH2 0x6C1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x537 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x50C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x537 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x775 CALLER DUP6 PUSH2 0x888 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x78F JUMPI PUSH2 0x78A CALLER DUP6 PUSH1 0x0 PUSH2 0x907 JUMP JUMPDEST PUSH2 0x79C JUMP JUMPDEST PUSH2 0x79C CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x907 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x54E CALLER DUP5 DUP5 PUSH2 0x988 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x7E2 DUP13 PUSH2 0x6C1 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x873 DUP9 DUP3 PUSH2 0x86A DUP8 DUP8 DUP8 PUSH2 0xACA JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0xB09 JUMP JUMPDEST PUSH2 0x87E DUP9 DUP9 DUP9 PUSH2 0x907 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x892 PUSH2 0x69D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x8EC JUMPI POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x552 JUMP JUMPDEST PUSH2 0x8F6 DUP4 DUP4 PUSH2 0xB6D JUMP JUMPDEST SWAP1 POP PUSH2 0x552 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x61D PUSH2 0xBA5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x984 JUMPI PUSH2 0x984 DUP2 PUSH2 0xC70 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x9AC PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x976 JUMP JUMPDEST PUSH2 0x9D0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x976 JUMP JUMPDEST PUSH2 0x9DB DUP4 DUP4 DUP4 PUSH2 0xC9D JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0xA0E SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0xCA2 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0xA4A SWAP1 DUP3 PUSH2 0xAB1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0xAC3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x976 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB14 DUP6 PUSH2 0xCB8 JUMP JUMPDEST SWAP1 POP PUSH2 0xB2A PUSH2 0xB24 DUP8 DUP4 DUP8 PUSH2 0xD1F JUMP JUMPDEST DUP4 PUSH2 0x976 JUMP JUMPDEST PUSH2 0xB39 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x976 JUMP JUMPDEST POP POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0xC12 PUSH2 0xE31 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0xC9A DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0xE35 JUMP JUMPDEST POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCB1 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x976 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC2 PUSH2 0xBA5 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD31 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x976 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xDAA JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0xE25 JUMPI POP DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BALANCE 0x21 0xB0 0xEC JUMPI SUB GASPRICE 0xC5 PUSH19 0xE5F54DD38205A8EF30F47E382F174837058D24 0x5F SWAP16 0xE5 CHAINID PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1513:2527:26:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4857:164;;;;;;;;;;;;;;;;-1:-1:-1;4857:164:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3500:106;;;:::i;:::-;;;;;;;;;;;;;;;;2575:655:26;;;;;;;;;;;;;;;;-1:-1:-1;2575:655:26;;;;;;;;;;;;;;;;;;:::i;3156:81:51:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2243:113:52;;;:::i;6269:211:51:-;;;;;;;;;;;;;;;;-1:-1:-1;6269:211:51;;;;;;;;;:::i;4022:117::-;;;;;;;;;;;;;;;;-1:-1:-1;4022:117:51;;;;:::i;2006:113:52:-;;;;;;;;;;;;;;;;-1:-1:-1;2006:113:52;;;;:::i;1797:79:26:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1303:121:41;;;;;;;;;;;;;;;;-1:-1:-1;1303:121:41;;;;:::i;2448:85:51:-;;;:::i;3356:429:26:-;;;;;;;;;;;;;;;;-1:-1:-1;3356:429:26;;;;;;;;;:::i;4342:170:51:-;;;;;;;;;;;;;;;;-1:-1:-1;4342:170:51;;;;;;;;;:::i;1437:508:52:-;;;;;;;;;;;;;;;;-1:-1:-1;1437:508:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2178:254:26;;;;;;;;;;;;;;;;-1:-1:-1;2178:254:26;;;;;;;;;;;:::i;1184:113:41:-;;;:::i;2254:81:51:-;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;;:::o;3500:106::-;3587:12;;3500:106;:::o;2575:655:26:-;2703:4;2719:24;2746:29;2756:6;2764:10;2746:9;:29::i;:::-;2719:56;-1:-1:-1;2785:101:26;2794:10;:20;;;;;:50;;;2838:6;2818:16;:26;;2794:50;10712:3:10;2785:8:26;:101::i;:::-;2897:36;2907:6;2915:9;2926:6;2897:9;:36::i;:::-;2948:10;:20;;;;;;;:55;;;3000:2;2972:16;:31;;2948:55;2944:258;;;3136:55;3145:6;3153:10;3184:6;3165:16;:25;3136:8;:55::i;:::-;-1:-1:-1;3219:4:26;;2575:655;-1:-1:-1;;;;2575:655:26:o;3156:81:51:-;3221:9;;;;3156:81;:::o;2243:113:52:-;2303:7;2329:20;:18;:20::i;:::-;2322:27;;2243:113;:::o;6269:211:51:-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;6357:4;;6373:79;;6394:7;;6403:48;;6440:10;6403:36;:48::i;:::-;6373:8;:79::i;4022:117::-;4114:18;;4088:7;4114:18;;;;;;;;;;;;4022:117::o;2006:113:52:-;2067:7;2093:19;2106:5;2093:12;:19::i;1797:79:26:-;1863:6;1797:79;:::o;1303:121:41:-;1398:19;;1372:7;1398:19;;;:10;:19;;;;;;;1303:121::o;2448:85:51:-;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;3356:429:26;3441:4;3457:24;3484:30;3494:10;3506:7;3484:9;:30::i;:::-;3457:57;;3539:16;3529:6;:26;3525:232;;3571:32;3580:10;3592:7;3601:1;3571:8;:32::i;:::-;3525:232;;;3690:56;3699:10;3711:7;3739:6;3720:16;:25;3690:8;:56::i;:::-;-1:-1:-1;3774:4:26;;3356:429;-1:-1:-1;;;3356:429:26:o;4342:170:51:-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;1437:508:52:-;1645:18;921:109;1718:5;1725:7;1734:5;1741:19;1754:5;1741:12;:19::i;:::-;1762:8;1689:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1666:115;;;;;;1645:136;;1792:104;1814:5;1821:10;1833:26;1851:1;1854;1857;1833:17;:26::i;:::-;1861:8;12759:3:10;1792:21:52;:104::i;:::-;1907:31;1916:5;1923:7;1932:5;1907:8;:31::i;:::-;1437:508;;;;;;;;:::o;2178:254:26:-;2259:7;2301:10;:8;:10::i;:::-;2282:30;;:7;:30;;;2278:148;;;-1:-1:-1;2343:2:26;2328:18;;2278:148;2384:31;2400:5;2407:7;2384:15;:31::i;:::-;2377:38;;;;1184:113:41;1244:7;1270:20;:18;:20::i;10034:213:51:-;10157:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10208:32;;;;;;;;;;;;;;;;;10034:213;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;7753:559:51:-;7880:71;7889:20;;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;7970:23;;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;8122:17;;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;8102:17;;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;8200:20;;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;8200:20;;8270:35;;;;;;;;;;;;;7753:559;;;:::o;966:167:54:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;:::-;1125:1;966:167;-1:-1:-1;;;966:167:54:o;3803:419:41:-;3963:13;;;3973:2;3963:13;;;;;;;;;3914:12;;;;3963:13;;;;;;;;;;;-1:-1:-1;3963:13:41;3938:38;;4092:1;4087:2;4076:9;4072:18;4065:29;4134:1;4129:2;4118:9;4114:18;4107:29;4177:1;4172:2;4161:9;4157:18;4149:30;4206:9;3803:419;-1:-1:-1;;;;3803:419:41:o;1701:1214::-;1895:14;1912:28;1929:10;1912:16;:28::i;:::-;1895:45;;1950:66;1959:45;1977:7;1986:6;1994:9;1959:17;:45::i;:::-;2006:9;1950:8;:66::i;:::-;2487:63;2508:15;2496:8;:27;;12277:3:10;2487:8:41;:63::i;:::-;-1:-1:-1;;;2884:19:41;;;;;;;;:10;:19;;;;;:24;;2907:1;2884:24;;;-1:-1:-1;;1701:1214:41:o;4570:149:51:-;4685:18;;;;4659:7;4685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;2386:188:50:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;1437:126:10:-;1484:28;1492:9;1484:28;:7;:28::i;:::-;1437:126;:::o;11245:183:51:-;;;;:::o;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;3199:183:50:-;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3302:73;;;;;;3295:80;;3199:183;;;:::o;2921:876:41:-;3066:4;3082:60;3091:9;:16;3111:2;3091:22;12334:3:10;3082:8:41;:60::i;:::-;3153:9;3172;3191:7;3427:4;3416:9;3412:20;3406:27;3401:32;;3472:4;3461:9;3457:20;3451:27;3446:32;;3525:4;3514:9;3510:20;3504:27;3501:1;3496:36;3491:41;;3552:24;3579:26;3589:6;3597:1;3600;3603;3579:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3579:26:41;;;;;;-1:-1:-1;;3728:30:41;;;;;;;:61;;;3782:7;3762:27;;:16;:27;;;3728:61;3720:70;2921:876;-1:-1:-1;;;;;;;;2921:876:41:o;3388:427:50:-;3790:9;;3765:44::o;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getVault()": "8d928af8", + "increaseAllowance(address,uint256)": "39509351", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Balancer Labs\",\"details\":\"- Includes functions to increase and decrease allowance as a workaround for the well-known issue with `approve`: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 - Allows for 'infinite allowance', where an allowance of 0xff..ff is not decreased by calls to transferFrom - Lets a token holder use `transferFrom` to send their own tokens, without first setting allowance - Emits 'Approval' events whenever allowance is changed by `transferFrom` - Assigns infinite allowance for all token holders to the Vault\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"}},\"title\":\"Highly opinionated token implementation\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":\"BalancerPoolToken\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol": { + "BaseGeneralPool": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IPoolSwapStructs.SwapRequest", + "name": "swapRequest", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + } + ], + "name": "onSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeesCollector()": "d2946c2b", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": "01ec954a", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IPoolSwapStructs.SwapRequest\",\"name\":\"swapRequest\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extension of `BasePool`, adding a handler for `IGeneralPool.onSwap`. Derived contracts must call `BasePool`'s constructor, and implement `_onSwapGivenIn` and `_onSwapGivenOut` along with `BasePool`'s virtual functions. Inheriting from this contract lets derived contracts choose the General specialization setting.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol\":\"BaseGeneralPool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\":{\"keccak256\":\"0x7f11733a5cd8f81c123c02f79d94ead7b65217021ebddafda10e796a25e1ef41\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7333060b9ff67e1fe734903d45b0c69ff8308b744f7c2fb8fbf630ae9d589bd6\",\"dweb:/ipfs/Qmf4rZHqsjfKDk5cSp38fv24SS8bAYJxYYQzn63TV6aPCo\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol\":{\"keccak256\":\"0xcd8cfa91f7e0c2bdbe1dceb37caddf211ce411e51de567594434da9ad2edc5e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58db2ea702a5eb370172402784e7e260337b61d1f8d5338142a1bde1b6718c4d\",\"dweb:/ipfs/QmZBogEchmaq3CEadrFidyWczyyuLT987wjZRHwAb6nPWg\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/BasePool.sol": { + "BasePool": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeesCollector()": "d2946c2b", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Reference implementation for the base layer of a Pool contract that manages a single Pool with optional Asset Managers, an admin-controlled swap fee percentage, and an emergency pause mechanism. This Pool pays protocol fees by minting BPT directly to the ProtocolFeeCollector instead of using the `dueProtocolFees` return value. This results in the underlying tokens continuing to provide liquidity for traders, while still keeping gas usage to a minimum since only a single token (the BPT) is transferred. Note that neither swap fees nor the pause mechanism are used by this contract. They are passed through so that derived contracts can use them via the `_addSwapFeeAmount` and `_subtractSwapFeeAmount` functions, and the `whenNotPaused` modifier. No admin permissions are checked here: instead, this contract delegates that to the Vault's own Authorizer. Because this contract doesn't implement the swap hooks, derived contracts should generally inherit from BaseGeneralPool or BaseMinimalSwapInfoPool. Otherwise, subclasses must inherit from the corresponding interfaces and implement the swap callbacks themselves.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"notice\":\"Reference implementation for the base layer of a Pool contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":\"BasePool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol": { + "BasePoolAuthorization": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getOwner()": "893d20e8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base authorization layer implementation for Pools. The owner account can call some of the permissioned functions - access control of the rest is delegated to the Authorizer. Note that this owner is immutable: more sophisticated permission schemes, such as multiple ownership, granular roles, etc., could be built on top of this by making the owner a smart contract. Access control of all other permissioned functions is delegated to an Authorizer. It is also possible to delegate control of *all* permissioned functions to the Authorizer by setting the owner address to `_DELEGATE_OWNER`.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":\"BasePoolAuthorization\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol": { + "RecoveryMode": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getOwner()": "893d20e8", + "inRecoveryMode()": "b35056b8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is intended to provide a safe way to exit any pool during some kind of emergency, to avoid locking funds in the event the pool enters a non-functional state (i.e., some code that normally runs during exits is causing them to revert). Recovery Mode is *not* the same as pausing the pool. The pause function is only available during a short window after factory deployment. Pausing can only be intentionally reversed during a buffer period, and the contract will permanently unpause itself thereafter. Paused pools are completely disabled, in a kind of suspended animation, until they are voluntarily or involuntarily unpaused. By contrast, a privileged account - typically a governance multisig - can place a pool in Recovery Mode at any time, and it is always reversible. The pool is *not* disabled while in this mode: though of course whatever condition prompted the transition to Recovery Mode has likely effectively disabled some functions. Rather, a special \\\"clean\\\" exit is enabled, which runs the absolute minimum code necessary to exit proportionally. In particular, stable pools do not attempt to compute the invariant (which is a complex, iterative calculation that can fail in extreme circumstances), and no protocol fees are collected. It is critical to ensure that turning on Recovery Mode would do no harm, if activated maliciously or in error.\",\"kind\":\"dev\",\"methods\":{\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"inRecoveryMode()\":{\"notice\":\"Override to check storage and return whether the pool is in Recovery Mode\"}},\"notice\":\"Handle storage and state changes for pools that support \\\"Recovery Mode\\\".\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":\"RecoveryMode\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol": { + "BasePoolFactory": { + "abi": [ + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCodeContracts", + "outputs": [ + { + "internalType": "address", + "name": "contractA", + "type": "address" + }, + { + "internalType": "address", + "name": "contractB", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeePercentagesProvider", + "outputs": [ + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "disable()": "2f2770db", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getCreationCode()": "00c194db", + "getCreationCodeContracts()": "174481fa", + "getProtocolFeePercentagesProvider()": "739238d6", + "getVault()": "8d928af8", + "isDisabled()": "6c57f5a9", + "isPoolFromFactory(address)": "6634b753" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCodeContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractB\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeePercentagesProvider\",\"outputs\":[{\"internalType\":\"contract IProtocolFeePercentagesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"By using the split code mechanism, we can deploy Pools with creation code so large that a regular factory contract would not be able to store it. Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently prevent the creation of any future pools from the factory.\",\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Disable the factory, preventing the creation of more pools. Already existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getCreationCode()\":{\"details\":\"Returns the creation code of the contract this factory creates.\"},\"getCreationCodeContracts()\":{\"details\":\"Returns the two addresses where the creation code of the contract crated by this factory is stored.\"},\"isDisabled()\":{\"details\":\"Check whether the derived factory has been disabled.\"},\"isPoolFromFactory(address)\":{\"details\":\"Returns true if `pool` was created by this factory.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"}},\"notice\":\"Base contract for Pool factories. Pools are deployed from factories to allow third parties to reason about them. Unknown Pools may have arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts created by the factory) is very powerful.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol\":\"BasePoolFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol\":{\"keccak256\":\"0xf5cf4f466955514781a7a7c571b905ed20168ea5b352963bcf5dd2d8fd4fd0e9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5e0c9405a058b809ceee4d89187c67926f20e2ec5cf9f5b77d14226780674b27\",\"dweb:/ipfs/QmXCbDCthmF34C7bzHMS15x8jV7kBXgmGe2Xwoop1b9NQ4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol\":{\"keccak256\":\"0x89a255ca839261cb76f41000593bf370b278be0e38126bed33b99c13ef9e85ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a164fd49722a933d5e0cf5b7eb38ed1aa2368fde971398a432cb4a4b04cf052a\",\"dweb:/ipfs/Qmc5peB5CrxoBjtet1NYooGrFTZii2CerinCkuRex8HRsq\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":{\"keccak256\":\"0xc6390b858cdf8456ad71f0c4bbd9361cb8f49f4d0917eb0f9bdf762bc04447d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://220cd28c7f8fc4f4b1082e0f831a48b6d6f998349675728f09ba93274858aa12\",\"dweb:/ipfs/QmPwjVq2mEuhaa295DYJneyMy4HFeFbrba3A2mTr3JcnXY\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x77e86d8251dfa9c442b94dde2fabbd3aab7af34e64fb9bb2c8236c74da844f1f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b1d03e9151b3c4bc46166e6c28a8ee7bac9c9681e651e01688067566af55f184\",\"dweb:/ipfs/QmZacZh87hu4SQpsZvEaaRJRfLjP9fLwP8CK6pC8TxW7pE\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol": { + "FactoryWidePauseWindow": { + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "getPauseConfiguration", + "outputs": [ + { + "internalType": "uint256", + "name": "pauseWindowDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodDuration", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60a060405234801561001057600080fd5b50426276a7000160805260805160f461003560003980604e52806076525060f46000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80632da47c4014602d575b600080fd5b60336048565b604051603f92919060b0565b60405180910390f35b600080427f000000000000000000000000000000000000000000000000000000000000000081101560a257807f000000000000000000000000000000000000000000000000000000000000000003925062278d00915060ab565b60009250600091505b509091565b91825260208201526040019056fea26469706673582212204728f13ac858de6757996ec0ecb91bc9c53678dc9678aa3c9577b3c78599ecdb64736f6c63430007010033", + "opcodes": "PUSH1 0xA0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP TIMESTAMP PUSH3 0x76A700 ADD PUSH1 0x80 MSTORE PUSH1 0x80 MLOAD PUSH1 0xF4 PUSH2 0x35 PUSH1 0x0 CODECOPY DUP1 PUSH1 0x4E MSTORE DUP1 PUSH1 0x76 MSTORE POP PUSH1 0xF4 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2DA47C40 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x48 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3F SWAP3 SWAP2 SWAP1 PUSH1 0xB0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 TIMESTAMP PUSH32 0x0 DUP2 LT ISZERO PUSH1 0xA2 JUMPI DUP1 PUSH32 0x0 SUB SWAP3 POP PUSH3 0x278D00 SWAP2 POP PUSH1 0xAB JUMP JUMPDEST PUSH1 0x0 SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST POP SWAP1 SWAP2 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0x28 CALL GASPRICE 0xC8 PC 0xDE PUSH8 0x57996EC0ECB91BC9 0xC5 CALLDATASIZE PUSH25 0xDC9678AA3C9577B3C78599ECDB64736F6C6343000701003300 ", + "sourceMap": "1085:1870:32:-:0;;;1601:106;;;;;;;;;-1:-1:-1;1652:15:32;1337:7;1652:48;1625:75;;1085:1870;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "4288": [ + { + "length": 32, + "start": 78 + }, + { + "length": 32, + "start": 118 + } + ] + }, + "linkReferences": {}, + "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80632da47c4014602d575b600080fd5b60336048565b604051603f92919060b0565b60405180910390f35b600080427f000000000000000000000000000000000000000000000000000000000000000081101560a257807f000000000000000000000000000000000000000000000000000000000000000003925062278d00915060ab565b60009250600091505b509091565b91825260208201526040019056fea26469706673582212204728f13ac858de6757996ec0ecb91bc9c53678dc9678aa3c9577b3c78599ecdb64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2DA47C40 EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x33 PUSH1 0x48 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x3F SWAP3 SWAP2 SWAP1 PUSH1 0xB0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 TIMESTAMP PUSH32 0x0 DUP2 LT ISZERO PUSH1 0xA2 JUMPI DUP1 PUSH32 0x0 SUB SWAP3 POP PUSH3 0x278D00 SWAP2 POP PUSH1 0xAB JUMP JUMPDEST PUSH1 0x0 SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST POP SWAP1 SWAP2 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE 0x28 CALL GASPRICE 0xC8 PC 0xDE PUSH8 0x57996EC0ECB91BC9 0xC5 CALLDATASIZE PUSH25 0xDC9678AA3C9577B3C78599ECDB64736F6C6343000701003300 ", + "sourceMap": "1085:1870:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2066:887;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;2120:27;;2211:15;2254:24;2240:38;;2236:711;;;2577:11;2550:24;:38;2528:60;;1401:7;2637:46;;2236:711;;;2897:1;2875:23;;2935:1;2912:24;;2236:711;2066:887;;;:::o;125:333:-1:-;76:37;;;444:2;429:18;;76:37;280:2;265:18;;251:207::o" + }, + "methodIdentifiers": { + "getPauseConfiguration()": "2da47c40" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getPauseConfiguration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pauseWindowDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Utility to create Pool factories for Pools that use the `TemporarilyPausable` contract. By calling `TemporarilyPausable`'s constructor with the result of `getPauseConfiguration`, all Pools created by this factory will share the same Pause Window end time, after which both old and new Pools will not be pausable.\",\"kind\":\"dev\",\"methods\":{\"getPauseConfiguration()\":{\"details\":\"Returns the current `TemporarilyPausable` configuration that will be applied to Pools created by this factory. `pauseWindowDuration` will decrease over time until it reaches zero, at which point both it and `bufferPeriodDuration` will be zero forever, meaning deployed Pools will not be pausable.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol\":\"FactoryWidePauseWindow\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x7d764b70fdb9f4d2b07f2914ff5deec66f1bc193741017afef2fa14be57dc4ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8184f7aea4afaa63bff9352da02293d8423d71a394620d561c7e861fde12f921\",\"dweb:/ipfs/QmRdokGbResxbERJ72ofPNkK2PTivkBQ6W3mJPxTJ3oqBU\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol": { + "InvariantGrowthProtocolSwapFees": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122013498c5f14a0e2442af86b89a2a13e7d82eb4ebcbf5554890ea88fc483a4ea8b64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT 0x49 DUP13 0x5F EQ LOG0 0xE2 DIFFICULTY 0x2A 0xF8 PUSH12 0x89A2A13E7D82EB4EBCBF5554 DUP10 0xE 0xA8 DUP16 0xC4 DUP4 LOG4 0xEA DUP12 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "883:4463:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122013498c5f14a0e2442af86b89a2a13e7d82eb4ebcbf5554890ea88fc483a4ea8b64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT 0x49 DUP13 0x5F EQ LOG0 0xE2 DIFFICULTY 0x2A 0xF8 PUSH12 0x89A2A13E7D82EB4EBCBF5554 DUP10 0xE 0xA8 DUP16 0xC4 DUP4 LOG4 0xEA DUP12 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "883:4463:33:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":\"InvariantGrowthProtocolSwapFees\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":{\"keccak256\":\"0x65f93b8bac780e69e0ec41db98645323401686649dc61f9fa24d015d11084dfe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46b2c14982f82375159bb984548fd3bf4764972dd5cc0b2d40de82d0f3ccd28f\",\"dweb:/ipfs/QmPYfeoLCDwwDE6TDNRrnSQWniMgwuZSNJQ2Ycm3uRuBPs\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol": { + "ProtocolFeeCache": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolFeePercentageCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getProtocolFeePercentageCache", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolSwapFeeDelegation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateProtocolFeePercentageCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": "ddf4627b", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getOwner()": "893d20e8", + "getProtocolFeePercentageCache(uint256)": "70464016", + "getProtocolSwapFeeDelegation()": "15b0015b", + "inRecoveryMode()": "b35056b8", + "updateProtocolFeePercentageCache()": "0da0669c" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeePercentageCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getProtocolFeePercentageCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolSwapFeeDelegation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateProtocolFeePercentageCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not provide the protocol swap fee percentage in swap hooks (as swaps don't typically need this value), so for swaps that need this value, we would have to to fetch it ourselves from the ProtocolFeePercentagesProvider. Additionally, other protocol fee types (such as Yield or AUM) can only be obtained by making said call. However, these values change so rarely that it doesn't make sense to perform the required calls to get the current values in every single user interaction. Instead, we keep a local copy that can be permissionlessly updated by anyone with the real value. We also pack these values together, performing a single storage read to get them all. When initialized with a special sentinel value, the swap fee is delegated, meaning the mutable protocol swap fee cache is set to the current value stored in the ProtocolFeePercentagesProvider, and can be updated by anyone with a call to `updateProtocolFeePercentageCache`. Any other value means the protocol swap fee is fixed, so it is instead stored in the immutable `_fixedProtocolSwapFeePercentage`.\",\"kind\":\"dev\",\"methods\":{\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getProtocolFeePercentageCache(uint256)\":{\"details\":\"Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the ProtocolFeePercentagesProvider.\"},\"getProtocolSwapFeeDelegation()\":{\"details\":\"Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider.\"},\"updateProtocolFeePercentageCache()\":{\"details\":\"Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated). Updates the cache to the latest value set by governance.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"inRecoveryMode()\":{\"notice\":\"Override to check storage and return whether the pool is in Recovery Mode\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":\"ProtocolFeeCache\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":{\"keccak256\":\"0x81972e1a01bb50f6ebed2d0aaeea8044f59adfd3b08dc17233919b28c41e838b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://385cc839791c8db486aa8b53cd0791f98786e88379f981b898b163f0f4a68e37\",\"dweb:/ipfs/QmP6SNqUMKtwgQUXuZzQAmUjxVKvojudz7fRFBzhcXqGdp\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol": { + "ProtocolFees": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208d623ee745b5bbf0b96d01e4d1005e5d537e7cc516f8611278655430e431441a64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 PUSH3 0x3EE745 0xB5 0xBB CREATE 0xB9 PUSH14 0x1E4D1005E5D537E7CC516F86112 PUSH25 0x655430E431441A64736F6C6343000701003300000000000000 ", + "sourceMap": "854:1237:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208d623ee745b5bbf0b96d01e4d1005e5d537e7cc516f8611278655430e431441a64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 PUSH3 0x3EE745 0xB5 0xBB CREATE 0xB9 PUSH14 0x1E4D1005E5D537E7CC516F86112 PUSH25 0x655430E431441A64736F6C6343000701003300000000000000 ", + "sourceMap": "854:1237:35:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":\"ProtocolFees\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol": { + "PriceRateCache": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220429eafc5a0c542326503a60b89321d86f2c0b5b55dc3a3f1aefc6dc5797ffa7e64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP SWAP15 0xAF 0xC5 LOG0 0xC5 TIMESTAMP ORIGIN PUSH6 0x3A60B89321D DUP7 CALLCODE 0xC0 0xB5 0xB5 0x5D 0xC3 LOG3 CALL 0xAE 0xFC PUSH14 0xC5797FFA7E64736F6C6343000701 STOP CALLER ", + "sourceMap": "1529:3655:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220429eafc5a0c542326503a60b89321d86f2c0b5b55dc3a3f1aefc6dc5797ffa7e64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 TIMESTAMP SWAP15 0xAF 0xC5 LOG0 0xC5 TIMESTAMP ORIGIN PUSH6 0x3A60B89321D DUP7 CALLCODE 0xC0 0xB5 0xB5 0x5D 0xC3 LOG3 CALL 0xAE 0xFC PUSH14 0xC5797FFA7E64736F6C6343000701 STOP CALLER ", + "sourceMap": "1529:3655:36:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Price rate caches are used to avoid querying the price rate for a token every time we need to work with it. It is useful for slow changing rates, such as those that arise from interest-bearing tokens (e.g. waDAI into DAI). The cache data is packed into a single bytes32 value with the following structure: [ 32 bits | 32 bits | 96 bits | 96 bits ] [ expires | duration | old rate | current rate ] |MSB LSB| 'rate' is an 18 decimal fixed point number, supporting rates of up to ~3e10. 'expires' is a Unix timestamp, and 'duration' is expressed in seconds.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":\"PriceRateCache\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol": { + "MockFailureModes": { + "abi": [ + { + "inputs": [ + { + "internalType": "enum MockFailureModes.FailureMode", + "name": "mode", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "errorCode", + "type": "uint256" + } + ], + "name": "setFailureCode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum MockFailureModes.FailureMode", + "name": "mode", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "failed", + "type": "bool" + } + ], + "name": "setFailureMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "setFailureCode(uint8,uint256)": "7b549244", + "setFailureMode(uint8,bool)": "1ea046c1" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"enum MockFailureModes.FailureMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"errorCode\",\"type\":\"uint256\"}],\"name\":\"setFailureCode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum MockFailureModes.FailureMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"failed\",\"type\":\"bool\"}],\"name\":\"setFailureMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol\":\"MockFailureModes\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol\":{\"keccak256\":\"0x5583324539a5115ad86d9e7995970aec52e58ab1da1296598965d4355959874c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://14c31fdef3401d5df9f68db7ce68e811f619630f6ef0b4f20f98d0e46fce453f\",\"dweb:/ipfs/QmVonqayfhsEPf28czLuce6bWMUWQPpcZxpK26LMYkpQML\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol": { + "Authentication": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Building block for performing access control on external functions. This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to only make them callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol": { + "BaseSplitCodeFactory": { + "abi": [ + { + "inputs": [], + "name": "getCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCodeContracts", + "outputs": [ + { + "internalType": "address", + "name": "contractA", + "type": "address" + }, + { + "internalType": "address", + "name": "contractB", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getCreationCode()": "00c194db", + "getCreationCodeContracts()": "174481fa" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCodeContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractB\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when the contract's creation code grows close to 24kB. Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`.\"},\"getCreationCode()\":{\"details\":\"Returns the creation code of the contract this factory creates.\"},\"getCreationCodeContracts()\":{\"details\":\"Returns the two addresses where the creation code of the contract crated by this factory is stored.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":\"BaseSplitCodeFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":{\"keccak256\":\"0xc6390b858cdf8456ad71f0c4bbd9361cb8f49f4d0917eb0f9bdf762bc04447d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://220cd28c7f8fc4f4b1082e0f831a48b6d6f998349675728f09ba93274858aa12\",\"dweb:/ipfs/QmPwjVq2mEuhaa295DYJneyMy4HFeFbrba3A2mTr3JcnXY\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x77e86d8251dfa9c442b94dde2fabbd3aab7af34e64fb9bb2c8236c74da844f1f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b1d03e9151b3c4bc46166e6c28a8ee7bac9c9681e651e01688067566af55f184\",\"dweb:/ipfs/QmZacZh87hu4SQpsZvEaaRJRfLjP9fLwP8CK6pC8TxW7pE\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol": { + "CodeDeployer": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220956940ea908f613a0e409b9835bb5532ff9a577ed96e6295f8c3e8ff074e45cd64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 PUSH10 0x40EA908F613A0E409B98 CALLDATALOAD 0xBB SSTORE ORIGIN SELFDESTRUCT SWAP11 JUMPI PUSH31 0xD96E6295F8C3E8FF074E45CD64736F6C634300070100330000000000000000 ", + "sourceMap": "1005:3100:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220956940ea908f613a0e409b9835bb5532ff9a577ed96e6295f8c3e8ff074e45cd64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP6 PUSH10 0x40EA908F613A0E409B98 CALLDATALOAD 0xBB SSTORE ORIGIN SELFDESTRUCT SWAP11 JUMPI PUSH31 0xD96E6295F8C3E8FF074E45CD64736F6C634300070100330000000000000000 ", + "sourceMap": "1005:3100:40:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library used to deploy contracts with specific code. This can be used for long-term storage of immutable data as contract code, which can be retrieved via the `extcodecopy` opcode.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol\":\"CodeDeployer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x77e86d8251dfa9c442b94dde2fabbd3aab7af34e64fb9bb2c8236c74da844f1f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b1d03e9151b3c4bc46166e6c28a8ee7bac9c9681e651e01688067566af55f184\",\"dweb:/ipfs/QmZacZh87hu4SQpsZvEaaRJRfLjP9fLwP8CK6pC8TxW7pE\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol": { + "EOASignaturesValidator": { + "abi": [ + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Utility for signing Solidity function calls.\",\"kind\":\"dev\",\"methods\":{\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":\"EOASignaturesValidator\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol": { + "InputHelpers": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034d56b3213956892dcb5238399528420fdc0b449fe4a87c763ec281d4369904864736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE 0xD5 PUSH12 0x3213956892DCB52383995284 KECCAK256 REVERT 0xC0 0xB4 0x49 INVALID 0x4A DUP8 0xC7 PUSH4 0xEC281D43 PUSH10 0x904864736F6C63430007 ADD STOP CALLER ", + "sourceMap": "893:1008:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122034d56b3213956892dcb5238399528420fdc0b449fe4a87c763ec281d4369904864736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE 0xD5 PUSH12 0x3213956892DCB52383995284 KECCAK256 REVERT 0xC0 0xB4 0x49 INVALID 0x4A DUP8 0xC7 PUSH4 0xEC281D43 PUSH10 0x904864736F6C63430007 ADD STOP CALLER ", + "sourceMap": "893:1008:43:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol": { + "SingletonAuthentication": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getVault()": "8d928af8" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol": { + "TemporarilyPausable": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getPausedState()": "1c0de051" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Allows for a contract to be paused during an initial period after deployment, disabling functionality. Can be used as an emergency switch in case a security vulnerability or threat is identified. The contract can only be paused during the Pause Window, a period that starts at deployment. It can also be unpaused and repaused any number of times during this period. This is intended to serve as a safety measure: it lets system managers react quickly to potentially dangerous situations, knowing that this action is reversible if careful analysis later determines there was a false alarm. If the contract is paused when the Pause Window finishes, it will remain in the paused state through an additional Buffer Period, after which it will be automatically unpaused forever. This is to ensure there is always enough time to react to an emergency, even if the threat is discovered shortly before the Pause Window expires. Note that since the contract can only be paused within the Pause Window, unpausing during the Buffer Period is irreversible.\",\"kind\":\"dev\",\"methods\":{\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":\"TemporarilyPausable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol": { + "WordCodec": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040e7730b867f6c2093a2a0ed6137c667fdc14f1bf26b6c0ca7fb0f0664e78ba364736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOCKHASH 0xE7 PUSH20 0xB867F6C2093A2A0ED6137C667FDC14F1BF26B6C 0xC 0xA7 0xFB 0xF MOD PUSH5 0xE78BA36473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "2017:6772:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040e7730b867f6c2093a2a0ed6137c667fdc14f1bf26b6c0ca7fb0f0664e78ba364736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOCKHASH 0xE7 PUSH20 0xB867F6C2093A2A0ED6137C667FDC14F1BF26B6C 0xC 0xA7 0xFB 0xF MOD PUSH5 0xE78BA36473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "2017:6772:46:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for encoding and decoding values stored inside a 256 bit word. Typically used to pack multiple values in a single storage slot, saving gas by performing less storage accesses. Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128. We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location), using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-intensive, and the cost of accesing memory increases quadratically with the number of allocated words. Manual packing and unpacking is therefore the preferred approach.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":\"WordCodec\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol": { + "FixedPoint": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206a6fabeafd4aa44938f66364037555e3b41b9e910e85b0f70a35d4611990400e64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0x6FABEAFD4AA44938F66364 SUB PUSH22 0x55E3B41B9E910E85B0F70A35D4611990400E64736F6C PUSH4 0x43000701 STOP CALLER ", + "sourceMap": "888:5039:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206a6fabeafd4aa44938f66364037555e3b41b9e910e85b0f70a35d4611990400e64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0x6FABEAFD4AA44938F66364 SUB PUSH22 0x55E3B41B9E910E85B0F70A35D4611990400E64736F6C PUSH4 0x43000701 STOP CALLER ", + "sourceMap": "888:5039:47:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol": { + "LogExpMath": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5a935ecc0b1e22372a0ecda546b86c990000cca0d872801318da0f645e21b9964736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 0xA9 CALLDATALOAD 0xEC 0xC0 0xB1 0xE2 0x23 PUSH19 0xA0ECDA546B86C990000CCA0D872801318DA0F6 GASLIMIT 0xE2 SHL SWAP10 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1681:19465:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b5a935ecc0b1e22372a0ecda546b86c990000cca0d872801318da0f645e21b9964736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB5 0xA9 CALLDATALOAD 0xEC 0xC0 0xB1 0xE2 0x23 PUSH19 0xA0ECDA546B86C990000CCA0D872801318DA0F6 GASLIMIT 0xE2 SHL SWAP10 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "1681:19465:48:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number).\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol": { + "Math": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206e3ae64bf7fbb0d97fbe0224e902b3f9daccfb66916b50372aa532db1374f1ea64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0x3AE64BF7FBB0D97FBE0224E902B3F9 0xDA 0xCC 0xFB PUSH7 0x916B50372AA532 0xDB SGT PUSH21 0xF1EA64736F6C634300070100330000000000000000 ", + "sourceMap": "290:2500:49:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206e3ae64bf7fbb0d97fbe0224e902b3f9daccfb66916b50372aa532db1374f1ea64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0x3AE64BF7FBB0D97FBE0224E902B3F9 0xDA 0xCC 0xFB PUSH7 0x916B50372AA532 0xDB SGT PUSH21 0xF1EA64736F6C634300070100330000000000000000 ", + "sourceMap": "290:2500:49:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Adapted from OpenZeppelin's SafeMath library.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":\"Math\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol": { + "EIP712": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in their contracts using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade].\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol": { + "ERC20": { + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50604051610b0c380380610b0c8339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825164010000000081118282018810171561008257600080fd5b82525081516020918201929091019080838360005b838110156100af578181015183820152602001610097565b50505050905090810190601f1680156100dc5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156100ff57600080fd5b90830190602082018581111561011457600080fd5b825164010000000081118282018810171561012e57600080fd5b82525081516020918201929091019080838360005b8381101561015b578181015183820152602001610143565b50505050905090810190601f1680156101885780820380516001836020036101000a031916815260200191505b50604052505082516101a2915060039060208501906101cb565b5080516101b69060049060208401906101cb565b50506005805460ff191660121790555061025e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061020c57805160ff1916838001178555610239565b82800160010185558215610239579182015b8281111561023957825182559160200191906001019061021e565b50610245929150610249565b5090565b5b80821115610245576000815560010161024a565b61089f8061026d6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610287578063a9059cbb146102c0578063dd62ed3e146102f9576100c9565b8063395093511461021357806370a082311461024c57806395d89b411461027f576100c9565b806318160ddd116100b257806318160ddd1461019857806323b872dd146101b2578063313ce567146101f5576100c9565b806306fdde03146100ce578063095ea7b31461014b575b600080fd5b6100d6610334565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101105781810151838201526020016100f8565b50505050905090810190601f16801561013d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101846004803603604081101561016157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103e8565b604080519115158252519081900360200190f35b6101a06103fe565b60408051918252519081900360200190f35b610184600480360360608110156101c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610404565b6101fd610465565b6040805160ff9092168252519081900360200190f35b6101846004803603604081101561022957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561046e565b6101a06004803603602081101561026257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b1565b6100d66104d9565b6101846004803603604081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610558565b610184600480360360408110156102d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561059e565b6101a06004803603604081101561030f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166105ab565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103f53384846105e3565b50600192915050565b60025490565b6000610411848484610652565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203380855292529091205461045b918691610456908661019e61077b565b6105e3565b5060019392505050565b60055460ff1690565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f59185906104569086610791565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f5918590610456908661019f61077b565b60006103f5338484610652565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61067673ffffffffffffffffffffffffffffffffffffffff841615156101986107aa565b61069a73ffffffffffffffffffffffffffffffffffffffff831615156101996107aa565b6106a58383836107bc565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020546106d890826101a061077b565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546107149082610791565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061078a84841115836107aa565b5050900390565b60008282016107a384821015836107aa565b9392505050565b816107b8576107b8816107c1565b5050565b505050565b6107eb817f42414c00000000000000000000000000000000000000000000000000000000006107ee565b50565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea2646970667358221220adfee3e4a53bb381ea6454054291caf3ccf884fd1de357eedd1e0665b338a43e64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xB0C CODESIZE SUB DUP1 PUSH2 0xB0C DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0x53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x82 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xAF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x97 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xDC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH2 0xFF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH2 0x114 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD PUSH5 0x100000000 DUP2 GT DUP3 DUP3 ADD DUP9 LT OR ISZERO PUSH2 0x12E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x15B JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x143 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x188 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP PUSH1 0x40 MSTORE POP POP DUP3 MLOAD PUSH2 0x1A2 SWAP2 POP PUSH1 0x3 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH2 0x1CB JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1B6 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH2 0x1CB JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP PUSH2 0x25E JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x20C JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x239 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x239 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x239 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x21E JUMP JUMPDEST POP PUSH2 0x245 SWAP3 SWAP2 POP PUSH2 0x249 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x24A JUMP JUMPDEST PUSH2 0x89F DUP1 PUSH2 0x26D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F5 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x110 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x404 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x465 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x46E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x4B1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x4D9 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x558 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x59E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5AB JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x411 DUP5 DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x45B SWAP2 DUP7 SWAP2 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19E PUSH2 0x77B JUMP JUMPDEST PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19F PUSH2 0x77B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x676 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x69A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x6A5 DUP4 DUP4 DUP4 PUSH2 0x7BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x6D8 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x77B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x714 SWAP1 DUP3 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78A DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x7A3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x7B8 JUMPI PUSH2 0x7B8 DUP2 PUSH2 0x7C1 JUMP JUMPDEST POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x7EB DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x7EE JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD INVALID 0xE3 0xE4 0xA5 EXTCODESIZE 0xB3 DUP2 0xEA PUSH5 0x54054291CA RETURN 0xCC 0xF8 DUP5 REVERT SAR 0xE3 JUMPI 0xEE 0xDD 0x1E MOD PUSH6 0xB338A43E6473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "1427:10003:51:-:0;;;2052:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2052:137:51;;;;;;;;;;-1:-1:-1;2052:137:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2052:137:51;;;;;;;;;;-1:-1:-1;2052:137:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2052:137:51;;-1:-1:-1;;2118:13:51;;;;-1:-1:-1;2118:5:51;;:13;;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;-1:-1:-1;;2168:14:51;2180:2;2168:14;;;-1:-1:-1;1427:10003:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1427:10003:51;;;-1:-1:-1;1427:10003:51;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610287578063a9059cbb146102c0578063dd62ed3e146102f9576100c9565b8063395093511461021357806370a082311461024c57806395d89b411461027f576100c9565b806318160ddd116100b257806318160ddd1461019857806323b872dd146101b2578063313ce567146101f5576100c9565b806306fdde03146100ce578063095ea7b31461014b575b600080fd5b6100d6610334565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101105781810151838201526020016100f8565b50505050905090810190601f16801561013d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101846004803603604081101561016157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103e8565b604080519115158252519081900360200190f35b6101a06103fe565b60408051918252519081900360200190f35b610184600480360360608110156101c857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610404565b6101fd610465565b6040805160ff9092168252519081900360200190f35b6101846004803603604081101561022957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561046e565b6101a06004803603602081101561026257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166104b1565b6100d66104d9565b6101846004803603604081101561029d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610558565b610184600480360360408110156102d657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561059e565b6101a06004803603604081101561030f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166105ab565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103f53384846105e3565b50600192915050565b60025490565b6000610411848484610652565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203380855292529091205461045b918691610456908661019e61077b565b6105e3565b5060019392505050565b60055460ff1690565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f59185906104569086610791565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103de5780601f106103b3576101008083540402835291602001916103de565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103f5918590610456908661019f61077b565b60006103f5338484610652565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61067673ffffffffffffffffffffffffffffffffffffffff841615156101986107aa565b61069a73ffffffffffffffffffffffffffffffffffffffff831615156101996107aa565b6106a58383836107bc565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020546106d890826101a061077b565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526020819052604080822093909355908416815220546107149082610791565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600061078a84841115836107aa565b5050900390565b60008282016107a384821015836107aa565b9392505050565b816107b8576107b8816107c1565b5050565b505050565b6107eb817f42414c00000000000000000000000000000000000000000000000000000000006107ee565b50565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea2646970667358221220adfee3e4a53bb381ea6454054291caf3ccf884fd1de357eedd1e0665b338a43e64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x39509351 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x287 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x2C0 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x2F9 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x39509351 EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x27F JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x18160DDD GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x1F5 JUMPI PUSH2 0xC9 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x14B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xD6 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x110 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xF8 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x13D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x161 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x1C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x404 JUMP JUMPDEST PUSH2 0x1FD PUSH2 0x465 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x229 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x46E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x4B1 JUMP JUMPDEST PUSH2 0xD6 PUSH2 0x4D9 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x558 JUMP JUMPDEST PUSH2 0x184 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x59E JUMP JUMPDEST PUSH2 0x1A0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x5AB JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x3C1 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x411 DUP5 DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD PUSH2 0x45B SWAP2 DUP7 SWAP2 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19E PUSH2 0x77B JUMP JUMPDEST PUSH2 0x5E3 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3DE JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x3B3 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3DE JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x3F5 SWAP2 DUP6 SWAP1 PUSH2 0x456 SWAP1 DUP7 PUSH2 0x19F PUSH2 0x77B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F5 CALLER DUP5 DUP5 PUSH2 0x652 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x676 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x69A PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x7AA JUMP JUMPDEST PUSH2 0x6A5 DUP4 DUP4 DUP4 PUSH2 0x7BC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x6D8 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x77B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x714 SWAP1 DUP3 PUSH2 0x791 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78A DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x7A3 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x7AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 PUSH2 0x7B8 JUMPI PUSH2 0x7B8 DUP2 PUSH2 0x7C1 JUMP JUMPDEST POP POP JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH2 0x7EB DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x7EE JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD INVALID 0xE3 0xE4 0xA5 EXTCODESIZE 0xB3 DUP2 0xEA PUSH5 0x54054291CA RETURN 0xCC 0xF8 DUP5 REVERT SAR 0xE3 JUMPI 0xEE 0xDD 0x1E MOD PUSH6 0xB338A43E6473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "1427:10003:51:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4857:164;;;;;;;;;;;;;;;;-1:-1:-1;4857:164:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3500:106;;;:::i;:::-;;;;;;;;;;;;;;;;5488:386;;;;;;;;;;;;;;;;-1:-1:-1;5488:386:51;;;;;;;;;;;;;;;;;;:::i;3156:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6269:211;;;;;;;;;;;;;;;;-1:-1:-1;6269:211:51;;;;;;;;;:::i;4022:117::-;;;;;;;;;;;;;;;;-1:-1:-1;4022:117:51;;;;:::i;2448:85::-;;;:::i;6967:312::-;;;;;;;;;;;;;;;;-1:-1:-1;6967:312:51;;;;;;;;;:::i;4342:170::-;;;;;;;;;;;;;;;;-1:-1:-1;4342:170:51;;;;;;;;;:::i;4570:149::-;;;;;;;;;;;;;;;;-1:-1:-1;4570:149:51;;;;;;;;;;;:::i;2254:81::-;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;:::o;3500:106::-;3587:12;;3500:106;:::o;5488:386::-;5624:4;5640:36;5650:6;5658:9;5669:6;5640:9;:36::i;:::-;5752:19;;;;;;;:11;:19;;;;;;;;5728:10;5752:31;;;;;;;;;5686:160;;5708:6;;5752:84;;5788:6;10712:3:10;5752:35:51;:84::i;:::-;5686:8;:160::i;:::-;-1:-1:-1;5863:4:51;5488:386;;;;;:::o;3156:81::-;3221:9;;;;3156:81;:::o;6269:211::-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;6357:4;;6373:79;;6394:7;;6403:48;;6440:10;6403:36;:48::i;4022:117::-;4114:18;;4088:7;4114:18;;;;;;;;;;;;4022:117::o;2448:85::-;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;6967:312;7098:10;7060:4;7143:23;;;:11;:23;;;;;;;;;:32;;;;;;;;;;7060:4;;7076:175;;7122:7;;7143:98;;7180:15;10786:3:10;7143:36:51;:98::i;4342:170::-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;4570:149::-;4685:18;;;;4659:7;4685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;10034:213::-;10157:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10208:32;;;;;;;;;;;;;;;;;10034:213;;;:::o;7753:559::-;7880:71;7889:20;;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;7970:23;;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;8122:17;;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;8102:17;;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;8200:20;;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;8200:20;;8270:35;;;;;;;;;;;;;7753:559;;;:::o;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;966:167::-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;:::-;1125:1;966:167;-1:-1:-1;;;966:167:54:o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;11245:183:51:-;;;;:::o;1437:126:10:-;1484:28;1492:9;1484:28;:7;:28::i;:::-;1437:126;:::o;1670:3378::-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14" + }, + "methodIdentifiers": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "increaseAllowance(address,uint256)": "39509351", + "name()": "06fdde03", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol": { + "ERC20Permit": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "increaseAllowance(address,uint256)": "39509351", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. _Available since v3.4._\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\\\"1\\\"`. It's a good idea to use the same `name` that is defined as the ERC20 token name.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":\"ERC20Permit\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol": { + "SafeCast": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220985624780af976161519156edf07744816d3181ac0ecbd930d5060b3c157a84d64736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 JUMP 0x24 PUSH25 0xAF976161519156EDF07744816D3181AC0ECBD930D5060B3C1 JUMPI 0xA8 0x4D PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "860:738:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220985624780af976161519156edf07744816d3181ac0ecbd930d5060b3c157a84d64736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP9 JUMP 0x24 PUSH25 0xAF976161519156EDF07744816D3181AC0ECBD930D5060B3C1 JUMPI 0xA8 0x4D PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "860:738:53:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always. Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing all math on `uint256` and `int256` and then downcasting.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]}},\"version\":1}" + } + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol": { + "SafeMath": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208de733befe43421e42ecd6828df7fc1b3cc1cb01b0655d4416f5e39cce9dfa0264736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xE7 CALLER 0xBE INVALID NUMBER TIMESTAMP 0x1E TIMESTAMP 0xEC 0xD6 DUP3 DUP14 0xF7 0xFC SHL EXTCODECOPY 0xC1 0xCB ADD 0xB0 PUSH6 0x5D4416F5E39C 0xCE SWAP14 STATICCALL MUL PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "714:1310:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208de733befe43421e42ecd6828df7fc1b3cc1cb01b0655d4416f5e39cce9dfa0264736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP14 0xE7 CALLER 0xBE INVALID NUMBER TIMESTAMP 0x1E TIMESTAMP 0xEC 0xD6 DUP3 DUP14 0xF7 0xFC SHL EXTCODECOPY 0xC1 0xCB ADD 0xB0 PUSH6 0x5D4416F5E39C 0xCE SWAP14 STATICCALL MUL PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "714:1310:54:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Wrappers over Solidity's arithmetic operations with added overflow checks. Arithmetic operations in Solidity wrap on overflow. This can easily result in bugs, because programmers usually assume that an overflow raises an error, which is the standard behavior in high level programming languages. `SafeMath` restores this intuition by reverting the transaction when an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":\"SafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]}},\"version\":1}" + } + }, + "contracts/ComposableStablePool.sol": { + "ComposableStablePool": { + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "protocolFeeProvider", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "contract IRateProvider[]", + "name": "rateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pauseWindowDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodDuration", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "internalType": "struct ComposableStablePool.NewPoolParams", + "name": "params", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "startValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "AmpUpdateStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "currentValue", + "type": "uint256" + } + ], + "name": "AmpUpdateStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolFeePercentageCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "TokenRateCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRateProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cacheDuration", + "type": "uint256" + } + ], + "name": "TokenRateProviderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getActualSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAmplificationParameter", + "outputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isUpdating", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "precision", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastJoinExitData", + "outputs": [ + { + "internalType": "uint256", + "name": "lastJoinExitAmplification", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitInvariant", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumBpt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getProtocolFeePercentageCache", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolSwapFeeDelegation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRateCache", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IPoolSwapStructs.SwapRequest", + "name": "swapRequest", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + } + ], + "name": "onSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setTokenRateCacheDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rawEndValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "startAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stopAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateProtocolFeePercentageCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "updateTokenRateCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6105006040523480156200001257600080fd5b5060405162007ff338038062007ff3833981016040819052620000359162001b55565b6020810151600019620000488362000d93565b620000538462000dcc565b8461010001518560000151600087604001518860600151620000808a608001513062000e1560201b60201c565b8a60800151516001016001600160401b03811180156200009f57600080fd5b50604051908082528060200260200182016040528015620000ca578160200160208202803683370190505b508b61012001518c61014001518d61016001518e6101800151828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200012c929190620017f2565b50805162000142906004906020840190620017f2565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001c090506276a70083111561019462000faf565b620001d462278d0082111561019562000faf565b4290910161014081905201610160528551620001f6906002111560c862000faf565b620002106200020462000fc4565b8751111560c962000faf565b620002268662000fc960201b6200154e1760201c565b620002318462000fd5565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f9062000262908d9060040162001ddb565b602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062001b1d565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002ed9084908b908b9060040162001d3f565b600060405180830381600087803b1580156200030857600080fd5b505af11580156200031d573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036457600080fd5b505afa15801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f919062001b36565b60601b6001600160601b0319166101a05250620003d1995050506001891015965061012c955062000faf945050505050565b620003e461138882111561012d62000faf565b6000620003ff826103e86200106960201b620015581760201c565b90506200040c8162001098565b5050805151620004216002821160c862000faf565b6200044660018203836020015151846040015151620010d760201b620015831760201c565b6101c0819052815180516000906200045a57fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200049157fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004c857fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620004fe57600062000517565b8151805160039081106200050e57fe5b60200260200101515b60601b6001600160601b03191661026052600481116200053957600062000552565b8151805160049081106200054957fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005745760006200058d565b8151805160059081106200058457fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005c69190600090620005b257fe5b6020026020010151620010f760201b60201c565b6102c05281518051620005e091906001908110620005b257fe5b6102e05281518051620005fa91906002908110620005b257fe5b61030052600381116200060f57600062000625565b620006258260000151600381518110620005b257fe5b61032052600481116200063a57600062000650565b620006508260000151600481518110620005b257fe5b6103405260058111620006655760006200067b565b6200067b8260000151600581518110620005b257fe5b61036052815151600019015b600081118015620006b857508251805130919083908110620006a557fe5b60200260200101516001600160a01b0316115b15620006c8576000190162000687565b6101e08190528251516060906001600160401b0381118015620006ea57600080fd5b5060405190808252806020026020018201604052801562000715578160200160208202803683370190505b50905060008080805b8751518110156200093857858110156200085457876020015181815181106200074357fe5b60200260200101518582815181106200075857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007c160006001600160a01b03168683815181106200079457fe5b60200260200101516001600160a01b031614158260060186620011c660201b620015a0179092919060201c565b935087604001518181518110620007d457fe5b60200260200101511562000849576200082060006001600160a01b0316868381518110620007fe57fe5b60200260200101516001600160a01b0316141561015562000faf60201b60201c565b6200083d60018286620011c660201b620015a0179092919060201c565b9350600192506200084e565b600191505b6200092f565b8581146200092f57876020015160018203815181106200087057fe5b60200260200101518582815181106200088557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008c160006001600160a01b03168683815181106200079457fe5b935087604001516001820381518110620008d757fe5b6020026020010151156200092a576200090160006001600160a01b0316868381518110620007fe57fe5b6200091e60018286620011c660201b620015a0179092919060201c565b9350600192506200092f565b600191505b6001016200071e565b50811560f890811b610460528115901b61048052835184906000906200095a57fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200098d57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009c057fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003845111620009f757600062000a0e565b8360038151811062000a0557fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a3157600062000a48565b8360048151811062000a3f57fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a6b57600062000a82565b8360058151811062000a7957fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000ac595509293509190620010d7811b6200158317901c565b805160609062000ad6903062000e15565b8051909150600019015b60008111801562000b165750306001600160a01b031682828151811062000b0357fe5b60200260200101516001600160a01b0316115b1562000b26576000190162000ae0565b6000805b84515181101562000c3f578281141562000b4357600191505b60208501518051828401916000918490811062000b5c57fe5b60200260200101516001600160a01b03161462000c355762000bb6818760200151848151811062000b8957fe5b60200260200101518860400151858151811062000ba257fe5b6020026020010151620011ef60201b60201c565b8560200151828151811062000bc757fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000c0b57fe5b602002602001015160405162000c22919062001df0565b60405180910390a362000c3581620012ea565b5060010162000b2a565b5050505050600019811460f881901b6104c0526001600160601b0319606084901b166104a05262000c7283600262001329565b62000c7f83600362001329565b801562000c995762000c9383600062001329565b62000d58565b60405163178b2b9360e21b815262000d2d906001600160a01b03851690635e2cae4c9062000ccd9060009060040162001df0565b60206040518083038186803b15801562000ce657600080fd5b505afa15801562000cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d21919062001b1d565b83111561025862000faf565b600060008051602062007fd38339815191528360405162000d4f919062001df0565b60405180910390a25b8062000d65578162000d68565b60005b6104e0525050506101a0810151805162000d8b91600d91602090910190620017f2565b505062001e62565b62000d9d62001873565b6040518060600160405280836080015181526020018360a0015181526020018360c0015181525090505b919050565b62000dd662001873565b604051806060016040528062000df784608001513062000e1560201b60201c565b81526020018360a0015181526020018360e001518152509050919050565b606082516001016001600160401b038111801562000e3257600080fd5b5060405190808252806020026020018201604052801562000e5d578160200160208202803683370190505b50905082516000141562000ea057818160008151811062000e7a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000fa9565b82515b60008111801562000edc5750826001600160a01b031684600183038151811062000ec957fe5b60200260200101516001600160a01b0316115b1562000f295783600182038151811062000ef257fe5b602002602001015182828151811062000f0757fe5b6001600160a01b03909216602092830291909101909101526000190162000ea3565b60005b8181101562000f785784818151811062000f4257fe5b602002602001015183828151811062000f5757fe5b6001600160a01b039092166020928302919091019091015260010162000f2c565b508282828151811062000f8757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000fc05762000fc081620014d4565b5050565b600690565b8062000fc081620014e9565b62000fee62000fe362001570565b82101560cb62000faf565b6200100762000ffc62001579565b82111560ca62000faf565b620010298160c0603f6008546200158560201b620015c717909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200105e90839062001df0565b60405180910390a150565b600082820262001091841580620010895750838583816200108657fe5b04145b600362000faf565b9392505050565b620010a681804280620015aa565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516200105e919062001df0565b620010f28284148015620010ea57508183145b606762000faf565b505050565b60006001600160a01b0382163014156200111b5750670de0b6b3a764000062000dc7565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200115757600080fd5b505afa1580156200116c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001192919062001d1c565b60ff1690506000620011b16012836200161d60201b620015ef1760201c565b600a0a670de0b6b3a764000002949350505050565b60006001821b1984168284620011de576000620011e1565b60015b60ff16901b17949350505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200122b57600080fd5b505afa15801562001240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001266919062001b1d565b6000858152600a602090815260409091205491925062001295908290849086906200160562001635821b17901c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620012db90859062001df0565b60405180910390a25050505050565b6000818152600a602090815260409091205490620013139082906200163d62001691821b17901c565b6000928352600a60205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200135a90859060040162001df0565b60206040518083038186803b1580156200137357600080fd5b505afa15801562001388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ae919062001b1d565b905081620013f257620013cc81620016bc60201b620016551760201c565b600b80546001600160401b0319166001600160401b0392909216919091179055620014a6565b600282141562001448576200141281620016bc60201b620016551760201c565b600b80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620014a6565b600382141562001499576200146881620016bc60201b620016551760201c565b600b80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620014a6565b620014a66101bb620014d4565b8160008051602062007fd383398151915282604051620014c7919062001df0565b60405180910390a2505050565b620014e6816210905360ea1b620016da565b50565b600281511015620014fa57620014e6565b6000816000815181106200150a57fe5b602002602001015190506000600190505b8251811015620010f25760008382815181106200153457fe5b6020026020010151905062001565816001600160a01b0316846001600160a01b031610606562000faf60201b60201c565b91506001016200151b565b64e8d4a5100090565b67016345785d8a000090565b6000620015948484846200173b565b506001901b60001901811b1992909216911b1790565b620015c48160c060406200179660201b620016721760201c565b620015de83608060406200179660201b620016721760201c565b620015f7856040806200179660201b620016721760201c565b6200161187600060406200179660201b620016721760201c565b17171760095550505050565b60006200162f83831115600162000faf565b50900390565b60006200164a606084901c1561014962000faf565b6200168942830160e06020620016738660c083838c8c60006060620015c762001585871b17861c565b6200158560201b620015c717909392919060201c565b949350505050565b600062000fa9620016a283620017ab565b606080856200158560201b620015c717909392919060201c565b6000620016d66001600160401b038311156101ba62000faf565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6200174c6101008310606462000faf565b62001785600182101580156200177d57506200177960ff8461010003620017cb60201b620016851760201c565b8211155b606462000faf565b620010f283821c156101b462000faf565b6000620017a58484846200173b565b50501b90565b600062000fa96000606084620017e360201b6200169b179092919060201c565b6000818310620017dc578162001091565b5090919050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200183557805160ff191683800117855562001865565b8280016001018555821562001865579182015b828111156200186557825182559160200191906001019062001848565b50620016d692915062001894565b60405180606001604052806060815260200160608152602001606081525090565b5b80821115620016d6576000815560010162001895565b805162000fa98162001e4c565b600082601f830112620018c9578081fd5b8151620018e0620018da8262001e20565b62001df9565b8181529150602080830190848101818402860182018710156200190257600080fd5b6000805b858110156200193257825180151581146200191f578283fd5b8552938301939183019160010162001906565b50505050505092915050565b600082601f8301126200194f578081fd5b815162001960620018da8262001e20565b8181529150602080830190848101818402860182018710156200198257600080fd5b60005b84811015620019ae5781516200199b8162001e4c565b8452928201929082019060010162001985565b505050505092915050565b600082601f830112620019ca578081fd5b8151620019db620018da8262001e20565b818152915060208083019084810181840286018201871015620019fd57600080fd5b60005b84811015620019ae57815162001a168162001e4c565b8452928201929082019060010162001a00565b600082601f83011262001a3a578081fd5b815162001a4b620018da8262001e20565b81815291506020808301908481018184028601820187101562001a6d57600080fd5b60005b84811015620019ae5781518452928201929082019060010162001a70565b600082601f83011262001a9f578081fd5b81516001600160401b0381111562001ab5578182fd5b602062001acb601f8301601f1916820162001df9565b9250818352848183860101111562001ae257600080fd5b60005b8281101562001b0257848101820151848201830152810162001ae5565b8281111562001b145760008284860101525b50505092915050565b60006020828403121562001b2f578081fd5b5051919050565b60006020828403121562001b48578081fd5b8151620010918162001e4c565b60006020828403121562001b67578081fd5b81516001600160401b038082111562001b7e578283fd5b81840191506101c080838703121562001b95578384fd5b62001ba08162001df9565b905062001bae8684620018ab565b815262001bbf8660208501620018ab565b602082015260408301518281111562001bd6578485fd5b62001be48782860162001a8e565b60408301525060608301518281111562001bfc578485fd5b62001c0a8782860162001a8e565b60608301525060808301518281111562001c22578485fd5b62001c30878286016200193e565b60808301525060a08301518281111562001c48578485fd5b62001c5687828601620019b9565b60a08301525060c08301518281111562001c6e578485fd5b62001c7c8782860162001a29565b60c08301525060e08301518281111562001c94578485fd5b62001ca287828601620018b8565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018062001ce587828601620018ab565b908201526101a0838101518381111562001cfd578586fd5b62001d0b8882870162001a8e565b918301919091525095945050505050565b60006020828403121562001d2e578081fd5b815160ff8116811462001091578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001d8b5762001d78855162001e40565b8352938301939183019160010162001d63565b505084810360408601528551808252908201925081860190845b8181101562001dcd5762001dba835162001e40565b8552938301939183019160010162001da5565b509298975050505050505050565b602081016003831062001dea57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001e1857600080fd5b604052919050565b60006001600160401b0382111562001e36578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620014e657600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6104a05160601c6104c05160f81c6104e051615fb36200202060003980610e2552508061090a52508061088a52806108b552806108e05250806147a9525080614785525080612b3c52806143fe525080611c5c525080611c2c525080611bfc525080611bcc525080611b9c525080611b6c525080612fcc525080612f9c525080612f6c525080612f3c525080612f0c525080612edc525080611eb9525080611e77525080611e35525080611df3525080611db1525080611d6f52508061104e5250806116ca525080611279525080610be4525080611b40525080611b1c52508061114e52508061112a525080611086525080612d4a525080612d8c525080612d6b5250615fb36000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806370464016116101d3578063a457c2d711610104578063d505accf116100a2578063ddf4627b1161007c578063ddf4627b146106e3578063eb0f24d6146106eb578063ed24911d146106f3578063f4b7964d146106fb57610378565b8063d505accf146106aa578063d5c096c4146106bd578063dd62ed3e146106d057610378565b8063ab7759f1116100de578063ab7759f11461067f578063b35056b814610692578063b7b814fc1461069a578063d2946c2b146106a257610378565b8063a457c2d714610651578063a9059cbb14610664578063aaabadc51461067757610378565b8063851c1bb311610171578063893d20e81161014b578063893d20e8146106195780638d928af81461062e57806390193b7c1461063657806395d89b411461064957610378565b8063851c1bb3146105eb578063876f303b146105fe57806387ec68171461060657610378565b80637ecebe00116101ad5780637ecebe00146105a55780637f1260d1146105b857806382687a56146105db5780638456cb59146105e357610378565b8063704640161461055e57806370a082311461057157806374f3b0091461058457610378565b80633644e515116102ad57806354a844ba1161024b57806355c676281161022557806355c67628146105165780636028bfd41461051e578063679aefce1461053f5780636daccffa1461054757610378565b806354a844ba146104f357806354dea00a146104fb57806354fd4d501461050e57610378565b8063395093511161028757806339509351146104af5780633c975d51146104c25780633f4ba83a146104d857806350dd6ed9146104e057610378565b80633644e5151461048c57806338e9922e1461049457806338fff2d0146104a757610378565b80631c0de0511161031a57806323b872dd116102f457806323b872dd1461043e5780632df2c7c0146104515780632f1a0bc914610464578063313ce5671461047757610378565b80631c0de051146103fd5780631dd746ea14610414578063238a2d591461042957610378565b8063095ea7b311610356578063095ea7b3146103c35780630da0669c146103e357806315b0015b146103ed57806318160ddd146103f557610378565b806301ec954a1461037d57806304842d4c146103a657806306fdde03146103ae575b600080fd5b61039061038b366004615a13565b61070e565b60405161039d9190615dc3565b60405180910390f35b6103906107b4565b6103b66107c3565b60405161039d9190615e99565b6103d66103d1366004615638565b610859565b60405161039d9190615da0565b6103eb610870565b005b6103d6610908565b61039061092c565b610405610932565b60405161039d93929190615dab565b61041c61095b565b60405161039d9190615d68565b610431610965565b60405161039d9190615d1b565b6103d661044c366004615588565b610a00565b6103eb61045f366004615534565b610a74565b6103eb610472366004615b62565b610ad0565b61047f610bb3565b60405161039d9190615f04565b610390610bbc565b6103eb6104a2366004615b32565b610bc6565b610390610be2565b6103d66104bd366004615638565b610c06565b6104ca610c41565b60405161039d929190615edb565b6103eb610c6c565b6103eb6104ee36600461584e565b610c7e565b6103eb610c9c565b610390610509366004615534565b610cae565b6103b6610cc9565b610390610d2a565b61053161052c36600461574f565b610d3d565b60405161039d929190615eac565b610390610d74565b61054f610de0565b60405161039d93929190615ec5565b61039061056c366004615b32565b610dfb565b61039061057f366004615534565b610ec1565b61059761059236600461574f565b610edc565b60405161039d929190615d7b565b6103906105b3366004615534565b610fdf565b6105cb6105c6366004615534565b610fea565b60405161039d9493929190615ee9565b61039061104c565b6103eb611070565b6103906105f93660046157f2565b611082565b6103906110d4565b61053161061436600461574f565b611102565b610621611128565b60405161039d9190615d07565b61062161114c565b610390610644366004615534565b611170565b6103b661118b565b6103d661065f366004615638565b6111ec565b6103d6610672366004615638565b61122a565b610621611237565b6103d661068d366004615534565b611241565b6103d6611254565b6103eb611265565b610621611277565b6103eb6106b83660046155c8565b61129b565b6105976106cb36600461574f565b611326565b6103906106de366004615550565b611449565b610390611486565b6103eb61148c565b6103906114b8565b6103eb610709366004615638565b6114c2565b6000846080015161073b61072061114c565b6001600160a01b0316336001600160a01b03161460cd6116aa565b610750610746610be2565b82146101f46116aa565b6107586116b8565b61076a84846107656116c8565b6116ec565b6060610774611704565b905060008751600181111561078557fe5b1461079c57610797878787878561179d565b6107a9565b6107a987878787856117f6565b979650505050505050565b60006107be611831565b905090565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b6000610866338484611838565b5060015b92915050565b6108786118a0565b610880610908565b156108b0576108b07f0000000000000000000000000000000000000000000000000000000000000000600061190d565b6108db7f0000000000000000000000000000000000000000000000000000000000000000600261190d565b6109067f0000000000000000000000000000000000000000000000000000000000000000600361190d565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b600080600061093f611afd565b15925061094a611b1a565b9150610954611b3e565b9050909192565b60606107be611704565b606060006109716116c8565b905060608167ffffffffffffffff8111801561098c57600080fd5b506040519080825280602002602001820160405280156109b6578160200160208202803683370190505b50905060005b828110156109f9576109cd81611b62565b8282815181106109d957fe5b6001600160a01b03909216602092830291909101909101526001016109bc565b5091505090565b600080610a0d8533611449565b9050610a31336001600160a01b0387161480610a295750838210155b61019e6116aa565b610a3c858585611c8b565b336001600160a01b03861614801590610a5757506000198114155b15610a6957610a698533858403611838565b506001949350505050565b6000610a7f82611d6b565b90506000610a8c82611b62565b9050610aa56001600160a01b03821615156101556116aa565b6000828152600a6020526040812054610abd90611ef9565b9050610aca838383611f08565b50505050565b610ad8611feb565b610ae8600183101561012c6116aa565b610af961138883111561012d6116aa565b6000610b0582426115ef565b9050610b196201518082101561013d6116aa565b600080610b24612031565b91509150610b35811561013e6116aa565b6000610b43866103e8611558565b90506000838211610b7257610b6d610b5e6201518086611558565b610b688488611558565b6120a5565b610b8c565b610b8c610b826201518084611558565b610b688688611558565b9050610b9e600282111561013f6116aa565b610baa848342896120d8565b50505050505050565b60055460ff1690565b60006107be6114b8565b610bce611feb565b610bd6612127565b610bdf8161213a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610866918590610c3c90866121b3565b611838565b600c546000908190610c568160e9601761169b565b9250610c6581600060e961169b565b9150509091565b610c74611feb565b61090660006121c5565b610c86611feb565b610c8e612127565b610c988282612256565b5050565b610ca4611feb565b6109066001612364565b6000610cc1610cbc83611d6b565b6123bb565b90505b919050565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6008546000906107be9060c0603f61169b565b60006060610d538651610d4e6116c8565b61240e565b610d688989898989898961241b61243d6124a6565b97509795505050505050565b60006060600080600080610d8661263d565b9398509196509450925090506000610d9e85856121b3565b90506000610daa612031565b5090506000848214610dc557610dc0828961272d565b610dc7565b835b9050610dd3818461288f565b9850505050505050505090565b6000806000610ded612031565b90949093506103e892509050565b6000610e05611254565b15610e1257506000610cc4565b81610e5e57610e1f610908565b610e49577f0000000000000000000000000000000000000000000000000000000000000000610e57565b600b5467ffffffffffffffff165b9050610cc4565b6002821415610e865750600b5468010000000000000000900467ffffffffffffffff16610cc4565b6003821415610eb65750600b54700100000000000000000000000000000000900467ffffffffffffffff16610cc4565b610cc46101bb6128e0565b6001600160a01b031660009081526020819052604090205490565b60608088610eeb61072061114c565b610ef6610746610be2565b60606000610f038661290a565b15610f2b57610f10612939565b610f2289610f1c61092c565b8861294c565b92509050610f7d565b610f336116b8565b6060610f3d611704565b9050610f498a82612990565b610f6d8d8d8d8d8d610f59611254565b610f63578d610f66565b60005b878e61241b565b93509150610f7b838261243d565b505b610f878b826129f9565b81895167ffffffffffffffff81118015610fa057600080fd5b50604051908082528060200260200182016040528015610fca578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610cc182611170565b6000806000806000600a6000610fff88611d6b565b815260208101919091526040016000205490506110208115156101556116aa565b61102981612a03565b945061103481612a11565b935061103f81612a1f565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611078611feb565b61090660016121c5565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016110b7929190615c91565b604051602081830303815290604052805190602001209050919050565b60008060006110e161263d565b505092509250506110fb81836121b390919063ffffffff16565b9250505090565b600060606111138651610d4e6116c8565b610d6889898989898989612a41612a526124a6565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6000806111f93385611449565b90508083106112135761120e33856000611838565b611220565b6112203385858403611838565b5060019392505050565b6000610866338484611c8b565b60006107be612abb565b6000610cc161124f83611d6b565b612b35565b6008546000906107be9060ff612b5d565b61126d611feb565b6109066000612364565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112ca8c611170565b896040516020016112e096959493929190615deb565b6040516020818303038152906040528051906020012090506113118882611308878787612b67565b886101f8612ba6565b61131c888888611838565b5050505050505050565b6060808861133561072061114c565b611340610746610be2565b6113486116b8565b6060611352611704565b905061135c61092c565b61140957600060606113718d8d8d868b612bfd565b9150915061138a611380611831565b83101560cc6116aa565b61139c6000611397611831565b612cd6565b6113af8b6113a8611831565b8403612cd6565b6113b98184612a52565b808a5167ffffffffffffffff811180156113d257600080fd5b506040519080825280602002602001820160405280156113fc578160200160208202803683370190505b5095509550505050610fd2565b6114138882612990565b6000606061143b8d8d8d8d8d611427611254565b611431578d611434565b60005b898e612a41565b915091506113af8b83612cd6565b600061145361114c565b6001600160a01b0316826001600160a01b03161415611475575060001961086a565b61147f8383612ce0565b905061086a565b60001981565b611494611feb565b60008061149f612031565b915091506114af816101406116aa565b610c9882612d0b565b60006107be612d46565b6114ca611feb565b60006114d583611d6b565b905060006114e282611b62565b90506114fb6001600160a01b03821615156101556116aa565b611506828285611f08565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516115409190615dc3565b60405180910390a350505050565b80610c9881612de3565b600082820261157c84158061157557508385838161157257fe5b04145b60036116aa565b9392505050565b61159b828414801561159457508183145b60676116aa565b505050565b60006001821b19841682846115b65760006115b9565b60015b60ff16901b17949350505050565b60006115d4848484612e5c565b5082821b6000196001831b01831b198516175b949350505050565b60006115ff8383111560016116aa565b50900390565b6000611618606084901c156101496116aa565b6115e742830160e060206116358660c083838c8c600060606115c7565b9291906115c7565b6000610cc161164b83612a03565b83906060806115c7565b600061166e67ffffffffffffffff8311156101ba6116aa565b5090565b600061167f848484612e5c565b50501b90565b6000818310611694578161157c565b5090919050565b6001901b6000190191901c1690565b81610c9857610c98816128e0565b6116c0612ea2565b610906612eaa565b7f000000000000000000000000000000000000000000000000000000000000000090565b61159b81841080156116fd57508183105b60646116aa565b606060006117106116c8565b905060608167ffffffffffffffff8111801561172b57600080fd5b50604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b828110156109f95761177e61176f826123bb565b61177883612ed2565b90612ff0565b82828151811061178a57fe5b602090810291909101015260010161175b565b60208501516000906001600160a01b03163014806117c7575060408601516001600160a01b031630145b6117dd576117d8868686868661301c565b6117ea565b6117ea8686868686613086565b90505b95945050505050565b60208501516000906001600160a01b0316301480611820575060408601516001600160a01b031630145b6117dd576117d8868686868661318a565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611893908590615dc3565b60405180910390a3505050565b6118a8612127565b606060008060006118b761263d565b94509450945050935060008311156118d2576118d2836131e1565b60006118dc612031565b50905060008382146118f7576118f2828761272d565b6118f9565b825b905061190582826131f2565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611955908590600401615dc3565b60206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190615b4a565b9050816119f3576119b581611655565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611ac0565b6002821415611a5057611a0581611655565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611ac0565b6003821415611ab557611a6281611655565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611ac0565b611ac06101bb6128e0565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611af09190615dc3565b60405180910390a2505050565b6000611b07611b3e565b4211806107be57505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611b9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415611bc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415611bf057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415611c2057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415611c5057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b610cc46101356128e0565b611ca26001600160a01b03841615156101986116aa565b611cb96001600160a01b03831615156101996116aa565b611cc483838361159b565b6001600160a01b038316600090815260208190526040902054611cea90826101a0613218565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d1990826121b3565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611893908590615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611daf57506000610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611df157506001610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e3357506002610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e7557506003610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611eb757506004610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c8057506005610cc4565b6000610cc18260c0602061169b565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615b4a565b6000858152600a6020526040902054909150611f98818385611605565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611fdc908590615dc3565b60405180910390a25050505050565b600061201a6000357fffffffff0000000000000000000000000000000000000000000000000000000016611082565b9050610bdf612029823361322e565b6101916116aa565b600080600080600080612042613317565b93509350935093508042101561209557600194508383111561207957818103824203858503028161206f57fe5b0484019550612090565b818103824203848603028161208a57fe5b04840395505b61209d565b600094508295505b505050509091565b60006120b482151560046116aa565b826120c15750600061086a565b8160018403816120cd57fe5b04600101905061086a565b6120e484848484613376565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516121199493929190615ee9565b60405180910390a150505050565b610906612132611afd565b6101926116aa565b61214f6121456133b5565b82101560cb6116aa565b61216461215a6133be565b82111560ca6116aa565b600854612175908260c0603f6115c7565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906121a8908390615dc3565b60405180910390a150565b600082820161157c84821015836116aa565b80156121e5576121e06121d6611b1a565b42106101936116aa565b6121fa565b6121fa6121f0611b3e565b42106101a96116aa565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906121a8908390615da0565b6000612260610be2565b9050600061226c61114c565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401612299929190615e64565b60806040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615b83565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250612336915085908790600401615e4b565b600060405180830381600087803b15801561235057600080fd5b505af115801561131c573d6000803e3d6000fd5b600854612373908260ff6115a0565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906123a6908390615da0565b60405180910390a180610bdf57610bdf6133ca565b60006123c561104c565b8214156123db5750670de0b6b3a7640000610cc4565b6000828152600a602052604090205480156123fe576123f981612a03565b61157c565b670de0b6b3a76400009392505050565b610c9881831460676116aa565b6000606061242c600088868661349c565b915091509850989650505050505050565b8151815161244c90829061240e565b60005b81811015610aca5761248784828151811061246657fe5b602002602001015184838151811061247a57fe5b602002602001015161288f565b84828151811061249357fe5b602090810291909101015260010161244f565b333014612595576000306001600160a01b03166000366040516124ca929190615cc1565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050806000811461251b57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612577573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61259d6116b8565b60606125a7611704565b90506125b38782612990565b600060606125cb8c8c8c8c8c8c898d8d63ffffffff16565b915091506125dd81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6060600080600080606061264f61114c565b6001600160a01b031663f94d4668612665610be2565b6040518263ffffffff1660e01b81526004016126819190615dc3565b60006040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190615663565b509150506126ea816126e5611704565b612990565b6126f38161354a565b965094506000612701610c41565b90945090506000612713888684613583565b945090506127218782613610565b95505050509091929394565b80516000908190815b8181101561276e5761276485828151811061274d57fe5b6020026020010151846121b390919063ffffffff16565b9250600101612736565b508161277f5760009250505061086a565b600082868302825b60ff811015612878578260005b868110156127d5576127cb6127a98387611558565b6127c68c84815181106127b857fe5b60200260200101518a611558565b613628565b9150600101612794565b5083945061282e61280d6128076127ec848a611558565b6128016127f9888d611558565b6103e8613628565b906121b3565b86611558565b6127c661281d8960010185611558565b6128016127f96103e889038a611558565b93508484111561285657600185850311612851578397505050505050505061086a565b61286f565b60018486031161286f578397505050505050505061086a565b50600101612787565b506128846101416128e0565b505050505092915050565b600061289e82151560046116aa565b826128ab5750600061086a565b670de0b6b3a7640000838102906128ce908583816128c557fe5b041460056116aa565b8281816128d757fe5b0491505061086a565b610bdf817f42414c0000000000000000000000000000000000000000000000000000000000613648565b6000808251118015610cc1575060ff80168280602001905181019061292f9190615bc3565b60ff161492915050565b610906612944611254565b6101b66116aa565b600060606000606061295d8761354a565b91509150600060606129708385896136c3565b91509150816129808260006136ef565b9550955050505050935093915050565b8151815161299f90829061240e565b60005b81811015610aca576129da8482815181106129b957fe5b60200260200101518483815181106129cd57fe5b6020026020010151612ff0565b8482815181106129e657fe5b60209081029190910101526001016129a2565b610c9882826137ac565b6000610cc18282606061169b565b6000610cc18260608061169b565b600080612a2b83611ef9565b9150612a3a8360e0602061169b565b9050915091565b6000606061242c600188868661349c565b81518151612a6190829061240e565b60005b81811015610aca57612a9c848281518110612a7b57fe5b6020026020010151848381518110612a8f57fe5b6020026020010151613878565b848281518110612aa857fe5b6020908102919091010152600101612a64565b6000612ac561114c565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190615832565b6000610cc17f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612bb1856138c6565b9050612bc7612bc18783876138e2565b836116aa565b612bd6428410156101b86116aa565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612c0c84613991565b9050612c276000826003811115612c1f57fe5b1460ce6116aa565b6060612c32856139a7565b9050612c408151875161240e565b612c4a8187612990565b6000612c54612031565b5090506060612c62836139bd565b90506000612c70838361272d565b9050806000612c8d6d8000000000000000000000000000836115ef565b9050612c998d82612cd6565b8086612ca361104c565b81518110612cad57fe5b602002602001018181525050612cc385846131f2565b509c939b50929950505050505050505050565b610c988282613a5f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612d1781824242613376565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516121a89190615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612db3613aec565b30604051602001612dc8959493929190615e1f565b60405160208183030381529060405280519060200120905090565b600281511015612df257610bdf565b600081600081518110612e0157fe5b602002602001015190506000600190505b825181101561159b576000838281518110612e2957fe5b60200260200101519050612e52816001600160a01b0316846001600160a01b03161060656116aa565b9150600101612e12565b612e6b610100831060646116aa565b612e93600182101580156116fd5750612e8960ff8461010003611685565b82111560646116aa565b61159b83821c156101b46116aa565b610906612127565b6000612eb46116c8565b905060005b81811015610c9857612eca81613af0565b600101612eb9565b600081612f0057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415612f3057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415612f6057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415612f9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415612fc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b600082820261300a84158061157557508385838161157257fe5b670de0b6b3a764000090049392505050565b60006130288583612990565b613049866060015183858151811061303c57fe5b6020026020010151613b44565b6060870152600061305c87878787613b50565b905061307b8184878151811061306e57fe5b6020026020010151613b64565b90506107a981613b70565b600080808751600181111561309757fe5b1490506130a48684612990565b6130c4876060015184836130b857866130ba565b875b8151811061303c57fe5b876060018181525050600060606000806130dd8a613b8c565b93509350935093506000806130f061104c565b8a1461311657613111878e60600151876131098e613bf5565b888b89613c2a565b613131565b613131878e60600151876131298f613bf5565b888b89613c63565b915091506131428486858985613c87565b8661315c57613157828a8d8151811061306e57fe5b613179565b613179828a8c8151811061316c57fe5b6020026020010151613d07565b9d9c50505050505050505050505050565b60006131998660600151613d13565b60608701526131a88583612990565b6131bc866060015183868151811061303c57fe5b606087015260006131cf87878787613d34565b90506107a98184868151811061316c57fe5b610bdf6131ec611277565b82612cd6565b6131ff81600060e9611672565b61320c8360e96017611672565b17600c55610c98613d48565b600061322784841115836116aa565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61324d611128565b6001600160a01b031614158015613268575061326883613d7e565b1561329057613275611128565b6001600160a01b0316336001600160a01b031614905061086a565b613298612abb565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016132c793929190615dcc565b60206040518083038186803b1580156132df57600080fd5b505afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f919061572f565b6000806000806133366000604060095461169b9092919063ffffffff16565b6009549094506133489060408061169b565b60095490935061335b906080604061169b565b60095490925061336e9060c0604061169b565b905090919293565b6133838160c06040611672565b6133908360806040611672565b61339c85604080611672565b6133a98760006040611672565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b60606133d461114c565b6001600160a01b031663f94d46686133ea610be2565b6040518263ffffffff1660e01b81526004016134069190615dc3565b60006040518083038186803b15801561341e57600080fd5b505afa158015613432573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261345a9190810190615663565b5091505061346a816126e5611704565b6060613475826139bd565b90506000613481612031565b5090506000613490828461272d565b9050610aca82826131f2565b60006060600060606000806134b089613b8c565b93509350935093506153d08a6134c857613d896134cc565b613e1e5b9050600060606134e4868689878f8f8963ffffffff16565b915091506153d08d6134f8576115ef6134fc565b6121b35b9050613509878383613e9c565b600061351989858463ffffffff16565b90506135288789888c85613c87565b836135348460006136ef565b9a509a5050505050505050505094509492505050565b600060606135718361355a61104c565b8151811061356457fe5b6020026020010151613f10565b61357a846139bd565b91509150915091565b60008060008060006135958888613f24565b92509250925060008684116135ab5760006135af565b8684035b905060008484116135c15760006135c5565b8484035b905060006135e06135d66000610dfb565b611778858761288f565b905060006135fb6135f16002610dfb565b611778858861288f565b919091019b939a509298505050505050505050565b600061157c61361f8484611558565b6127c684613fa6565b600061363782151560046116aa565b81838161364057fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000606060006136d284613fcc565b905060606136e1878784613fe2565b919791965090945050505050565b6060825160010167ffffffffffffffff8111801561370c57600080fd5b50604051908082528060200260200182016040528015613736578160200160208202803683370190505b50905060005b81518110156137a55761374d61104c565b8114613784578361375c61104c565b821061376b576001820361376d565b815b8151811061377757fe5b6020026020010151613786565b825b82828151811061379257fe5b602090810291909101015260010161373c565b5092915050565b6137c36001600160a01b038316151561019b6116aa565b6137cf8260008361159b565b6001600160a01b0382166000908152602081905260409020546137f590826101b2613218565b6001600160a01b0383166000908152602081905260409020556138286138238261381d61092c565b90614091565b61409f565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386c9190615dc3565b60405180910390a35050565b600061388782151560046116aa565b826138945750600061086a565b670de0b6b3a7640000838102906138ae908583816128c557fe5b8260018203816138ba57fe5b0460010191505061086a565b60006138d0612d46565b826040516020016110b7929190615cd1565b60006138f482516041146101b96116aa565b60208281015160408085015160608601518251600080825295019283905292939092811a9160019061392d908990859088908890615e7b565b6020604051602081039080840390855afa15801561394f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906139855750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610cc1919061595d565b60608180602001905181019061157c9190615978565b606080600183510367ffffffffffffffff811180156139db57600080fd5b50604051908082528060200260200182016040528015613a05578160200160208202803683370190505b50905060005b81518110156137a55783613a1d61104c565b8210613a2c5781600101613a2e565b815b81518110613a3857fe5b6020026020010151828281518110613a4c57fe5b6020908102919091010152600101613a0b565b613a6b6000838361159b565b613a7a6138238261280161092c565b6001600160a01b038216600090815260208190526040902054613a9d90826121b3565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061386c908590615dc3565b4690565b613af861104c565b811415613b0457610bdf565b6000818152600a60205260409020548015610c9857600080613b2583612a1f565b9150915080421115610aca57610aca84613b3e86611b62565b84611f08565b600061157c8383612ff0565b60006117ed600086606001518686866140a4565b600061157c8383613878565b6000610cc1613b85613b80610d2a565b613fa6565b8390613878565b60006060600080600080613b9e610c41565b91509150600060606000613bb38a8686614116565b9250925092506000613bc3612031565b5090506000868214613bde57613bd9828561272d565b613be0565b825b949c939b509099509297509095505050505050565b6000613c0c613c0261104c565b83141560646116aa565b613c1461104c565b821061166e57613c258260016115ef565b610cc1565b60008088613c4557613c4088888888888861416e565b613c53565b613c53888888888888614245565b9150915097509795505050505050565b60008088613c7957613c408888888888886142a6565b613c5388888888888861430c565b6000613c93868661272d565b90506000613ca1838561288f565b90506000613caf8683612ff0565b905080831115613cfd578083036000613cd9613cd383613cce84610dfb565b611558565b86613628565b90508015613cfa576000613ced8783613610565b9050613cf8816131e1565b505b50505b61131c88846131f2565b600061157c838361288f565b600080613d28613d21610d2a565b84906143bb565b905061157c83826115ef565b60006117ed600186606001518686866140a4565b6000613d526116c8565b905060005b81811015610c9857613d68816143f7565b15613d7657613d7681614426565b600101613d57565b6000610cc182614454565b600060606000613d988461445f565b90506001816002811115613da857fe5b1415613dc657613dbc87878a8c8989614475565b9250925050613e13565b6002816002811115613dd457fe5b1415613de557613dbc878a866144d4565b6000816002811115613df357fe5b1415613e0657613dbc87878a8c886144f2565b613e116101506128e0565b505b965096945050505050565b600060606000613e2d84613991565b90506001816003811115613e3d57fe5b1415613e5157613dbc87878a8c8989614593565b6003816003811115613e5f57fe5b1415613e7057613dbc878a866145e2565b6002816003811115613e7e57fe5b1415613e9157613dbc87878a8c88614600565b613e116101366128e0565b82518251613eab90829061240e565b60005b81811015613f0957613eea858281518110613ec557fe5b6020026020010151858381518110613ed957fe5b60200260200101518563ffffffff16565b858281518110613ef657fe5b6020908102919091010152600101613eae565b5050505050565b6000610cc182613f1e61092c565b906115ef565b6000806000613f3d84613f3887600161467a565b61272d565b9250613f47614783565b15613f6057613f56848661272d565b9150819050613f9f565b613f686147a7565b15613f8157829150613f7a848661272d565b9050613f9f565b613f9084613f3887600061467a565b9150613f9c848661272d565b90505b9250925092565b6000670de0b6b3a76400008210613fbe576000610cc1565b50670de0b6b3a76400000390565b60008180602001905181019061157c9190615bdf565b60606000613ff0838561288f565b9050845167ffffffffffffffff8111801561400a57600080fd5b50604051908082528060200260200182016040528015614034578160200160208202803683370190505b50915060005b8551811015614088576140698287838151811061405357fe5b6020026020010151612ff090919063ffffffff16565b83828151811061407557fe5b602090810291909101015260010161403a565b50509392505050565b600061157c83836001613218565b600255565b600060606140b1856139bd565b905060006140be85613bf5565b905060006140cb85613bf5565b905060006140d7612031565b50905060006140e6828661272d565b90508a15614108576140fc828686868e866147cb565b955050505050506117ed565b6140fc828686868e86614856565b6000606060008060606141288861354a565b9150915060008061413a838a8a613583565b91509150600061414a8584613610565b9050801561415b5761415b816131e1565b9390930199919850919650945050505050565b6000806060875167ffffffffffffffff8111801561418b57600080fd5b506040519080825280602002602001820160405280156141b5578160200160208202803683370190505b509050888188815181106141c557fe5b60200260200101818152505060006141e8878a8489896141e3610d2a565b6148e9565b90506142108a8a8a815181106141fa57fe5b60200260200101516115ef90919063ffffffff16565b89898151811061421c57fe5b6020908102919091010152600061423387836115ef565b919b919a509098505050505050505050565b60008060006142608689898c898961425b610d2a565b614b79565b9050614272818989815181106141fa57fe5b88888151811061427e57fe5b60209081029190910101526000614295868b6115ef565b919a91995090975050505050505050565b60008060006142c18689898c89896142bc610d2a565b614c68565b90506142e9818989815181106142d357fe5b60200260200101516121b390919063ffffffff16565b8888815181106142f557fe5b60209081029190910101526000614295868b6121b3565b6000806060875167ffffffffffffffff8111801561432957600080fd5b50604051908082528060200260200182016040528015614353578160200160208202803683370190505b5090508881888151811061436357fe5b6020026020010181815250506000614386878a848989614381610d2a565b614d35565b90506143988a8a8a815181106142d357fe5b8989815181106143a457fe5b6020908102919091010152600061423387836121b3565b60008282026143d584158061157557508385838161157257fe5b806143e457600091505061086a565b670de0b6b3a764000060001982016138ba565b6000610cc17f000000000000000000000000000000000000000000000000000000000000000060068401612b5d565b6000818152600a602052604090205461443e8161163d565b6000928352600a60205260409092209190915550565b6000610cc182614fb6565b600081806020019051810190610cc1919061589c565b6000606080600061448585614ff2565b915091506144958251885161240e565b6144a2826126e5886139bd565b60006144b48989858e8e6141e3610d2a565b90506144c48282111560cf6116aa565b9a91995090975050505050505050565b6000606060006144e384615015565b905060606136e1868884613fe2565b600060606000806145028561502b565b915091506145148651821060646116aa565b6060865167ffffffffffffffff8111801561452e57600080fd5b50604051908082528060200260200182016040528015614558578160200160208202803683370190505b50905061456c888884868e8e61425b610d2a565b81838151811061457857fe5b60209081029190910101529199919850909650505050505050565b600060608060006145a385615042565b915091506145b38751835161240e565b6145c0826126e5886139bd565b60006145d28989858e8e614381610d2a565b90506144c48282101560d06116aa565b6000606060006145f18461505a565b905060606136e1868389615070565b600060606000806146108561510c565b915091506146228651821060646116aa565b6060865167ffffffffffffffff8111801561463c57600080fd5b50604051908082528060200260200182016040528015614666578160200160208202803683370190505b50905061456c888884868e8e6142bc610d2a565b8151606090818167ffffffffffffffff8111801561469757600080fd5b506040519080825280602002602001820160405280156146c1578160200160208202803683370190505b50905060005b8281101561477a5760006146d961104c565b8210156146e657816146eb565b816001015b90506146f681612b35565b8061470d575085801561470d575061470d816143f7565b61472a5786828151811061471d57fe5b602002602001015161475a565b61475a87838151811061473957fe5b6020026020010151600a600084815260200190815260200160002054615123565b83838151811061476657fe5b6020908102919091010152506001016146c7565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006147dd838787815181106142d357fe5b8686815181106147e957fe5b60200260200101818152505060006148038888858861513e565b90508387878151811061481257fe5b60200260200101510387878151811061482757fe5b6020026020010181815250506148486001613f1e838a89815181106141fa57fe5b9150505b9695505050505050565b6000614868838786815181106141fa57fe5b86858151811061487457fe5b602002602001018181525050600061488e8888858961513e565b90508387868151811061489d57fe5b6020026020010151018786815181106148b257fe5b60200260200101818152505061484860016128018989815181106148d257fe5b6020026020010151846115ef90919063ffffffff16565b600080805b87518110156149275761491d88828151811061490657fe5b6020026020010151836121b390919063ffffffff16565b91506001016148ee565b506060865167ffffffffffffffff8111801561494257600080fd5b5060405190808252806020026020018201604052801561496c578160200160208202803683370190505b5090506000805b8951811015614a395760006149a4858c848151811061498e57fe5b602002602001015161387890919063ffffffff16565b90506149e68b83815181106149b557fe5b60200260200101516149e08c85815181106149cc57fe5b60200260200101518e86815181106141fa57fe5b90613878565b8483815181106149f257fe5b602002602001018181525050614a2e614a2782868581518110614a1157fe5b60200260200101516143bb90919063ffffffff16565b84906121b3565b925050600101614973565b506060895167ffffffffffffffff81118015614a5457600080fd5b50604051908082528060200260200182016040528015614a7e578160200160208202803683370190505b50905060005b8a51811015614b49576000848281518110614a9b57fe5b6020026020010151841115614b02576000614ac4614ab886613fa6565b8e858151811061405357fe5b90506000614ad8828e86815181106141fa57fe5b9050614af9614af282670de0b6b3a76400008d9003613878565b83906121b3565b92505050614b19565b8a8281518110614b0e57fe5b602002602001015190505b614b29818d84815181106141fa57fe5b838381518110614b3557fe5b602090810291909101015250600101614a84565b506000614b568c8361272d565b90506000614b64828a61288f565b9050613179614b7282613fa6565b8b906143bb565b600080614b9484614b8e876149e0818b6115ef565b906143bb565b90506000614ba48a8a848b61513e565b90506000614bb8828b8b815181106141fa57fe5b90506000805b8b51811015614be057614bd68c828151811061490657fe5b9150600101614bbe565b506000614c09828d8d81518110614bf357fe5b602002602001015161288f90919063ffffffff16565b90506000614c1682613fa6565b90506000614c2485836143bb565b90506000614c3286836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003612ff0565b82906121b3565b98505050505050505050979650505050505050565b600080614c7d84614b8e876149e0818b6121b3565b90506000614c8d8a8a848b61513e565b90506000614cb78a8a81518110614ca057fe5b6020026020010151836115ef90919063ffffffff16565b90506000805b8b51811015614cdf57614cd58c828151811061490657fe5b9150600101614cbd565b506000614cf2828d8d81518110614bf357fe5b90506000614cff82613fa6565b90506000614d0d85836143bb565b90506000614d1b86836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003613878565b600080805b8751811015614d5c57614d5288828151811061490657fe5b9150600101614d3a565b506060865167ffffffffffffffff81118015614d7757600080fd5b50604051908082528060200260200182016040528015614da1578160200160208202803683370190505b5090506000805b8951811015614e3b576000614dc3858c8481518110614bf357fe5b9050614e058b8381518110614dd457fe5b6020026020010151614dff8c8581518110614deb57fe5b60200260200101518e86815181106142d357fe5b9061288f565b848381518110614e1157fe5b602002602001018181525050614e30614a278286858151811061405357fe5b925050600101614da8565b506060895167ffffffffffffffff81118015614e5657600080fd5b50604051908082528060200260200182016040528015614e80578160200160208202803683370190505b50905060005b8a51811015614f4157600083858381518110614e9e57fe5b60200260200101511115614efa576000614ec3614ab886670de0b6b3a76400006115ef565b90506000614ed7828e86815181106141fa57fe5b9050614ef1614af282670de0b6b3a76400008d9003612ff0565b92505050614f11565b8a8281518110614f0657fe5b602002602001015190505b614f21818d84815181106142d357fe5b838381518110614f2d57fe5b602090810291909101015250600101614e86565b506000614f4e8c8361272d565b90506000614f5c828a61288f565b9050670de0b6b3a7640000811115614fa757614f9a8a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c00008301612ff0565b965050505050505061484c565b6000965050505050505061484c565b6000614fe17ff4b7964d00000000000000000000000000000000000000000000000000000000611082565b821480610cc15750610cc1826152fb565b606060008280602001905181019061500a91906158b7565b909590945092505050565b60008180602001905181019061157c91906158fc565b6000808280602001905181019061500a9190615928565b606060008280602001905181019061500a91906159bb565b60008180602001905181019061157c91906159d9565b6060600061507e8484613878565b90506060855167ffffffffffffffff8111801561509a57600080fd5b506040519080825280602002602001820160405280156150c4578160200160208202803683370190505b50905060005b8651811015615102576150e383888381518110614a1157fe5b8282815181106150ef57fe5b60209081029190910101526001016150ca565b5095945050505050565b6000808280602001905181019061500a91906159f5565b600061157c61513584613cce85612a11565b6127c684612a03565b60008084518602905060008560008151811061515657fe5b60200260200101519050600086518760008151811061517157fe5b60200260200101510290506000600190505b87518110156151d7576151bc6151b66151af848b85815181106151a257fe5b6020026020010151611558565b8a51611558565b88613628565b91506151cd88828151811061274d57fe5b9250600101615183565b508685815181106151e457fe5b60200260200101518203915060006151fc8788611558565b9050600061522861521c61521484610b688988611558565b6103e8611558565b8a89815181106151a257fe5b9050600061524361523c6152148b89613628565b86906121b3565b905060008061525f61525586866121b3565b610b688d866121b3565b905060005b60ff8110156152df57819250615294615281866128018586611558565b610b688e613f1e88612801886002611558565b9150828211156152bd576001838303116152b8575097506115e79650505050505050565b6152d7565b6001828403116152d7575097506115e79650505050505050565b600101615264565b506152eb6101426128e0565b5050505050505050949350505050565b60006153267f2f1a0bc900000000000000000000000000000000000000000000000000000000611082565b82148061535a57506153577feb0f24d600000000000000000000000000000000000000000000000000000000611082565b82145b80610cc15750610cc182600061538f7f38e9922e00000000000000000000000000000000000000000000000000000000611082565b8214806153c357506153c07f50dd6ed900000000000000000000000000000000000000000000000000000000611082565b82145b80610cc157506000610cc1565bfe5b803561086a81615f59565b600082601f8301126153ed578081fd5b81356154006153fb82615f39565b615f12565b81815291506020808301908481018184028601820187101561542157600080fd5b60005b8481101561288457813584529282019290820190600101615424565b600082601f830112615450578081fd5b815161545e6153fb82615f39565b81815291506020808301908481018184028601820187101561547f57600080fd5b60005b8481101561288457815184529282019290820190600101615482565b600082601f8301126154ae578081fd5b813567ffffffffffffffff8111156154c4578182fd5b6154d76020601f19601f84011601615f12565b91508082528360208285010111156154ee57600080fd5b8060208401602084013760009082016020015292915050565b80516003811061086a57600080fd5b80516004811061086a57600080fd5b80356002811061086a57600080fd5b600060208284031215615545578081fd5b813561157c81615f59565b60008060408385031215615562578081fd5b823561556d81615f59565b9150602083013561557d81615f59565b809150509250929050565b60008060006060848603121561559c578081fd5b83356155a781615f59565b925060208401356155b781615f59565b929592945050506040919091013590565b600080600080600080600060e0888a0312156155e2578283fd5b87356155ed81615f59565b965060208801356155fd81615f59565b95506040880135945060608801359350608088013561561b81615f6e565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561564a578182fd5b823561565581615f59565b946020939093013593505050565b600080600060608486031215615677578081fd5b835167ffffffffffffffff8082111561568e578283fd5b818601915086601f8301126156a1578283fd5b81516156af6153fb82615f39565b80828252602080830192508086018b8283870289010111156156cf578788fd5b8796505b848710156156fa5780516156e681615f59565b8452600196909601959281019281016156d3565b508901519097509350505080821115615711578283fd5b5061571e86828701615440565b925050604084015190509250925092565b600060208284031215615740578081fd5b8151801515811461157c578182fd5b600080600080600080600060e0888a031215615769578081fd5b87359650602088013561577b81615f59565b9550604088013561578b81615f59565b9450606088013567ffffffffffffffff808211156157a7578283fd5b6157b38b838c016153dd565b955060808a0135945060a08a0135935060c08a01359150808211156157d6578283fd5b506157e38a828b0161549e565b91505092959891949750929550565b600060208284031215615803578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461157c578182fd5b600060208284031215615843578081fd5b815161157c81615f59565b60008060408385031215615860578182fd5b823561586b81615f59565b9150602083013567ffffffffffffffff811115615886578182fd5b6158928582860161549e565b9150509250929050565b6000602082840312156158ad578081fd5b61157c8383615507565b6000806000606084860312156158cb578081fd5b6158d58585615507565b9250602084015167ffffffffffffffff8111156158f0578182fd5b61571e86828701615440565b6000806040838503121561590e578182fd5b6159188484615507565b9150602083015190509250929050565b60008060006060848603121561593c578081fd5b6159468585615507565b925060208401519150604084015190509250925092565b60006020828403121561596e578081fd5b61157c8383615516565b6000806040838503121561598a578182fd5b6159948484615516565b9150602083015167ffffffffffffffff8111156159af578182fd5b61589285828601615440565b6000806000606084860312156159cf578081fd5b6158d58585615516565b600080604083850312156159eb578182fd5b6159188484615516565b600080600060608486031215615a09578081fd5b6159468585615516565b60008060008060808587031215615a28578182fd5b843567ffffffffffffffff80821115615a3f578384fd5b818701915061012080838a031215615a55578485fd5b615a5e81615f12565b9050615a6a8984615525565b8152615a7989602085016153d2565b6020820152615a8b89604085016153d2565b6040820152606083013560608201526080830135608082015260a083013560a0820152615abb8960c085016153d2565b60c0820152615acd8960e085016153d2565b60e08201526101008084013583811115615ae5578687fd5b615af18b82870161549e565b828401525050809650506020870135915080821115615b0e578384fd5b50615b1b878288016153dd565b949794965050505060408301359260600135919050565b600060208284031215615b43578081fd5b5035919050565b600060208284031215615b5b578081fd5b5051919050565b60008060408385031215615b74578182fd5b50508035926020909101359150565b60008060008060808587031215615b98578182fd5b8451935060208501519250604085015191506060850151615bb881615f59565b939692955090935050565b600060208284031215615bd4578081fd5b815161157c81615f6e565b60008060408385031215615bf1578182fd5b8251615bfc81615f6e565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615c3b57815187529582019590820190600101615c1f565b509495945050505050565b60008151808452815b81811015615c6b57602081850181015186830182015201615c4f565b81811115615c7c5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015615d5c5783516001600160a01b031683529284019291840191600101615d37565b50909695505050505050565b60006020825261157c6020830184615c0c565b600060408252615d8e6040830185615c0c565b82810360208401526117ed8185615c0c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526115e76040830184615c46565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261157c6020830184615c46565b6000838252604060208301526115e76040830184615c0c565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715615f3157600080fd5b604052919050565b600067ffffffffffffffff821115615f4f578081fd5b5060209081020190565b6001600160a01b0381168114610bdf57600080fd5b60ff81168114610bdf57600080fdfea2646970667358221220dcc30bf1aa1b16ae6ad0c83c0807514f1e6fdbe66d9e246a013ce46ba54d53bf64736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a", + "opcodes": "PUSH2 0x500 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x7FF3 CODESIZE SUB DUP1 PUSH3 0x7FF3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x1B55 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x0 NOT PUSH3 0x48 DUP4 PUSH3 0xD93 JUMP JUMPDEST PUSH3 0x53 DUP5 PUSH3 0xDCC JUMP JUMPDEST DUP5 PUSH2 0x100 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH3 0x80 DUP11 PUSH1 0x80 ADD MLOAD ADDRESS PUSH3 0xE15 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP11 PUSH1 0x80 ADD MLOAD MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP12 PUSH2 0x120 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x160 ADD MLOAD DUP15 PUSH2 0x180 ADD MLOAD DUP3 DUP3 DUP10 DUP10 DUP14 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SHL DUP5 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP8 DUP8 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x12C SWAP3 SWAP2 SWAP1 PUSH3 0x17F2 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x142 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x17F2 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x100 MSTORE SWAP2 SWAP1 SHL AND PUSH2 0x120 MSTORE POP PUSH3 0x1C0 SWAP1 POP PUSH3 0x76A700 DUP4 GT ISZERO PUSH2 0x194 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1D4 PUSH3 0x278D00 DUP3 GT ISZERO PUSH2 0x195 PUSH3 0xFAF JUMP JUMPDEST TIMESTAMP SWAP1 SWAP2 ADD PUSH2 0x140 DUP2 SWAP1 MSTORE ADD PUSH2 0x160 MSTORE DUP6 MLOAD PUSH3 0x1F6 SWAP1 PUSH1 0x2 GT ISZERO PUSH1 0xC8 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x210 PUSH3 0x204 PUSH3 0xFC4 JUMP JUMPDEST DUP8 MLOAD GT ISZERO PUSH1 0xC9 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x226 DUP7 PUSH3 0xFC9 PUSH1 0x20 SHL PUSH3 0x154E OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x231 DUP5 PUSH3 0xFD5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9B2760F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x9B2760F SWAP1 PUSH3 0x262 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH3 0x1DDB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x292 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x2B8 SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3354E3E9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x66A9C7D2 SWAP1 PUSH3 0x2ED SWAP1 DUP5 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH3 0x1D3F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x31D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x180 DUP2 DUP2 MSTORE POP POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD2946C2B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x379 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x39F SWAP2 SWAP1 PUSH3 0x1B36 JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x1A0 MSTORE POP PUSH3 0x3D1 SWAP10 POP POP POP PUSH1 0x1 DUP10 LT ISZERO SWAP7 POP PUSH2 0x12C SWAP6 POP PUSH3 0xFAF SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH3 0x3E4 PUSH2 0x1388 DUP3 GT ISZERO PUSH2 0x12D PUSH3 0xFAF JUMP JUMPDEST PUSH1 0x0 PUSH3 0x3FF DUP3 PUSH2 0x3E8 PUSH3 0x1069 PUSH1 0x20 SHL PUSH3 0x1558 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH3 0x40C DUP2 PUSH3 0x1098 JUMP JUMPDEST POP POP DUP1 MLOAD MLOAD PUSH3 0x421 PUSH1 0x2 DUP3 GT PUSH1 0xC8 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x446 PUSH1 0x1 DUP3 SUB DUP4 PUSH1 0x20 ADD MLOAD MLOAD DUP5 PUSH1 0x40 ADD MLOAD MLOAD PUSH3 0x10D7 PUSH1 0x20 SHL PUSH3 0x1583 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH3 0x45A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x200 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x491 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x4C8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x240 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP2 GT PUSH3 0x4FE JUMPI PUSH1 0x0 PUSH3 0x517 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x3 SWAP1 DUP2 LT PUSH3 0x50E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x260 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x539 JUMPI PUSH1 0x0 PUSH3 0x552 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x4 SWAP1 DUP2 LT PUSH3 0x549 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x280 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x574 JUMPI PUSH1 0x0 PUSH3 0x58D JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x5 SWAP1 DUP2 LT PUSH3 0x584 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x2A0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5C6 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x10F7 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2C0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5E0 SWAP2 SWAP1 PUSH1 0x1 SWAP1 DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x2E0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5FA SWAP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x300 MSTORE PUSH1 0x3 DUP2 GT PUSH3 0x60F JUMPI PUSH1 0x0 PUSH3 0x625 JUMP JUMPDEST PUSH3 0x625 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x320 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x63A JUMPI PUSH1 0x0 PUSH3 0x650 JUMP JUMPDEST PUSH3 0x650 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x340 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x665 JUMPI PUSH1 0x0 PUSH3 0x67B JUMP JUMPDEST PUSH3 0x67B DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x360 MSTORE DUP2 MLOAD MLOAD PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0x6B8 JUMPI POP DUP3 MLOAD DUP1 MLOAD ADDRESS SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH3 0x6A5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x6C8 JUMPI PUSH1 0x0 NOT ADD PUSH3 0x687 JUMP JUMPDEST PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP3 MLOAD MLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x6EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x715 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0x938 JUMPI DUP6 DUP2 LT ISZERO PUSH3 0x854 JUMPI DUP8 PUSH1 0x20 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x743 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x758 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x7C1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x794 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP3 PUSH1 0x6 ADD DUP7 PUSH3 0x11C6 PUSH1 0x20 SHL PUSH3 0x15A0 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x7D4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x849 JUMPI PUSH3 0x820 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x155 PUSH3 0xFAF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x83D PUSH1 0x1 DUP3 DUP7 PUSH3 0x11C6 PUSH1 0x20 SHL PUSH3 0x15A0 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x84E JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH3 0x92F JUMP JUMPDEST DUP6 DUP2 EQ PUSH3 0x92F JUMPI DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x870 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x885 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x8C1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x794 JUMPI INVALID JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x8D7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x92A JUMPI PUSH3 0x901 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7FE JUMPI INVALID JUMPDEST PUSH3 0x91E PUSH1 0x1 DUP3 DUP7 PUSH3 0x11C6 PUSH1 0x20 SHL PUSH3 0x15A0 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x92F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH3 0x71E JUMP JUMPDEST POP DUP2 ISZERO PUSH1 0xF8 SWAP1 DUP2 SHL PUSH2 0x460 MSTORE DUP2 ISZERO SWAP1 SHL PUSH2 0x480 MSTORE DUP4 MLOAD DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x95A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x380 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x98D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x9C0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3C0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP5 MLOAD GT PUSH3 0x9F7 JUMPI PUSH1 0x0 PUSH3 0xA0E JUMP JUMPDEST DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0xA05 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x3E0 MSTORE DUP4 MLOAD PUSH1 0x4 LT PUSH3 0xA31 JUMPI PUSH1 0x0 PUSH3 0xA48 JUMP JUMPDEST DUP4 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0xA3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x400 MSTORE DUP4 MLOAD PUSH1 0x5 LT PUSH3 0xA6B JUMPI PUSH1 0x0 PUSH3 0xA82 JUMP JUMPDEST DUP4 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0xA79 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x420 MSTORE POP POP PUSH2 0x440 MSTORE POP POP DUP3 MLOAD MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD MLOAD PUSH1 0x40 DUP7 ADD MLOAD MLOAD PUSH3 0xAC5 SWAP6 POP SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH3 0x10D7 DUP2 SHL PUSH3 0x1583 OR SWAP1 SHR JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH3 0xAD6 SWAP1 ADDRESS PUSH3 0xE15 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xB16 JUMPI POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xB03 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xB26 JUMPI PUSH1 0x0 NOT ADD PUSH3 0xAE0 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0xC3F JUMPI DUP3 DUP2 EQ ISZERO PUSH3 0xB43 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP1 MLOAD DUP3 DUP5 ADD SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0xB5C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH3 0xC35 JUMPI PUSH3 0xBB6 DUP2 DUP8 PUSH1 0x20 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH3 0xB89 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xBA2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x11EF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xBC7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xC0B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH3 0xC22 SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH3 0xC35 DUP2 PUSH3 0x12EA JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH3 0xB2A JUMP JUMPDEST POP POP POP POP POP PUSH1 0x0 NOT DUP2 EQ PUSH1 0xF8 DUP2 SWAP1 SHL PUSH2 0x4C0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH2 0x4A0 MSTORE PUSH3 0xC72 DUP4 PUSH1 0x2 PUSH3 0x1329 JUMP JUMPDEST PUSH3 0xC7F DUP4 PUSH1 0x3 PUSH3 0x1329 JUMP JUMPDEST DUP1 ISZERO PUSH3 0xC99 JUMPI PUSH3 0xC93 DUP4 PUSH1 0x0 PUSH3 0x1329 JUMP JUMPDEST PUSH3 0xD58 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x178B2B93 PUSH1 0xE2 SHL DUP2 MSTORE PUSH3 0xD2D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x5E2CAE4C SWAP1 PUSH3 0xCCD SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xCE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xD21 SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x258 PUSH3 0xFAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x7FD3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH3 0xD4F SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP1 PUSH3 0xD65 JUMPI DUP2 PUSH3 0xD68 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x4E0 MSTORE POP POP POP PUSH2 0x1A0 DUP2 ADD MLOAD DUP1 MLOAD PUSH3 0xD8B SWAP2 PUSH1 0xD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x17F2 JUMP JUMPDEST POP POP PUSH3 0x1E62 JUMP JUMPDEST PUSH3 0xD9D PUSH3 0x1873 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0xDD6 PUSH3 0x1873 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0xDF7 DUP5 PUSH1 0x80 ADD MLOAD ADDRESS PUSH3 0xE15 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xE32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xE5D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 MLOAD PUSH1 0x0 EQ ISZERO PUSH3 0xEA0 JUMPI DUP2 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xE7A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xFA9 JUMP JUMPDEST DUP3 MLOAD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xEDC JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH3 0xEC9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xF29 JUMPI DUP4 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xEF2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF07 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x0 NOT ADD PUSH3 0xEA3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xF78 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xF42 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF57 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH3 0xF2C JUMP JUMPDEST POP DUP3 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF87 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH3 0xFC0 JUMPI PUSH3 0xFC0 DUP2 PUSH3 0x14D4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST DUP1 PUSH3 0xFC0 DUP2 PUSH3 0x14E9 JUMP JUMPDEST PUSH3 0xFEE PUSH3 0xFE3 PUSH3 0x1570 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1007 PUSH3 0xFFC PUSH3 0x1579 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1029 DUP2 PUSH1 0xC0 PUSH1 0x3F PUSH1 0x8 SLOAD PUSH3 0x1585 PUSH1 0x20 SHL PUSH3 0x15C7 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH3 0x105E SWAP1 DUP4 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH3 0x1091 DUP5 ISZERO DUP1 PUSH3 0x1089 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH3 0x1086 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH3 0xFAF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x10A6 DUP2 DUP1 TIMESTAMP DUP1 PUSH3 0x15AA JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH3 0x105E SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH3 0x10F2 DUP3 DUP5 EQ DUP1 ISZERO PUSH3 0x10EA JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH3 0xFAF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0x111B JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH3 0xDC7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1157 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x116C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1192 SWAP2 SWAP1 PUSH3 0x1D1C JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH3 0x11B1 PUSH1 0x12 DUP4 PUSH3 0x161D PUSH1 0x20 SHL PUSH3 0x15EF OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xA EXP PUSH8 0xDE0B6B3A7640000 MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH3 0x11DE JUMPI PUSH1 0x0 PUSH3 0x11E1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x122B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1240 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1266 SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH3 0x1295 SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH3 0x1605 PUSH3 0x1635 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH3 0x12DB SWAP1 DUP6 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 PUSH3 0x1313 SWAP1 DUP3 SWAP1 PUSH3 0x163D PUSH3 0x1691 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1A7C3263 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH3 0x135A SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1388 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x13AE SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST SWAP1 POP DUP2 PUSH3 0x13F2 JUMPI PUSH3 0x13CC DUP2 PUSH3 0x16BC PUSH1 0x20 SHL PUSH3 0x1655 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x14A6 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH3 0x1448 JUMPI PUSH3 0x1412 DUP2 PUSH3 0x16BC PUSH1 0x20 SHL PUSH3 0x1655 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH1 0x1 PUSH1 0x40 SHL PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x14A6 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH3 0x1499 JUMPI PUSH3 0x1468 DUP2 PUSH3 0x16BC PUSH1 0x20 SHL PUSH3 0x1655 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x14A6 JUMP JUMPDEST PUSH3 0x14A6 PUSH2 0x1BB PUSH3 0x14D4 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x7FD3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 PUSH1 0x40 MLOAD PUSH3 0x14C7 SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH3 0x14E6 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x16DA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH3 0x14FA JUMPI PUSH3 0x14E6 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x150A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x10F2 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x1534 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH3 0x1565 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH3 0xFAF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH3 0x151B JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1594 DUP5 DUP5 DUP5 PUSH3 0x173B JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH3 0x15C4 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x15DE DUP4 PUSH1 0x80 PUSH1 0x40 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x15F7 DUP6 PUSH1 0x40 DUP1 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1611 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x162F DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH3 0xFAF JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x164A PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1689 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH3 0x1673 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH3 0x15C7 PUSH3 0x1585 DUP8 SHL OR DUP7 SHR JUMP JUMPDEST PUSH3 0x1585 PUSH1 0x20 SHL PUSH3 0x15C7 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFA9 PUSH3 0x16A2 DUP4 PUSH3 0x17AB JUMP JUMPDEST PUSH1 0x60 DUP1 DUP6 PUSH3 0x1585 PUSH1 0x20 SHL PUSH3 0x15C7 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 PUSH3 0x16D6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT ISZERO PUSH2 0x1BA PUSH3 0xFAF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH3 0x174C PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1785 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0x177D JUMPI POP PUSH3 0x1779 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0x17CB PUSH1 0x20 SHL PUSH3 0x1685 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x10F2 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0xFAF JUMP JUMPDEST PUSH1 0x0 PUSH3 0x17A5 DUP5 DUP5 DUP5 PUSH3 0x173B JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFA9 PUSH1 0x0 PUSH1 0x60 DUP5 PUSH3 0x17E3 PUSH1 0x20 SHL PUSH3 0x169B OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0x17DC JUMPI DUP2 PUSH3 0x1091 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x1835 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1865 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1865 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1865 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1848 JUMP JUMPDEST POP PUSH3 0x16D6 SWAP3 SWAP2 POP PUSH3 0x1894 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x16D6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1895 JUMP JUMPDEST DUP1 MLOAD PUSH3 0xFA9 DUP2 PUSH3 0x1E4C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x18C9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x18E0 PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST PUSH3 0x1DF9 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1902 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH3 0x1932 JUMPI DUP3 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x191F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1906 JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x194F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1960 PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1982 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x19AE JUMPI DUP2 MLOAD PUSH3 0x199B DUP2 PUSH3 0x1E4C JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1985 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x19CA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x19DB PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x19FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x19AE JUMPI DUP2 MLOAD PUSH3 0x1A16 DUP2 PUSH3 0x1E4C JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1A00 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A3A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1A4B PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1A6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x19AE JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1A70 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A9F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x1AB5 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 PUSH3 0x1ACB PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH3 0x1DF9 JUMP JUMPDEST SWAP3 POP DUP2 DUP4 MSTORE DUP5 DUP2 DUP4 DUP7 ADD ADD GT ISZERO PUSH3 0x1AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x1B02 JUMPI DUP5 DUP2 ADD DUP3 ADD MLOAD DUP5 DUP3 ADD DUP4 ADD MSTORE DUP2 ADD PUSH3 0x1AE5 JUMP JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1B14 JUMPI PUSH1 0x0 DUP3 DUP5 DUP7 ADD ADD MSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B2F JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B48 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1091 DUP2 PUSH3 0x1E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B67 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1B7E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP PUSH2 0x1C0 DUP1 DUP4 DUP8 SUB SLT ISZERO PUSH3 0x1B95 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x1BA0 DUP2 PUSH3 0x1DF9 JUMP JUMPDEST SWAP1 POP PUSH3 0x1BAE DUP7 DUP5 PUSH3 0x18AB JUMP JUMPDEST DUP2 MSTORE PUSH3 0x1BBF DUP7 PUSH1 0x20 DUP6 ADD PUSH3 0x18AB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1BD6 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1BE4 DUP8 DUP3 DUP7 ADD PUSH3 0x1A8E JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1BFC JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C0A DUP8 DUP3 DUP7 ADD PUSH3 0x1A8E JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C22 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C30 DUP8 DUP3 DUP7 ADD PUSH3 0x193E JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C48 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C56 DUP8 DUP3 DUP7 ADD PUSH3 0x19B9 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C6E JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C7C DUP8 DUP3 DUP7 ADD PUSH3 0x1A29 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C94 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1CA2 DUP8 DUP3 DUP7 ADD PUSH3 0x18B8 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH3 0x1CE5 DUP8 DUP3 DUP7 ADD PUSH3 0x18AB JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 DUP4 DUP2 ADD MLOAD DUP4 DUP2 GT ISZERO PUSH3 0x1CFD JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH3 0x1D0B DUP9 DUP3 DUP8 ADD PUSH3 0x1A8E JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1D2E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1091 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP9 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1D8B JUMPI PUSH3 0x1D78 DUP6 MLOAD PUSH3 0x1E40 JUMP JUMPDEST DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1D63 JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1DCD JUMPI PUSH3 0x1DBA DUP4 MLOAD PUSH3 0x1E40 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1DA5 JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH3 0x1DEA JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1E18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x1E36 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x14E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH1 0x60 SHR PUSH2 0x220 MLOAD PUSH1 0x60 SHR PUSH2 0x240 MLOAD PUSH1 0x60 SHR PUSH2 0x260 MLOAD PUSH1 0x60 SHR PUSH2 0x280 MLOAD PUSH1 0x60 SHR PUSH2 0x2A0 MLOAD PUSH1 0x60 SHR PUSH2 0x2C0 MLOAD PUSH2 0x2E0 MLOAD PUSH2 0x300 MLOAD PUSH2 0x320 MLOAD PUSH2 0x340 MLOAD PUSH2 0x360 MLOAD PUSH2 0x380 MLOAD PUSH1 0x60 SHR PUSH2 0x3A0 MLOAD PUSH1 0x60 SHR PUSH2 0x3C0 MLOAD PUSH1 0x60 SHR PUSH2 0x3E0 MLOAD PUSH1 0x60 SHR PUSH2 0x400 MLOAD PUSH1 0x60 SHR PUSH2 0x420 MLOAD PUSH1 0x60 SHR PUSH2 0x440 MLOAD PUSH2 0x460 MLOAD PUSH1 0xF8 SHR PUSH2 0x480 MLOAD PUSH1 0xF8 SHR PUSH2 0x4A0 MLOAD PUSH1 0x60 SHR PUSH2 0x4C0 MLOAD PUSH1 0xF8 SHR PUSH2 0x4E0 MLOAD PUSH2 0x5FB3 PUSH3 0x2020 PUSH1 0x0 CODECOPY DUP1 PUSH2 0xE25 MSTORE POP DUP1 PUSH2 0x90A MSTORE POP DUP1 PUSH2 0x88A MSTORE DUP1 PUSH2 0x8B5 MSTORE DUP1 PUSH2 0x8E0 MSTORE POP DUP1 PUSH2 0x47A9 MSTORE POP DUP1 PUSH2 0x4785 MSTORE POP DUP1 PUSH2 0x2B3C MSTORE DUP1 PUSH2 0x43FE MSTORE POP DUP1 PUSH2 0x1C5C MSTORE POP DUP1 PUSH2 0x1C2C MSTORE POP DUP1 PUSH2 0x1BFC MSTORE POP DUP1 PUSH2 0x1BCC MSTORE POP DUP1 PUSH2 0x1B9C MSTORE POP DUP1 PUSH2 0x1B6C MSTORE POP DUP1 PUSH2 0x2FCC MSTORE POP DUP1 PUSH2 0x2F9C MSTORE POP DUP1 PUSH2 0x2F6C MSTORE POP DUP1 PUSH2 0x2F3C MSTORE POP DUP1 PUSH2 0x2F0C MSTORE POP DUP1 PUSH2 0x2EDC MSTORE POP DUP1 PUSH2 0x1EB9 MSTORE POP DUP1 PUSH2 0x1E77 MSTORE POP DUP1 PUSH2 0x1E35 MSTORE POP DUP1 PUSH2 0x1DF3 MSTORE POP DUP1 PUSH2 0x1DB1 MSTORE POP DUP1 PUSH2 0x1D6F MSTORE POP DUP1 PUSH2 0x104E MSTORE POP DUP1 PUSH2 0x16CA MSTORE POP DUP1 PUSH2 0x1279 MSTORE POP DUP1 PUSH2 0xBE4 MSTORE POP DUP1 PUSH2 0x1B40 MSTORE POP DUP1 PUSH2 0x1B1C MSTORE POP DUP1 PUSH2 0x114E MSTORE POP DUP1 PUSH2 0x112A MSTORE POP DUP1 PUSH2 0x1086 MSTORE POP DUP1 PUSH2 0x2D4A MSTORE POP DUP1 PUSH2 0x2D8C MSTORE POP DUP1 PUSH2 0x2D6B MSTORE POP PUSH2 0x5FB3 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x378 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70464016 GT PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xDDF4627B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6F3 JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x6FB JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6D0 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xAB7759F1 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x6A2 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x651 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x664 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x677 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x893D20E8 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x649 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0x876F303B EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x606 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5E3 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x70464016 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x571 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x584 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2AD JUMPI DUP1 PUSH4 0x54A844BA GT PUSH2 0x24B JUMPI DUP1 PUSH4 0x55C67628 GT PUSH2 0x225 JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x53F JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x547 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x54A844BA EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x50E JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x287 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4D8 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x4E0 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4A7 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x31A JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x2F4 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x477 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x429 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x356 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3F5 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1EC954A EQ PUSH2 0x37D JUMPI DUP1 PUSH4 0x4842D4C EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3AE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x390 PUSH2 0x38B CALLDATASIZE PUSH1 0x4 PUSH2 0x5A13 JUMP JUMPDEST PUSH2 0x70E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x390 PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5E99 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x870 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D6 PUSH2 0x908 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x92C JUMP JUMPDEST PUSH2 0x405 PUSH2 0x932 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DAB JUMP JUMPDEST PUSH2 0x41C PUSH2 0x95B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D68 JUMP JUMPDEST PUSH2 0x431 PUSH2 0x965 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D1B JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x5588 JUMP JUMPDEST PUSH2 0xA00 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xA74 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B62 JUMP JUMPDEST PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x47F PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5F04 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBBC JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x4A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B32 JUMP JUMPDEST PUSH2 0xBC6 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x4BD CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0xC06 JUMP JUMPDEST PUSH2 0x4CA PUSH2 0xC41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5EDB JUMP JUMPDEST PUSH2 0x3EB PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x584E JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH2 0x3EB PUSH2 0xC9C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x509 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xCAE JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x531 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0xD3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5EAC JUMP JUMPDEST PUSH2 0x390 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x54F PUSH2 0xDE0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EC5 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x56C CALLDATASIZE PUSH1 0x4 PUSH2 0x5B32 JUMP JUMPDEST PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x390 PUSH2 0x57F CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xEC1 JUMP JUMPDEST PUSH2 0x597 PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0xEDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5D7B JUMP JUMPDEST PUSH2 0x390 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x5CB PUSH2 0x5C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EE9 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x104C JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x5F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x57F2 JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x531 PUSH2 0x614 CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0x1102 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D07 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x114C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x644 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x118B JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x65F CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x11EC JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x672 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x122A JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0x1241 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x1265 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x6B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x55C8 JUMP JUMPDEST PUSH2 0x129B JUMP JUMPDEST PUSH2 0x597 PUSH2 0x6CB CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0x1326 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x6DE CALLDATASIZE PUSH1 0x4 PUSH2 0x5550 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x1486 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x148C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x709 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x14C2 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x73B PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x750 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x758 PUSH2 0x16B8 JUMP JUMPDEST PUSH2 0x76A DUP5 DUP5 PUSH2 0x765 PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0x16EC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x774 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x785 JUMPI INVALID JUMPDEST EQ PUSH2 0x79C JUMPI PUSH2 0x797 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x179D JUMP JUMPDEST PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x7A9 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x17F6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x1831 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x832 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 CALLER DUP5 DUP5 PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x878 PUSH2 0x18A0 JUMP JUMPDEST PUSH2 0x880 PUSH2 0x908 JUMP JUMPDEST ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH32 0x0 PUSH1 0x0 PUSH2 0x190D JUMP JUMPDEST PUSH2 0x8DB PUSH32 0x0 PUSH1 0x2 PUSH2 0x190D JUMP JUMPDEST PUSH2 0x906 PUSH32 0x0 PUSH1 0x3 PUSH2 0x190D JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x93F PUSH2 0x1AFD JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x94A PUSH2 0x1B1A JUMP JUMPDEST SWAP2 POP PUSH2 0x954 PUSH2 0x1B3E JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7BE PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x971 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x98C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9B6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9F9 JUMPI PUSH2 0x9CD DUP2 PUSH2 0x1B62 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9D9 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x9BC JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA0D DUP6 CALLER PUSH2 0x1449 JUMP JUMPDEST SWAP1 POP PUSH2 0xA31 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0xA29 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xA3C DUP6 DUP6 DUP6 PUSH2 0x1C8B JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0xA57 JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xA69 JUMPI PUSH2 0xA69 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7F DUP3 PUSH2 0x1D6B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA8C DUP3 PUSH2 0x1B62 JUMP JUMPDEST SWAP1 POP PUSH2 0xAA5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xABD SWAP1 PUSH2 0x1EF9 JUMP JUMPDEST SWAP1 POP PUSH2 0xACA DUP4 DUP4 DUP4 PUSH2 0x1F08 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xAD8 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xAE8 PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xAF9 PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB05 DUP3 TIMESTAMP PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0xB19 PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB24 PUSH2 0x2031 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xB35 DUP2 ISZERO PUSH2 0x13E PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP7 PUSH2 0x3E8 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0xB72 JUMPI PUSH2 0xB6D PUSH2 0xB5E PUSH3 0x15180 DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP5 DUP9 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x20A5 JUMP JUMPDEST PUSH2 0xB8C JUMP JUMPDEST PUSH2 0xB8C PUSH2 0xB82 PUSH3 0x15180 DUP5 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP7 DUP9 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH2 0xB9E PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xBAA DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x20D8 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0xBCE PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xBD6 PUSH2 0x2127 JUMP JUMPDEST PUSH2 0xBDF DUP2 PUSH2 0x213A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x866 SWAP2 DUP6 SWAP1 PUSH2 0xC3C SWAP1 DUP7 PUSH2 0x21B3 JUMP JUMPDEST PUSH2 0x1838 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xC56 DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x169B JUMP JUMPDEST SWAP3 POP PUSH2 0xC65 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x169B JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xC74 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x0 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0xC86 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xC8E PUSH2 0x2127 JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x2256 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xCA4 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x1 PUSH2 0x2364 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0xCBC DUP4 PUSH2 0x1D6B JUMP JUMPDEST PUSH2 0x23BB JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7BE SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xD53 DUP7 MLOAD PUSH2 0xD4E PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0x240E JUMP JUMPDEST PUSH2 0xD68 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x241B PUSH2 0x243D PUSH2 0x24A6 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD86 PUSH2 0x263D JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xD9E DUP6 DUP6 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 DUP3 EQ PUSH2 0xDC5 JUMPI PUSH2 0xDC0 DUP3 DUP10 PUSH2 0x272D JUMP JUMPDEST PUSH2 0xDC7 JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH2 0xDD3 DUP2 DUP5 PUSH2 0x288F JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xDED PUSH2 0x2031 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE05 PUSH2 0x1254 JUMP JUMPDEST ISZERO PUSH2 0xE12 JUMPI POP PUSH1 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH2 0xE5E JUMPI PUSH2 0xE1F PUSH2 0x908 JUMP JUMPDEST PUSH2 0xE49 JUMPI PUSH32 0x0 PUSH2 0xE57 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xE86 JUMPI POP PUSH1 0xB SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xEB6 JUMPI POP PUSH1 0xB SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xCC4 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1BB PUSH2 0x28E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xEEB PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH2 0xEF6 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xF03 DUP7 PUSH2 0x290A JUMP JUMPDEST ISZERO PUSH2 0xF2B JUMPI PUSH2 0xF10 PUSH2 0x2939 JUMP JUMPDEST PUSH2 0xF22 DUP10 PUSH2 0xF1C PUSH2 0x92C JUMP JUMPDEST DUP9 PUSH2 0x294C JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xF7D JUMP JUMPDEST PUSH2 0xF33 PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF3D PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0xF49 DUP11 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0xF6D DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xF59 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0xF63 JUMPI DUP14 PUSH2 0xF66 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x241B JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xF7B DUP4 DUP3 PUSH2 0x243D JUMP JUMPDEST POP JUMPDEST PUSH2 0xF87 DUP12 DUP3 PUSH2 0x29F9 JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xFA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 PUSH2 0xFFF DUP9 PUSH2 0x1D6B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x1020 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1029 DUP2 PUSH2 0x2A03 JUMP JUMPDEST SWAP5 POP PUSH2 0x1034 DUP2 PUSH2 0x2A11 JUMP JUMPDEST SWAP4 POP PUSH2 0x103F DUP2 PUSH2 0x2A1F JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1078 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x1 PUSH2 0x21C5 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10B7 SWAP3 SWAP2 SWAP1 PUSH2 0x5C91 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x10E1 PUSH2 0x263D JUMP JUMPDEST POP POP SWAP3 POP SWAP3 POP POP PUSH2 0x10FB DUP2 DUP4 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1113 DUP7 MLOAD PUSH2 0xD4E PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0xD68 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x2A41 PUSH2 0x2A52 PUSH2 0x24A6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x11F9 CALLER DUP6 PUSH2 0x1449 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x1213 JUMPI PUSH2 0x120E CALLER DUP6 PUSH1 0x0 PUSH2 0x1838 JUMP JUMPDEST PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x1220 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 CALLER DUP5 DUP5 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x124F DUP4 PUSH2 0x1D6B JUMP JUMPDEST PUSH2 0x2B35 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7BE SWAP1 PUSH1 0xFF PUSH2 0x2B5D JUMP JUMPDEST PUSH2 0x126D PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x0 PUSH2 0x2364 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x12CA DUP13 PUSH2 0x1170 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12E0 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DEB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1311 DUP9 DUP3 PUSH2 0x1308 DUP8 DUP8 DUP8 PUSH2 0x2B67 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2BA6 JUMP JUMPDEST PUSH2 0x131C DUP9 DUP9 DUP9 PUSH2 0x1838 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1335 PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH2 0x1340 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1352 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0x135C PUSH2 0x92C JUMP JUMPDEST PUSH2 0x1409 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1371 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x2BFD JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x138A PUSH2 0x1380 PUSH2 0x1831 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x139C PUSH1 0x0 PUSH2 0x1397 PUSH2 0x1831 JUMP JUMPDEST PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x13AF DUP12 PUSH2 0x13A8 PUSH2 0x1831 JUMP JUMPDEST DUP5 SUB PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x13B9 DUP2 DUP5 PUSH2 0x2A52 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13FC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x1413 DUP9 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x143B DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1427 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x1431 JUMPI DUP14 PUSH2 0x1434 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x2A41 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x13AF DUP12 DUP4 PUSH2 0x2CD6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1453 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1475 JUMPI POP PUSH1 0x0 NOT PUSH2 0x86A JUMP JUMPDEST PUSH2 0x147F DUP4 DUP4 PUSH2 0x2CE0 JUMP JUMPDEST SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH2 0x1494 PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x149F PUSH2 0x2031 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14AF DUP2 PUSH2 0x140 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xC98 DUP3 PUSH2 0x2D0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x2D46 JUMP JUMPDEST PUSH2 0x14CA PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14D5 DUP4 PUSH2 0x1D6B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x14E2 DUP3 PUSH2 0x1B62 JUMP JUMPDEST SWAP1 POP PUSH2 0x14FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1506 DUP3 DUP3 DUP6 PUSH2 0x1F08 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1540 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xC98 DUP2 PUSH2 0x2DE3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x157C DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x16AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x159B DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1594 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x16AA JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x15B6 JUMPI PUSH1 0x0 PUSH2 0x15B9 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15D4 DUP5 DUP5 DUP5 PUSH2 0x2E5C JUMP JUMPDEST POP DUP3 DUP3 SHL PUSH1 0x0 NOT PUSH1 0x1 DUP4 SHL ADD DUP4 SHL NOT DUP6 AND OR JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15FF DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x16AA JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1618 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x15E7 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1635 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x15C7 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x164B DUP4 PUSH2 0x2A03 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x166E PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x16AA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167F DUP5 DUP5 DUP5 PUSH2 0x2E5C JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1694 JUMPI DUP2 PUSH2 0x157C JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xC98 JUMPI PUSH2 0xC98 DUP2 PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x16C0 PUSH2 0x2EA2 JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2EAA JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x159B DUP2 DUP5 LT DUP1 ISZERO PUSH2 0x16FD JUMPI POP DUP2 DUP4 LT JUMPDEST PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1710 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x172B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1755 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9F9 JUMPI PUSH2 0x177E PUSH2 0x176F DUP3 PUSH2 0x23BB JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH2 0x2ED2 JUMP JUMPDEST SWAP1 PUSH2 0x2FF0 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x178A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x175B JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x17C7 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x17DD JUMPI PUSH2 0x17D8 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x301C JUMP JUMPDEST PUSH2 0x17EA JUMP JUMPDEST PUSH2 0x17EA DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3086 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1820 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x17DD JUMPI PUSH2 0x17D8 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x318A JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1893 SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x18A8 PUSH2 0x2127 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18B7 PUSH2 0x263D JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP4 POP PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x18D2 JUMPI PUSH2 0x18D2 DUP4 PUSH2 0x31E1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18DC PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP4 DUP3 EQ PUSH2 0x18F7 JUMPI PUSH2 0x18F2 DUP3 DUP8 PUSH2 0x272D JUMP JUMPDEST PUSH2 0x18F9 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH2 0x1905 DUP3 DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x1955 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A5 SWAP2 SWAP1 PUSH2 0x5B4A JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x19F3 JUMPI PUSH2 0x19B5 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x1A50 JUMPI PUSH2 0x1A05 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x1AB5 JUMPI PUSH2 0x1A62 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1AC0 PUSH2 0x1BB PUSH2 0x28E0 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x1AF0 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B07 PUSH2 0x1B3E JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x7BE JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1B90 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1BC0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1BF0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1C20 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1C50 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x135 PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x1CA2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1CB9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1CC4 DUP4 DUP4 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1CEA SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1D19 SWAP1 DUP3 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1893 SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DAF JUMPI POP PUSH1 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DF1 JUMPI POP PUSH1 0x1 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E33 JUMPI POP PUSH1 0x2 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E75 JUMPI POP PUSH1 0x3 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EB7 JUMPI POP PUSH1 0x4 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH1 0x5 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F7B SWAP2 SWAP1 PUSH2 0x5B4A JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1F98 DUP2 DUP4 DUP6 PUSH2 0x1605 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x1FDC SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x201A PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1082 JUMP JUMPDEST SWAP1 POP PUSH2 0xBDF PUSH2 0x2029 DUP3 CALLER PUSH2 0x322E JUMP JUMPDEST PUSH2 0x191 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2042 PUSH2 0x3317 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x2095 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x2079 JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x206F JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x2090 JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x208A JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x209D JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20B4 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x20C1 JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x20CD JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x20E4 DUP5 DUP5 DUP5 DUP5 PUSH2 0x3376 JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2119 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2132 PUSH2 0x1AFD JUMP JUMPDEST PUSH2 0x192 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x214F PUSH2 0x2145 PUSH2 0x33B5 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2164 PUSH2 0x215A PUSH2 0x33BE JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2175 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x21A8 SWAP1 DUP4 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x157C DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x16AA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x21E5 JUMPI PUSH2 0x21E0 PUSH2 0x21D6 PUSH2 0x1B1A JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x21FA JUMP JUMPDEST PUSH2 0x21FA PUSH2 0x21F0 PUSH2 0x1B3E JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x21A8 SWAP1 DUP4 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 PUSH2 0xBE2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x226C PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2299 SWAP3 SWAP2 SWAP1 PUSH2 0x5E64 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22E9 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x2336 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2373 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x15A0 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x23A6 SWAP1 DUP4 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xBDF JUMPI PUSH2 0xBDF PUSH2 0x33CA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23C5 PUSH2 0x104C JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x23DB JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x23FE JUMPI PUSH2 0x23F9 DUP2 PUSH2 0x2A03 JUMP JUMPDEST PUSH2 0x157C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xC98 DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x242C PUSH1 0x0 DUP9 DUP7 DUP7 PUSH2 0x349C JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP9 POP SWAP9 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x244C SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x2487 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2466 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x247A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x288F JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2493 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x244F JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x2595 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x24CA SWAP3 SWAP2 SWAP1 PUSH2 0x5CC1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2507 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x250C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x251B JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x2577 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x259D PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x25A7 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0x25B3 DUP8 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x25CB DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x25DD DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1F NOT DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x264F PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x2665 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2681 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x26D5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5663 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x26EA DUP2 PUSH2 0x26E5 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x26F3 DUP2 PUSH2 0x354A JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 PUSH2 0x2701 PUSH2 0xC41 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x0 PUSH2 0x2713 DUP9 DUP7 DUP5 PUSH2 0x3583 JUMP JUMPDEST SWAP5 POP SWAP1 POP PUSH2 0x2721 DUP8 DUP3 PUSH2 0x3610 JUMP JUMPDEST SWAP6 POP POP POP POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x276E JUMPI PUSH2 0x2764 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x274D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2736 JUMP JUMPDEST POP DUP2 PUSH2 0x277F JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2878 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x27D5 JUMPI PUSH2 0x27CB PUSH2 0x27A9 DUP4 DUP8 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x27B8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3628 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2794 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x282E PUSH2 0x280D PUSH2 0x2807 PUSH2 0x27EC DUP5 DUP11 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x2801 PUSH2 0x27F9 DUP9 DUP14 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x3628 JUMP JUMPDEST SWAP1 PUSH2 0x21B3 JUMP JUMPDEST DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 PUSH2 0x281D DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x2801 PUSH2 0x27F9 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1558 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2856 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2851 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x286F JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x286F JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x86A JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x2787 JUMP JUMPDEST POP PUSH2 0x2884 PUSH2 0x141 PUSH2 0x28E0 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x289E DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x28AB JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x28CE SWAP1 DUP6 DUP4 DUP2 PUSH2 0x28C5 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x16AA JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x28D7 JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0xBDF DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x3648 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xCC1 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x292F SWAP2 SWAP1 PUSH2 0x5BC3 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2944 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH2 0x295D DUP8 PUSH2 0x354A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x2970 DUP4 DUP6 DUP10 PUSH2 0x36C3 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2980 DUP3 PUSH1 0x0 PUSH2 0x36EF JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x299F SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x29DA DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29B9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x29CD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FF0 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29E6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x29A2 JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x37AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 DUP3 PUSH1 0x60 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH1 0x60 DUP1 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A2B DUP4 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP PUSH2 0x2A3A DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x169B JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x242C PUSH1 0x1 DUP9 DUP7 DUP7 PUSH2 0x349C JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2A61 SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x2A9C DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2A7B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A8F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3878 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AA8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2A64 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2AC5 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7BE SWAP2 SWAP1 PUSH2 0x5832 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BB1 DUP6 PUSH2 0x38C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x2BC7 PUSH2 0x2BC1 DUP8 DUP4 DUP8 PUSH2 0x38E2 JUMP JUMPDEST DUP4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2BD6 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x16AA JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C0C DUP5 PUSH2 0x3991 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C27 PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2C1F JUMPI INVALID JUMPDEST EQ PUSH1 0xCE PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2C32 DUP6 PUSH2 0x39A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C40 DUP2 MLOAD DUP8 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x2C4A DUP2 DUP8 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C54 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x60 PUSH2 0x2C62 DUP4 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2C70 DUP4 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 PUSH2 0x2C8D PUSH14 0x8000000000000000000000000000 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x2C99 DUP14 DUP3 PUSH2 0x2CD6 JUMP JUMPDEST DUP1 DUP7 PUSH2 0x2CA3 PUSH2 0x104C JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2CAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2CC3 DUP6 DUP5 PUSH2 0x31F2 JUMP JUMPDEST POP SWAP13 SWAP4 SWAP12 POP SWAP3 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x3A5F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D17 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x3376 JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x21A8 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2DB3 PUSH2 0x3AEC JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2DC8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5E1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2DF2 JUMPI PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E01 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x159B JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E29 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2E52 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x16AA JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2E12 JUMP JUMPDEST PUSH2 0x2E6B PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2E93 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x16FD JUMPI POP PUSH2 0x2E89 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1685 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x159B DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2127 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB4 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC98 JUMPI PUSH2 0x2ECA DUP2 PUSH2 0x3AF0 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2EB9 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2F00 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2F30 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x2F60 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x2F90 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x2FC0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x300A DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3028 DUP6 DUP4 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x3049 DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B44 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x305C DUP8 DUP8 DUP8 DUP8 PUSH2 0x3B50 JUMP JUMPDEST SWAP1 POP PUSH2 0x307B DUP2 DUP5 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x306E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B64 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A9 DUP2 PUSH2 0x3B70 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3097 JUMPI INVALID JUMPDEST EQ SWAP1 POP PUSH2 0x30A4 DUP7 DUP5 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x30C4 DUP8 PUSH1 0x60 ADD MLOAD DUP5 DUP4 PUSH2 0x30B8 JUMPI DUP7 PUSH2 0x30BA JUMP JUMPDEST DUP8 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST DUP8 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x30DD DUP11 PUSH2 0x3B8C JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x30F0 PUSH2 0x104C JUMP JUMPDEST DUP11 EQ PUSH2 0x3116 JUMPI PUSH2 0x3111 DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3109 DUP15 PUSH2 0x3BF5 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3C2A JUMP JUMPDEST PUSH2 0x3131 JUMP JUMPDEST PUSH2 0x3131 DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3129 DUP16 PUSH2 0x3BF5 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3C63 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3142 DUP5 DUP7 DUP6 DUP10 DUP6 PUSH2 0x3C87 JUMP JUMPDEST DUP7 PUSH2 0x315C JUMPI PUSH2 0x3157 DUP3 DUP11 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x306E JUMPI INVALID JUMPDEST PUSH2 0x3179 JUMP JUMPDEST PUSH2 0x3179 DUP3 DUP11 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x316C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3D07 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3199 DUP7 PUSH1 0x60 ADD MLOAD PUSH2 0x3D13 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x31A8 DUP6 DUP4 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x31BC DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x31CF DUP8 DUP8 DUP8 DUP8 PUSH2 0x3D34 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A9 DUP2 DUP5 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x316C JUMPI INVALID JUMPDEST PUSH2 0xBDF PUSH2 0x31EC PUSH2 0x1277 JUMP JUMPDEST DUP3 PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x31FF DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x320C DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1672 JUMP JUMPDEST OR PUSH1 0xC SSTORE PUSH2 0xC98 PUSH2 0x3D48 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3227 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x16AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x324D PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3268 JUMPI POP PUSH2 0x3268 DUP4 PUSH2 0x3D7E JUMP JUMPDEST ISZERO PUSH2 0x3290 JUMPI PUSH2 0x3275 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x3298 PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32C7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147F SWAP2 SWAP1 PUSH2 0x572F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3336 PUSH1 0x0 PUSH1 0x40 PUSH1 0x9 SLOAD PUSH2 0x169B SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP5 POP PUSH2 0x3348 SWAP1 PUSH1 0x40 DUP1 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP4 POP PUSH2 0x335B SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP3 POP PUSH2 0x336E SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x169B JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x3383 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x3390 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x339C DUP6 PUSH1 0x40 DUP1 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x33A9 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x33D4 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x33EA PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3406 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x341E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x345A SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5663 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x346A DUP2 PUSH2 0x26E5 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3475 DUP3 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3481 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x3490 DUP3 DUP5 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH2 0xACA DUP3 DUP3 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x34B0 DUP10 PUSH2 0x3B8C JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x53D0 DUP11 PUSH2 0x34C8 JUMPI PUSH2 0x3D89 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0x3E1E JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x34E4 DUP7 DUP7 DUP10 DUP8 DUP16 DUP16 DUP10 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x53D0 DUP14 PUSH2 0x34F8 JUMPI PUSH2 0x15EF PUSH2 0x34FC JUMP JUMPDEST PUSH2 0x21B3 JUMPDEST SWAP1 POP PUSH2 0x3509 DUP8 DUP4 DUP4 PUSH2 0x3E9C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3519 DUP10 DUP6 DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3528 DUP8 DUP10 DUP9 DUP13 DUP6 PUSH2 0x3C87 JUMP JUMPDEST DUP4 PUSH2 0x3534 DUP5 PUSH1 0x0 PUSH2 0x36EF JUMP JUMPDEST SWAP11 POP SWAP11 POP POP POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x3571 DUP4 PUSH2 0x355A PUSH2 0x104C JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3564 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0x357A DUP5 PUSH2 0x39BD JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3595 DUP9 DUP9 PUSH2 0x3F24 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x35AB JUMPI PUSH1 0x0 PUSH2 0x35AF JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x35C1 JUMPI PUSH1 0x0 PUSH2 0x35C5 JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35E0 PUSH2 0x35D6 PUSH1 0x0 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1778 DUP6 DUP8 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35FB PUSH2 0x35F1 PUSH1 0x2 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1778 DUP6 DUP9 PUSH2 0x288F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C PUSH2 0x361F DUP5 DUP5 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 DUP5 PUSH2 0x3FA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3637 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x3640 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x36D2 DUP5 PUSH2 0x3FCC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP8 DUP8 DUP5 PUSH2 0x3FE2 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x370C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3736 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x37A5 JUMPI PUSH2 0x374D PUSH2 0x104C JUMP JUMPDEST DUP2 EQ PUSH2 0x3784 JUMPI DUP4 PUSH2 0x375C PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x376B JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x376D JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3777 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3786 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3792 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x373C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x37C3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x37CF DUP3 PUSH1 0x0 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x37F5 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3828 PUSH2 0x3823 DUP3 PUSH2 0x381D PUSH2 0x92C JUMP JUMPDEST SWAP1 PUSH2 0x4091 JUMP JUMPDEST PUSH2 0x409F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x386C SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3887 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x3894 JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x38AE SWAP1 DUP6 DUP4 DUP2 PUSH2 0x28C5 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x38BA JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38D0 PUSH2 0x2D46 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10B7 SWAP3 SWAP2 SWAP1 PUSH2 0x5CD1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38F4 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x392D SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x5E7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x394F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3985 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC1 SWAP2 SWAP1 PUSH2 0x595D JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x5978 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x39DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3A05 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x37A5 JUMPI DUP4 PUSH2 0x3A1D PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x3A2C JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3A2E JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3A38 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3A4C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3A0B JUMP JUMPDEST PUSH2 0x3A6B PUSH1 0x0 DUP4 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH2 0x3A7A PUSH2 0x3823 DUP3 PUSH2 0x2801 PUSH2 0x92C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3A9D SWAP1 DUP3 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x386C SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH2 0x3AF8 PUSH2 0x104C JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x3B04 JUMPI PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xC98 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3B25 DUP4 PUSH2 0x2A1F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0xACA JUMPI PUSH2 0xACA DUP5 PUSH2 0x3B3E DUP7 PUSH2 0x1B62 JUMP JUMPDEST DUP5 PUSH2 0x1F08 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17ED PUSH1 0x0 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x40A4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x3B85 PUSH2 0x3B80 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x3FA6 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3B9E PUSH2 0xC41 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3BB3 DUP11 DUP7 DUP7 PUSH2 0x4116 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x3BC3 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 DUP3 EQ PUSH2 0x3BDE JUMPI PUSH2 0x3BD9 DUP3 DUP6 PUSH2 0x272D JUMP JUMPDEST PUSH2 0x3BE0 JUMP JUMPDEST DUP3 JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP1 SWAP10 POP SWAP3 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C0C PUSH2 0x3C02 PUSH2 0x104C JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x3C14 PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x166E JUMPI PUSH2 0x3C25 DUP3 PUSH1 0x1 PUSH2 0x15EF JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3C45 JUMPI PUSH2 0x3C40 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x416E JUMP JUMPDEST PUSH2 0x3C53 JUMP JUMPDEST PUSH2 0x3C53 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4245 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3C79 JUMPI PUSH2 0x3C40 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x42A6 JUMP JUMPDEST PUSH2 0x3C53 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x430C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C93 DUP7 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CA1 DUP4 DUP6 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CAF DUP7 DUP4 PUSH2 0x2FF0 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x3CFD JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x3CD9 PUSH2 0x3CD3 DUP4 PUSH2 0x3CCE DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1558 JUMP JUMPDEST DUP7 PUSH2 0x3628 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3CFA JUMPI PUSH1 0x0 PUSH2 0x3CED DUP8 DUP4 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP PUSH2 0x3CF8 DUP2 PUSH2 0x31E1 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x131C DUP9 DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x288F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D28 PUSH2 0x3D21 PUSH2 0xD2A JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH2 0x157C DUP4 DUP3 PUSH2 0x15EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17ED PUSH1 0x1 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x40A4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D52 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC98 JUMPI PUSH2 0x3D68 DUP2 PUSH2 0x43F7 JUMP JUMPDEST ISZERO PUSH2 0x3D76 JUMPI PUSH2 0x3D76 DUP2 PUSH2 0x4426 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3D57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x4454 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D98 DUP5 PUSH2 0x445F JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DA8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3DC6 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4475 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x3E13 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DD4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3DE5 JUMPI PUSH2 0x3DBC DUP8 DUP11 DUP7 PUSH2 0x44D4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DF3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E06 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x44F2 JUMP JUMPDEST PUSH2 0x3E11 PUSH2 0x150 PUSH2 0x28E0 JUMP JUMPDEST POP JUMPDEST SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3E2D DUP5 PUSH2 0x3991 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E3D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E51 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4593 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E5F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E70 JUMPI PUSH2 0x3DBC DUP8 DUP11 DUP7 PUSH2 0x45E2 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E7E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E91 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x4600 JUMP JUMPDEST PUSH2 0x3E11 PUSH2 0x136 PUSH2 0x28E0 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD PUSH2 0x3EAB SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3EEA DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3EC5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3ED9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3EF6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3EAE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x3F1E PUSH2 0x92C JUMP JUMPDEST SWAP1 PUSH2 0x15EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3F3D DUP5 PUSH2 0x3F38 DUP8 PUSH1 0x1 PUSH2 0x467A JUMP JUMPDEST PUSH2 0x272D JUMP JUMPDEST SWAP3 POP PUSH2 0x3F47 PUSH2 0x4783 JUMP JUMPDEST ISZERO PUSH2 0x3F60 JUMPI PUSH2 0x3F56 DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x3F9F JUMP JUMPDEST PUSH2 0x3F68 PUSH2 0x47A7 JUMP JUMPDEST ISZERO PUSH2 0x3F81 JUMPI DUP3 SWAP2 POP PUSH2 0x3F7A DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH2 0x3F9F JUMP JUMPDEST PUSH2 0x3F90 DUP5 PUSH2 0x3F38 DUP8 PUSH1 0x0 PUSH2 0x467A JUMP JUMPDEST SWAP2 POP PUSH2 0x3F9C DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x3FBE JUMPI PUSH1 0x0 PUSH2 0xCC1 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3FF0 DUP4 DUP6 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x400A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4034 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x4088 JUMPI PUSH2 0x4069 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FF0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4075 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x403A JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH1 0x1 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x40B1 DUP6 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40BE DUP6 PUSH2 0x3BF5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40CB DUP6 PUSH2 0x3BF5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40D7 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x40E6 DUP3 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP DUP11 ISZERO PUSH2 0x4108 JUMPI PUSH2 0x40FC DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x47CB JUMP JUMPDEST SWAP6 POP POP POP POP POP POP PUSH2 0x17ED JUMP JUMPDEST PUSH2 0x40FC DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x4856 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x4128 DUP9 PUSH2 0x354A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x413A DUP4 DUP11 DUP11 PUSH2 0x3583 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x414A DUP6 DUP5 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x415B JUMPI PUSH2 0x415B DUP2 PUSH2 0x31E1 JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x41B5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x41C5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x41E8 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x41E3 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x48E9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4210 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x421C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4233 DUP8 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4260 DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x425B PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4B79 JUMP JUMPDEST SWAP1 POP PUSH2 0x4272 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x427E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4295 DUP7 DUP12 PUSH2 0x15EF JUMP JUMPDEST SWAP2 SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x42C1 DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x42BC PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4C68 JUMP JUMPDEST SWAP1 POP PUSH2 0x42E9 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x42F5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4295 DUP7 DUP12 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4353 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4363 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4386 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x4381 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4D35 JUMP JUMPDEST SWAP1 POP PUSH2 0x4398 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x43A4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4233 DUP8 DUP4 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x43D5 DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST DUP1 PUSH2 0x43E4 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x0 NOT DUP3 ADD PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2B5D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x443E DUP2 PUSH2 0x163D JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x4FB6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC1 SWAP2 SWAP1 PUSH2 0x589C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x4485 DUP6 PUSH2 0x4FF2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4495 DUP3 MLOAD DUP9 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x44A2 DUP3 PUSH2 0x26E5 DUP9 PUSH2 0x39BD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44B4 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x41E3 PUSH2 0xD2A JUMP JUMPDEST SWAP1 POP PUSH2 0x44C4 DUP3 DUP3 GT ISZERO PUSH1 0xCF PUSH2 0x16AA JUMP JUMPDEST SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x44E3 DUP5 PUSH2 0x5015 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP7 DUP9 DUP5 PUSH2 0x3FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x4502 DUP6 PUSH2 0x502B JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4514 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x452E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4558 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x456C DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x425B PUSH2 0xD2A JUMP JUMPDEST DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4578 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP2 SWAP10 SWAP2 SWAP9 POP SWAP1 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x45A3 DUP6 PUSH2 0x5042 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x45B3 DUP8 MLOAD DUP4 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x45C0 DUP3 PUSH2 0x26E5 DUP9 PUSH2 0x39BD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D2 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x4381 PUSH2 0xD2A JUMP JUMPDEST SWAP1 POP PUSH2 0x44C4 DUP3 DUP3 LT ISZERO PUSH1 0xD0 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x45F1 DUP5 PUSH2 0x505A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP7 DUP4 DUP10 PUSH2 0x5070 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x4610 DUP6 PUSH2 0x510C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4622 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x463C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4666 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x456C DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x42BC PUSH2 0xD2A JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x46C1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x477A JUMPI PUSH1 0x0 PUSH2 0x46D9 PUSH2 0x104C JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x46E6 JUMPI DUP2 PUSH2 0x46EB JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x46F6 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP1 PUSH2 0x470D JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x470D JUMPI POP PUSH2 0x470D DUP2 PUSH2 0x43F7 JUMP JUMPDEST PUSH2 0x472A JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x471D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x475A JUMP JUMPDEST PUSH2 0x475A DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4739 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x5123 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4766 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x46C7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47DD DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x47E9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4803 DUP9 DUP9 DUP6 DUP9 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x4812 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x4827 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4848 PUSH1 0x1 PUSH2 0x3F1E DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP2 POP POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4868 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4874 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x488E DUP9 DUP9 DUP6 DUP10 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x489D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x48B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4848 PUSH1 0x1 PUSH2 0x2801 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x48D2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4927 JUMPI PUSH2 0x491D DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x48EE JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4942 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x496C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4A39 JUMPI PUSH1 0x0 PUSH2 0x49A4 DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x498E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3878 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x49E6 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x49B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x49E0 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x49CC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x3878 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x49F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4A2E PUSH2 0x4A27 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4A11 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x43BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4973 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4A54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4A7E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4B49 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4A9B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x4B02 JUMPI PUSH1 0x0 PUSH2 0x4AC4 PUSH2 0x4AB8 DUP7 PUSH2 0x3FA6 JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4AD8 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4AF9 PUSH2 0x4AF2 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3878 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4B19 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B0E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4B29 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4B35 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4A84 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4B56 DUP13 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B64 DUP3 DUP11 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH2 0x3179 PUSH2 0x4B72 DUP3 PUSH2 0x3FA6 JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x43BB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4B94 DUP5 PUSH2 0x4B8E DUP8 PUSH2 0x49E0 DUP2 DUP12 PUSH2 0x15EF JUMP JUMPDEST SWAP1 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4BA4 DUP11 DUP11 DUP5 DUP12 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4BB8 DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4BE0 JUMPI PUSH2 0x4BD6 DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4BBE JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4C09 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x288F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C16 DUP3 PUSH2 0x3FA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C24 DUP6 DUP4 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C32 DUP7 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x4C53 PUSH2 0x4C4C DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x2FF0 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4C7D DUP5 PUSH2 0x4B8E DUP8 PUSH2 0x49E0 DUP2 DUP12 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C8D DUP11 DUP11 DUP5 DUP12 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4CB7 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x4CA0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4CDF JUMPI PUSH2 0x4CD5 DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4CBD JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4CF2 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4CFF DUP3 PUSH2 0x3FA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D0D DUP6 DUP4 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D1B DUP7 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x4C53 PUSH2 0x4C4C DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4D5C JUMPI PUSH2 0x4D52 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4D3A JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4D77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4DA1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4E3B JUMPI PUSH1 0x0 PUSH2 0x4DC3 DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4E05 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4DD4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4DFF DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4DEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x288F JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4E11 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4E30 PUSH2 0x4A27 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4DA8 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4E56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4E80 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4F41 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4E9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x4EFA JUMPI PUSH1 0x0 PUSH2 0x4EC3 PUSH2 0x4AB8 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4ED7 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4EF1 PUSH2 0x4AF2 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x2FF0 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4F11 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4F06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4F21 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4F2D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4E86 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4F4E DUP13 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F5C DUP3 DUP11 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x4FA7 JUMPI PUSH2 0x4F9A DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x2FF0 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x484C JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x484C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4FE1 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xCC1 JUMPI POP PUSH2 0xCC1 DUP3 PUSH2 0x52FB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x58B7 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x58FC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x5928 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x59BB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x59D9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x507E DUP5 DUP5 PUSH2 0x3878 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x509A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x50C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x5102 JUMPI PUSH2 0x50E3 DUP4 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A11 JUMPI INVALID JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x50EF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x50CA JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x59F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C PUSH2 0x5135 DUP5 PUSH2 0x3CCE DUP6 PUSH2 0x2A11 JUMP JUMPDEST PUSH2 0x27C6 DUP5 PUSH2 0x2A03 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5156 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5171 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x51D7 JUMPI PUSH2 0x51BC PUSH2 0x51B6 PUSH2 0x51AF DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x51A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1558 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1558 JUMP JUMPDEST DUP9 PUSH2 0x3628 JUMP JUMPDEST SWAP2 POP PUSH2 0x51CD DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x274D JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x5183 JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x51E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0x51FC DUP8 DUP9 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5228 PUSH2 0x521C PUSH2 0x5214 DUP5 PUSH2 0xB68 DUP10 DUP9 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1558 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x51A2 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5243 PUSH2 0x523C PUSH2 0x5214 DUP12 DUP10 PUSH2 0x3628 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x525F PUSH2 0x5255 DUP7 DUP7 PUSH2 0x21B3 JUMP JUMPDEST PUSH2 0xB68 DUP14 DUP7 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x52DF JUMPI DUP2 SWAP3 POP PUSH2 0x5294 PUSH2 0x5281 DUP7 PUSH2 0x2801 DUP6 DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP15 PUSH2 0x3F1E DUP9 PUSH2 0x2801 DUP9 PUSH1 0x2 PUSH2 0x1558 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x52BD JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x52B8 JUMPI POP SWAP8 POP PUSH2 0x15E7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x52D7 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x52D7 JUMPI POP SWAP8 POP PUSH2 0x15E7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5264 JUMP JUMPDEST POP PUSH2 0x52EB PUSH2 0x142 PUSH2 0x28E0 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5326 PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x535A JUMPI POP PUSH2 0x5357 PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xCC1 JUMPI POP PUSH2 0xCC1 DUP3 PUSH1 0x0 PUSH2 0x538F PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x53C3 JUMPI POP PUSH2 0x53C0 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xCC1 JUMPI POP PUSH1 0x0 PUSH2 0xCC1 JUMP JUMPDEST INVALID JUMPDEST DUP1 CALLDATALOAD PUSH2 0x86A DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x53ED JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5400 PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST PUSH2 0x5F12 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x5421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2884 JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5424 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5450 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x545E PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x547F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2884 JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5482 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x54AE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x54C4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x54D7 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5F12 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x54EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x4 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x2 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5545 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x157C DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5562 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x556D DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x557D DUP2 PUSH2 0x5F59 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x559C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x55A7 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x55B7 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x55E2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x55ED DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x55FD DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x561B DUP2 PUSH2 0x5F6E JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x564A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5655 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5677 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x568E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56A1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x56AF PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP7 ADD DUP12 DUP3 DUP4 DUP8 MUL DUP10 ADD ADD GT ISZERO PUSH2 0x56CF JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x56FA JUMPI DUP1 MLOAD PUSH2 0x56E6 DUP2 PUSH2 0x5F59 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP3 DUP2 ADD SWAP3 DUP2 ADD PUSH2 0x56D3 JUMP JUMPDEST POP DUP10 ADD MLOAD SWAP1 SWAP8 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5711 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x571E DUP7 DUP3 DUP8 ADD PUSH2 0x5440 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5740 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x157C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5769 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x577B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x578B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x57A7 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x57B3 DUP12 DUP4 DUP13 ADD PUSH2 0x53DD JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x57D6 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x57E3 DUP11 DUP3 DUP12 ADD PUSH2 0x549E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5803 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x157C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5843 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x157C DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5860 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x586B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5886 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5892 DUP6 DUP3 DUP7 ADD PUSH2 0x549E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58AD JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x157C DUP4 DUP4 PUSH2 0x5507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58CB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x58D5 DUP6 DUP6 PUSH2 0x5507 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58F0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x571E DUP7 DUP3 DUP8 ADD PUSH2 0x5440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x590E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5918 DUP5 DUP5 PUSH2 0x5507 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x593C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5946 DUP6 DUP6 PUSH2 0x5507 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x596E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x157C DUP4 DUP4 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x598A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5994 DUP5 DUP5 PUSH2 0x5516 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x59AF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5892 DUP6 DUP3 DUP7 ADD PUSH2 0x5440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59CF JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x58D5 DUP6 DUP6 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59EB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5918 DUP5 DUP5 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A09 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5946 DUP6 DUP6 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A28 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5A3F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP PUSH2 0x120 DUP1 DUP4 DUP11 SUB SLT ISZERO PUSH2 0x5A55 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5A5E DUP2 PUSH2 0x5F12 JUMP JUMPDEST SWAP1 POP PUSH2 0x5A6A DUP10 DUP5 PUSH2 0x5525 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5A79 DUP10 PUSH1 0x20 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5A8B DUP10 PUSH1 0x40 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5ABB DUP10 PUSH1 0xC0 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5ACD DUP10 PUSH1 0xE0 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x5AE5 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x5AF1 DUP12 DUP3 DUP8 ADD PUSH2 0x549E JUMP JUMPDEST DUP3 DUP5 ADD MSTORE POP POP DUP1 SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5B0E JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x5B1B DUP8 DUP3 DUP9 ADD PUSH2 0x53DD JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B43 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B5B JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B74 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5B98 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x5BB8 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BD4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x157C DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BF1 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5BFC DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C3B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5C1F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5C6B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x5C4F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5C7C JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D5C JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5D37 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x157C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x5D8E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5C0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x17ED DUP2 DUP6 PUSH2 0x5C0C JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x15E7 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C46 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x157C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C46 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x15E7 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C0C JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F4F JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDC 0xC3 SIGNEXTEND CALL 0xAA SHL AND 0xAE PUSH11 0xD0C83C0807514F1E6FDBE6 PUSH14 0x9E246A013CE46BA54D53BF64736F PUSH13 0x634300070100336BFB689528FA SWAP7 0xEC BYTE 0xD6 PUSH17 0xAD6D6064BE1AE96BFD5D2EE35C837FD0FE 0xC GT SWAP6 SWAP11 ", + "sourceMap": "2683:47726:55:-:0;;;3887:794;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4552:26;;;;-1:-1:-1;;4498:27:55;4552:26;4498:19;:27::i;:::-;4433:29;4455:6;4433:21;:29::i;:::-;4366:6;:29;;;3958:6;:12;;;3984:33;4031:6;:11;;;4056:6;:13;;;4083:42;4097:6;:13;;;4119:4;4083:13;;;:42;;:::i;:::-;4153:13;;;;:20;4176:1;4153:24;-1:-1:-1;4139:39:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4139:39:55;;4192:6;:24;;;4230:6;:26;;;4270:6;:27;;;4311:6;:12;;;5893:19:28;5914:20;5807:4;5813:6;5821:5;5858;5767:10;-1:-1:-1;;;;;5759:19:28;5751:28;;1749:9:26;1301:4:52;2020:280:50;;;;;;;;;;;;;-1:-1:-1;;;2020:280:50;;;1713:9:26;1724:11;2126:5:51;2118;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;-1:-1:-1;2168:14:51;2180:2;2168:14;;;-1:-1:-1;2100:22:50;;;;;;;2085:37;;2150:25;;;;;2132:43;;-1:-1:-1;2198:95:50;2185:108;;2049:46:38;;-1:-1:-1;;;1724:14:29;;;;;2168::51;1724::29;1770::26;;;;::::2;::::0;-1:-1:-1;2578:93:45;;-1:-1:-1;2284:7:45;2587:49;;;10056:3:10;2578:8:45;:93::i;:::-;2681:96;2352:7;2690:51;;;10120:3:10;2681:8:45;:96::i;:::-;2817:15;:37;;;2865:40;;;;2938:41;2915:64;;5959:13:28;;5950:57:::4;::::0;3201:1:::4;-1:-1:-1::0;5959:28:28::4;5921:3:10;5950:8:28;:57::i;:::-;6017:61;6043:15;:13;:15::i;:::-;6026:13:::0;;:32:::4;;5969:3:10;6017:8:28;:61::i;:::-;6626:40;6659:6;6626:32;;;;;:40;;:::i;:::-;6677;6699:17:::0;6677:21:::4;:40::i;:::-;6745:34;::::0;-1:-1:-1;6745:34:28;;6728:14:::4;::::0;-1:-1:-1;6745:18:28;::::4;::::0;-1:-1:-1;;6745:34:28::4;::::0;6764:14;;6745:34:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6790:51;::::0;-1:-1:-1;6790:51:28;;6728;;-1:-1:-1;;6790:20:28;::::4;::::0;::::4;::::0;:51:::4;::::0;6728;;6819:6;;6827:13;;6790:51:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;-1:-1:-1::0;;;6941:16:28::4;::::0;;;-1:-1:-1;6992:32:28::4;::::0;;;;;;;-1:-1:-1;6992:30:28;::::4;::::0;::::4;::::0;:32:::4;::::0;;::::4;::::0;::::4;::::0;;;;;;;;:30;:32;::::4;;::::0;::::4;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6967:57;::::0;-1:-1:-1;;6967:57:28;::::4;::::0;-1:-1:-1;2735:71:61;;-1:-1:-1;;;;2744:45:61;;;;-1:-1:-1;6565:3:10;;-1:-1:-1;2735:8:61;;-1:-1:-1;;;;;2735:71:61:i;:::-;2816;1319:4:60;2825:45:61;;;6610:3:10;2816:8:61;:71::i;:::-;2898:18;2919:59;2928:22;1372:3:60;2919:8:61;;;;;:59;;:::i;:::-;2898:80;-1:-1:-1;2988:33:61;2898:80;2988:21;:33::i;:::-;-1:-1:-1;;4590:23:59;;:30;4630:62;1568:1;4639:33;;5921:3:10;4630:8:59;:62::i;:::-;4702:179;4765:1;4751:11;:15;4780:6;:25;;;:32;4826:6;:38;;;:45;4702:35;;;;;:179;;:::i;:::-;4892:26;;;;5054:23;;:26;;:23;;:26;;;;;;;;;;;;;;5044:36;;-1:-1:-1;;5044:36:59;;;5100:23;;:26;;-1:-1:-1;;5100:26:59;;;;;;;;;;;;;;;;5090:36;;-1:-1:-1;;5090:36:59;;;5146:23;;:26;;5170:1;;5146:26;;;;;;;;;;;;;;;;5136:36;;-1:-1:-1;;5136:36:59;;;5206:1;5192:15;;:56;;5246:1;5192:56;;;5210:23;;:26;;5234:1;;5210:26;;;;;;;;;;;;5192:56;5182:66;;-1:-1:-1;;5182:66:59;;;5282:1;5268:15;;:56;;5322:1;5268:56;;;5286:23;;:26;;5310:1;;5286:26;;;;;;;;;;;;5268:56;5258:66;;-1:-1:-1;;5258:66:59;;;5358:1;5344:15;;:56;;5398:1;5344:56;;;5362:23;;:26;;5386:1;;5362:26;;;;;;;;;;;;5344:56;5334:66;;-1:-1:-1;;5334:66:59;;;5451:23;;:26;;5429:49;;5451:23;;;:26;;;;;;;;;;5429:21;;;:49;;:::i;:::-;5411:67;;5528:23;;:26;;5506:49;;5528:23;5552:1;;5528:26;;;;;5506:49;5488:67;;5605:23;;:26;;5583:49;;5605:23;5629:1;;5605:26;;;;;5583:49;5565:67;;5674:1;5660:15;;:71;;5730:1;5660:71;;;5678:49;5700:6;:23;;;5724:1;5700:26;;;;;;;5678:49;5642:89;;5773:1;5759:15;;:71;;5829:1;5759:71;;;5777:49;5799:6;:23;;;5823:1;5799:26;;;;;;;5777:49;5741:89;;5872:1;5858:15;;:71;;5928:1;5858:71;;;5876:49;5898:6;:23;;;5922:1;5898:26;;;;;;;5876:49;5840:89;;6412:23;;:30;-1:-1:-1;;6412:34:59;6383:248;6471:1;6460:8;:12;:64;;;;-1:-1:-1;6476:23:59;;:33;;6519:4;;6476:23;6500:8;;6476:33;;;;;;;;;;;;-1:-1:-1;;;;;6476:48:59;;6460:64;6383:248;;;-1:-1:-1;;6538:10:59;6383:248;;;6640:20;;;;7197:23;;:30;7138:36;;-1:-1:-1;7177:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7177:51:59;-1:-1:-1;7138:90:59;-1:-1:-1;7239:30:59;;;;7503:1726;7527:23;;:30;7523:34;;7503:1726;;;7586:8;7582:1;:12;7578:1641;;;7633:6;:25;;;7659:1;7633:28;;;;;;;;;;;;;;7614:13;7628:1;7614:16;;;;;;;;-1:-1:-1;7614:47:59;;;:16;;;;;;;;;;;:47;7816:16;;7761:162;;7850:1;;7816:13;;7830:1;;7816:16;;;;;;;;;;;;-1:-1:-1;;;;;7816:36:59;;;7904:1;4198;7874:31;7761:22;:33;;;;;;:162;;;;;:::i;:::-;7736:187;;8011:6;:38;;;8050:1;8011:41;;;;;;;;;;;;;;8007:370;;;8085:16;;8076:88;;8119:1;;8085:13;;8099:1;;8085:16;;;;;;;;;;;;;;;;-1:-1:-1;8085:36:59;;;9022:3:10;8076:8:59;:88::i;:::-;8211:42;8245:4;8251:1;8211:22;:33;;;;;;:42;;;;;:::i;:::-;8186:67;;8288:4;8276:16;;8007:370;;;8354:4;8339:19;;8007:370;7578:1641;;;8406:8;8401:1;:13;8397:822;;8453:6;:25;;;8483:1;8479;:5;8453:32;;;;;;;;;;;;;;8434:13;8448:1;8434:16;;;;;;;;-1:-1:-1;8434:51:59;;;:16;;;;;;;;;;;:51;8640:16;;8585:162;;8674:1;;8640:13;;8654:1;;8640:16;;;;;8585:162;8560:187;;8835:6;:38;;;8878:1;8874;:5;8835:45;;;;;;;;;;;;;;8831:374;;;8913:16;;8904:88;;8947:1;;8913:13;;8927:1;;8913:16;;;;;8904:88;9039:42;9073:4;9079:1;9039:22;:33;;;;;;:42;;;;;:::i;:::-;9014:67;;9116:4;9104:16;;8831:374;;;9182:4;9167:19;;8831:374;7559:3;;7503:1726;;;-1:-1:-1;9257:10:59;;9239:28;;;;;;9296:13;;9277:32;;;;9452:16;;:13;;9466:1;;9452:16;;;;;;;;;;;;;;9435:33;;-1:-1:-1;;9435:33:59;;;9495:16;;;;-1:-1:-1;;9495:16:59;;;;;;;;;;;;;;;;9478:33;;-1:-1:-1;;9478:33:59;;;9538:16;;;;9552:1;;9538:16;;;;;;;;;;;;;;;;9521:33;;-1:-1:-1;;9521:33:59;;;9582:20;;9605:1;-1:-1:-1;9581:64:59;;9643:1;9581:64;;;9610:13;9624:1;9610:16;;;;;;;;;;;;;;9581:64;9564:81;;-1:-1:-1;;9564:81:59;;;9673:20;;9696:1;-1:-1:-1;9672:64:59;;9734:1;9672:64;;;9701:13;9715:1;9701:16;;;;;;;;;;;;;;9672:64;9655:81;;-1:-1:-1;;9655:81:59;;;9764:20;;9787:1;-1:-1:-1;9763:64:59;;9825:1;9763:64;;;9792:13;9806:1;9792:16;;;;;;;;;;;;;;9763:64;9746:81;;-1:-1:-1;;9746:81:59;;;-1:-1:-1;;9838:48:59;;-1:-1:-1;;2581:17:58;;:24;2619;;;;;:31;2664:34;;;;:41;2532:183;;-1:-1:-1;2581:24:58;;-1:-1:-1;2619:31:58;2664:41;2532:35;;;;;:183;;:::i;:::-;2775:17;;2726:32;;2761:46;;2801:4;2761:13;:46::i;:::-;2872:23;;;;-1:-1:-1;;;2872:27:58;2843:234;2924:1;2913:8;:12;:57;;;;-1:-1:-1;2929:26:58;;2965:4;;2929:16;;2946:8;;2929:26;;;;;;;;;;;;-1:-1:-1;;;;;2929:41:58;;2913:57;2843:234;;;-1:-1:-1;;2984:10:58;2843:234;;;3087:15;3121:9;3116:626;3140:17;;:24;3136:28;;3116:626;;;3194:8;3189:1;:13;3185:63;;;3232:1;3222:11;;3185:63;3303:24;;;;:27;;3274:11;;;;3262:9;;3274:1;;3303:27;;;;;;;;;;;;-1:-1:-1;;;;;3303:47:58;;3299:433;;3370:92;3392:1;3395:10;:24;;;3420:1;3395:27;;;;;;;;;;;;;;3424:10;:34;;;3459:1;3424:37;;;;;;;;;;;;;;3370:21;;;:92;;:::i;:::-;3510:10;:24;;;3535:1;3510:27;;;;;;;;;;;;;;-1:-1:-1;;;;;3486:91:58;3507:1;3486:91;3539:10;:34;;;3574:1;3539:37;;;;;;;;;;;;;;3486:91;;;;;;:::i;:::-;;;;;;;;3700:17;3715:1;3700:14;:17::i;:::-;-1:-1:-1;3166:3:58;;3116:626;;;-1:-1:-1;;;;;;;3418:65:34;;3494:54;;;;;;-1:-1:-1;3558:42:34;;;-1:-1:-1;;3558:42:34;;;3611:67;3558:42;4446:1:17;3611:23:34;:67::i;:::-;3688:65;3712:19;4485:1:17;3688:23:34;:65::i;:::-;3768:25;3764:776;;;3809:66;3833:19;4359:1:17;3809:23:34;:66::i;:::-;3764:776;;;3961:69;;-1:-1:-1;3961:69:34;;3906:191;;-1:-1:-1;3961:47:34;;;;;:69;;4359:1:17;;3961:69:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3932:98;;;14240:3:10;3906:8:34;:191::i;:::-;4359:1:17;-1:-1:-1;;;;;;;;;;;4503:25:34;4447:82;;;;;;:::i;:::-;;;;;;;;3764:776;4705:25;:57;;4737:25;4705:57;;;4733:1;4705:57;4671:91;;-1:-1:-1;;;4660:14:55::5;::::0;::::5;::::0;4649:25;;::::5;::::0;:8:::5;::::0;:25:::5;::::0;;::::5;::::0;::::5;:::i;:::-;;3887:794:::0;2683:47726;;4765:408;4869:44;;:::i;:::-;4948:218;;;;;;;;5012:6;:13;;;4948:218;;;;5058:6;:20;;;4948:218;;;;5121:6;:30;;;4948:218;;;4929:237;;4765:408;;;;:::o;5257:478::-;5363:48;;:::i;:::-;5446:282;;;;;;;;5524:42;5538:6;:13;;;5560:4;5524:13;;;:42;;:::i;:::-;5446:282;;;;5604:6;:20;;;5446:282;;;;5675:6;:38;;;5446:282;;;5427:301;;5257:478;;;:::o;1536:425:42:-;1663:13;;1611:22;;1679:1;1663:17;-1:-1:-1;1650:31:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1650:31:42;;1641:40;;1692:6;:13;1709:1;1692:18;1688:81;;;1734:5;1722:6;1729:1;1722:9;;;;;;;;-1:-1:-1;1722:17:42;;;:9;;;;;;;;;;;:17;1749:13;;1688:81;1799:13;;1790:86;1818:1;1814;:5;:30;;;;-1:-1:-1;1823:13:42;;-1:-1:-1;1823:21:42;;;:6;;-1:-1:-1;;1830:5:42;;;1823:13;;;;;;;;;;;;-1:-1:-1;;;;;1823:21:42;;1814:30;1790:86;;;1863:6;1874:1;1870;:5;1863:13;;;;;;;;;;;;;;1851:6;1858:1;1851:9;;;;;;;;-1:-1:-1;1851:25:42;;;;:9;;;;;;;;;;;:25;-1:-1:-1;;1846:3:42;1790:86;;;1887:9;1882:53;1906:1;1902;:5;1882:53;;;1926:6;1933:1;1926:9;;;;;;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;-1:-1:-1;1914:21:42;;;;:9;;;;;;;;;;;:21;-1:-1:-1;1909:3:42;1882:53;;;;1953:5;1941:6;1948:1;1941:9;;;;;;;;-1:-1:-1;1941:17:42;;;:9;;;;;;;;;;;:17;-1:-1:-1;1536:425:42;;;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;10032:224:59:-;10216:33;10032:224;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:47;;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:47;;;6030:3:10;9078:8:28;:89::i;:::-;9190:147;9224:17;4326:3;4561:2;9190:9;;:20;;;;;;:147;;;;;;:::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;:::-;2210:1;2038:180;-1:-1:-1;;;2038:180:49:o;7584::61:-;7648:71;7672:5;;7686:15;;7648:23;:71::i;:::-;7734:23;7751:5;7734:23;;;;;;:::i;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;27427:510:28:-;27495:7;27544:4;-1:-1:-1;27518:31:28;;;27514:83;;;-1:-1:-1;945:4:47;27565:21:28;;27514:83;27687:21;27725:5;-1:-1:-1;;;;;27711:30:28;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27687:56;;;;27818:26;27847:27;27856:2;27860:13;27847:8;;;;;:27;;:::i;:::-;27908:2;:22;945:4:47;27891:39:28;;;-1:-1:-1;;;;27427:510:28:o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7470:13;7486:23;;;:16;:23;;;;;;;;;7427:33;;-1:-1:-1;7546:43:58;;7486:23;;7427:33;;7580:8;;7546:27;;;;;:43;;:::i;:::-;7520:23;;;;:16;:23;;;;;;;:69;;;;7605:34;7537:5;;7605:34;;;;7634:4;;7605:34;:::i;:::-;;;;;;;;7282:364;;;;;:::o;3871:161::-;3929:13;3945:23;;;:16;:23;;;;;;;;;;4004:21;;3945:23;;4004:19;;;;;:21;;:::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;6844:665:34:-;6988:49;;-1:-1:-1;6988:49:34;;6965:20;;-1:-1:-1;6988:40:34;;;-1:-1:-1;;6988:49:34;;7029:7;;6988:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6965:72;-1:-1:-1;7052:31:34;7048:383;;7116:23;:12;:21;;;;;:23;;:::i;:::-;7099:6;:40;;-1:-1:-1;7099:40:34;-1:-1:-1;7099:40:34;;;;;;;;;;7048:383;;;4446:1:17;7160:7:34;:32;7156:275;;;7226:23;:12;:21;;;;;:23;;:::i;:::-;7208:6;:41;;-1:-1:-1;7208:41:34;-1:-1:-1;7208:41:34;;;;-1:-1:-1;7208:41:34;;;;;;;7156:275;;;4485:1:17;7270:7:34;:30;7266:165;;;7332:23;:12;:21;;;;;:23;;:::i;:::-;7316:6;:39;;-1:-1:-1;7316:39:34;;;;-1:-1:-1;7316:39:34;-1:-1:-1;7316:39:34;;;;;;;;;7266:165;;;7386:34;12459:3:10;7386:7:34;:34::i;:::-;7480:7;-1:-1:-1;;;;;;;;;;;7489:12:34;7446:56;;;;;;:::i;:::-;;;;;;;;6844:665;;;:::o;1437:126:10:-;1484:28;1492:9;-1:-1:-1;1484:7:10;:28::i;:::-;1437:126;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;1799:51:43;-1:-1:-1;1808:18:43;;;;;;;5692:3:10;1799:8:43;:51::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;9409:124:28;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2512:395:46:-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;8082:570:61:-;8567:78;8588:7;2352:3;2472:2;8567:20;;;;;:78;;:::i;:::-;8470:82;8491:9;2295:3;2472:2;8470:20;;;;;:82;;:::i;:::-;8379:76;8400:8;2237:2;2411;8379:20;;;;;:76;;:::i;:::-;8284:80;8305:10;2181:1;2411:2;8284:20;;;;;:80;;:::i;:::-;:171;:268;:361;8245:24;:400;-1:-1:-1;;;;8082:570:61:o;1193:166:49:-;1251:7;1270:37;1279:6;;;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;;;;;:85;;:::i;:::-;:113;;;;;;:180;;;;;;:::i;:292::-;3692:311;3420:590;-1:-1:-1;;;;3420:590:36:o;2499:175::-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;1703:2;1895;2586:5;:16;;;;;;:81;;;;;;:::i;1410:186:53:-;1466:6;1484:75;-1:-1:-1;1493:25:53;;;12403:3:10;1484:8:53;:75::i;:::-;-1:-1:-1;1583:5:53;1410:186::o;1670:3378:10:-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;7061:607:46;7197:44;7215:3;7206:12;;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;;;;;:27;;:::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;3883:240::-;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;2038:157:36:-;2100:7;2126:62;1646:1;1895:2;2126:5;:16;;;;;;:62;;;;;:::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;2005:20;-1:-1:-1;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;2683:47726:55:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2683:47726:55;;;-1:-1:-1;2683:47726:55;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;5:134:-1;83:13;;101:33;83:13;101:33;:::i;161:713::-;;286:3;279:4;271:6;267:17;263:27;253:2;;-1:-1;;294:12;253:2;334:6;328:13;356:77;371:61;425:6;371:61;:::i;:::-;356:77;:::i;:::-;461:21;;;347:86;-1:-1;505:4;518:14;;;;493:17;;;607;;;598:27;;;;595:36;-1:-1;592:2;;;644:1;;634:12;592:2;669:1;;654:214;679:6;676:1;673:13;654:214;;;3338:6;3332:13;19331:5;17110:13;17103:21;19309:5;19306:32;19296:2;;669:1;;19342:12;19296:2;747:58;;819:14;;;;847;;;;701:1;694:9;654:214;;;658:14;;;;;;246:628;;;;:::o;908:767::-;;1051:3;1044:4;1036:6;1032:17;1028:27;1018:2;;-1:-1;;1059:12;1018:2;1099:6;1093:13;1121:95;1136:79;1208:6;1136:79;:::i;1121:95::-;1244:21;;;1112:104;-1:-1;1288:4;1301:14;;;;1276:17;;;1390;;;1381:27;;;;1378:36;-1:-1;1375:2;;;1427:1;;1417:12;1375:2;1452:1;1437:232;1462:6;1459:1;1456:13;1437:232;;;3632:6;3626:13;3644:48;3686:5;3644:48;:::i;:::-;1530:76;;1620:14;;;;1648;;;;1484:1;1477:9;1437:232;;;1441:14;;;;;1011:664;;;;:::o;1716:785::-;;1865:3;1858:4;1850:6;1846:17;1842:27;1832:2;;-1:-1;;1873:12;1832:2;1913:6;1907:13;1935:101;1950:85;2028:6;1950:85;:::i;1935:101::-;2064:21;;;1926:110;-1:-1;2108:4;2121:14;;;;2096:17;;;2210;;;2201:27;;;;2198:36;-1:-1;2195:2;;;2247:1;;2237:12;2195:2;2272:1;2257:238;2282:6;2279:1;2276:13;2257:238;;;4233:6;4227:13;4245:54;4293:5;4245:54;:::i;:::-;2350:82;;2446:14;;;;2474;;;;2304:1;2297:9;2257:238;;2527:722;;2655:3;2648:4;2640:6;2636:17;2632:27;2622:2;;-1:-1;;2663:12;2622:2;2703:6;2697:13;2725:80;2740:64;2797:6;2740:64;:::i;2725:80::-;2833:21;;;2716:89;-1:-1;2877:4;2890:14;;;;2865:17;;;2979;;;2970:27;;;;2967:36;-1:-1;2964:2;;;3016:1;;3006:12;2964:2;3041:1;3026:217;3051:6;3048:1;3045:13;3026:217;;;8372:13;;3119:61;;3194:14;;;;3222;;;;3073:1;3066:9;3026:217;;4483:444;;4596:3;4589:4;4581:6;4577:17;4573:27;4563:2;;-1:-1;;4604:12;4563:2;4638:13;;-1:-1;15684:30;;15681:2;;;-1:-1;;15717:12;15681:2;15858:4;4666:65;-1:-1;15790:9;15771:17;;15767:33;15848:15;;4666:65;:::i;:::-;4657:74;;4751:6;4744:5;4737:21;4855:3;15858:4;4846:6;4779;4837:16;;4834:25;4831:2;;;4872:1;;4862:12;4831:2;18794:1;18801:101;18815:6;18812:1;18809:13;18801:101;;;18882:11;;;;;18876:18;18863:11;;;;;18856:39;18830:10;;18801:101;;;18917:6;18914:1;18911:13;18908:2;;;18794:1;15858:4;18973:6;4813:5;18964:16;;18957:27;18908:2;;;;4556:371;;;;:::o;8572:263::-;;8687:2;8675:9;8666:7;8662:23;8658:32;8655:2;;;-1:-1;;8693:12;8655:2;-1:-1;3470:13;;8649:186;-1:-1;8649:186::o;8842:325::-;;8988:2;8976:9;8967:7;8963:23;8959:32;8956:2;;;-1:-1;;8994:12;8956:2;4040:6;4034:13;4052:64;4110:5;4052:64;:::i;9174:404::-;;9320:2;9308:9;9299:7;9295:23;9291:32;9288:2;;;-1:-1;;9326:12;9288:2;9371:24;;-1:-1;9404:30;;;9401:2;;;-1:-1;;9437:12;9401:2;9545:6;9534:9;9530:22;;;5114:6;;5102:9;5097:3;5093:19;5089:32;5086:2;;;-1:-1;;5124:12;5086:2;5152:22;5114:6;5152:22;:::i;:::-;5143:31;;5257:75;5328:3;5304:22;5257:75;:::i;:::-;5239:16;5232:101;5442:100;5538:3;9320:2;5518:9;5514:22;5442:100;:::i;:::-;9320:2;5428:5;5424:16;5417:126;5625:2;5614:9;5610:18;5604:25;9415:18;5641:6;5638:30;5635:2;;;-1:-1;;5671:12;5635:2;5716:70;5782:3;5773:6;5762:9;5758:22;5716:70;:::i;:::-;5625:2;5702:5;5698:16;5691:96;;5871:2;5860:9;5856:18;5850:25;9415:18;5887:6;5884:30;5881:2;;;-1:-1;;5917:12;5881:2;5962:70;6028:3;6019:6;6008:9;6004:22;5962:70;:::i;:::-;5871:2;5948:5;5944:16;5937:96;;6117:3;6106:9;6102:19;6096:26;9415:18;6134:6;6131:30;6128:2;;;-1:-1;;6164:12;6128:2;6209:100;6305:3;6296:6;6285:9;6281:22;6209:100;:::i;:::-;6117:3;6195:5;6191:16;6184:126;;6401:3;6390:9;6386:19;6380:26;9415:18;6418:6;6415:30;6412:2;;;-1:-1;;6448:12;6412:2;6493:106;6595:3;6586:6;6575:9;6571:22;6493:106;:::i;:::-;6401:3;6479:5;6475:16;6468:132;;6701:3;6690:9;6686:19;6680:26;9415:18;6718:6;6715:30;6712:2;;;-1:-1;;6748:12;6712:2;6793:85;6874:3;6865:6;6854:9;6850:22;6793:85;:::i;:::-;6701:3;6779:5;6775:16;6768:111;;6988:3;6977:9;6973:19;6967:26;9415:18;7005:6;7002:30;6999:2;;;-1:-1;;7035:12;6999:2;7080:82;7158:3;7149:6;7138:9;7134:22;7080:82;:::i;:::-;6988:3;7062:16;;7055:108;-1:-1;7242:3;7310:22;;;8372:13;7258:18;;;7251:88;7413:3;7481:22;;;8372:13;7429:18;;;7422:88;7586:3;7654:22;;;8372:13;7602:18;;;7595:88;7760:3;7828:22;;;8372:13;7776:18;;;7769:88;7919:3;7955:60;8011:3;7987:22;;;7955:60;:::i;:::-;7935:18;;;7928:88;8101:3;8086:19;;;8080:26;8115:30;;;8112:2;;;-1:-1;;8148:12;8112:2;8195:70;8261:3;8252:6;8241:9;8237:22;8195:70;:::i;:::-;8175:18;;;8168:98;;;;-1:-1;8179:5;9282:296;-1:-1;;;;;9282:296::o;9855:259::-;;9968:2;9956:9;9947:7;9943:23;9939:32;9936:2;;;-1:-1;;9974:12;9936:2;8517:6;8511:13;18264:4;20563:5;18253:16;20540:5;20537:33;20527:2;;-1:-1;;20574:12;12734:770;;13032:2;13021:9;13017:18;12267:5;12244:3;12237:37;13150:2;13032;13150;13139:9;13135:18;13128:48;13190:123;11616:5;16314:12;16890:6;16885:3;16878:19;16918:14;13021:9;16918:14;11628:93;;13150:2;11807:5;15995:14;11819:21;;-1:-1;11846:290;11871:6;11868:1;11865:13;11846:290;;;18375:52;11938:6;11932:13;18375:52;:::i;:::-;12362:65;;16603:14;;;;10487;;;;11893:1;11886:9;11846:290;;;-1:-1;;13351:20;;;13346:2;13331:18;;13324:48;16314:12;;16878:19;;;16918:14;;;;-1:-1;15995:14;;;;-1:-1;11064:260;11089:6;11086:1;11083:13;11064:260;;;17008:24;11156:6;11150:13;17008:24;:::i;:::-;10576:37;;10275:14;;;;16603;;;;11893:1;11104:9;11064:260;;;-1:-1;13378:116;;13003:501;-1:-1;;;;;;;;13003:501::o;13511:264::-;13659:2;13644:18;;19097:1;19087:12;;19077:2;;19103:9;19077:2;12531:71;;;13630:145;:::o;13782:222::-;12237:37;;;13909:2;13894:18;;13880:124::o;14011:256::-;14073:2;14067:9;14099:17;;;14195:22;;;-1:-1;14159:34;;14156:62;14153:2;;;14231:1;;14221:12;14153:2;14073;14240:22;14051:216;;-1:-1;14051:216::o;14274:301::-;;-1:-1;14419:30;;14416:2;;;-1:-1;;14452:12;14416:2;-1:-1;14497:4;14485:17;;;14550:15;;14353:222::o;16946:91::-;-1:-1;18048:54;;16991:46::o;19126:117::-;-1:-1;18048:54;;19185:35;;19175:2;;19234:1;;19224:12;19169:74;2683:47726:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2030": [ + { + "length": 32, + "start": 4430 + } + ], + "2531": [ + { + "length": 32, + "start": 3044 + } + ], + "2533": [ + { + "length": 32, + "start": 4729 + } + ], + "3869": [ + { + "length": 32, + "start": 4394 + } + ], + "4431": [ + { + "length": 32, + "start": 2186 + }, + { + "length": 32, + "start": 2229 + }, + { + "length": 32, + "start": 2272 + } + ], + "4455": [ + { + "length": 32, + "start": 2314 + } + ], + "4457": [ + { + "length": 32, + "start": 3621 + } + ], + "5049": [ + { + "length": 32, + "start": 4230 + } + ], + "6104": [ + { + "length": 32, + "start": 6940 + } + ], + "6106": [ + { + "length": 32, + "start": 6976 + } + ], + "8847": [ + { + "length": 32, + "start": 11627 + } + ], + "8849": [ + { + "length": 32, + "start": 11660 + } + ], + "8851": [ + { + "length": 32, + "start": 11594 + } + ], + "13180": [ + { + "length": 32, + "start": 5834 + } + ], + "13182": [ + { + "length": 32, + "start": 4174 + } + ], + "13184": [ + { + "length": 32, + "start": 7535 + } + ], + "13186": [ + { + "length": 32, + "start": 7601 + } + ], + "13188": [ + { + "length": 32, + "start": 7667 + } + ], + "13190": [ + { + "length": 32, + "start": 7733 + } + ], + "13192": [ + { + "length": 32, + "start": 7799 + } + ], + "13194": [ + { + "length": 32, + "start": 7865 + } + ], + "13196": [ + { + "length": 32, + "start": 11996 + } + ], + "13198": [ + { + "length": 32, + "start": 12044 + } + ], + "13200": [ + { + "length": 32, + "start": 12092 + } + ], + "13202": [ + { + "length": 32, + "start": 12140 + } + ], + "13204": [ + { + "length": 32, + "start": 12188 + } + ], + "13206": [ + { + "length": 32, + "start": 12236 + } + ], + "13208": [ + { + "length": 32, + "start": 7020 + } + ], + "13210": [ + { + "length": 32, + "start": 7068 + } + ], + "13212": [ + { + "length": 32, + "start": 7116 + } + ], + "13214": [ + { + "length": 32, + "start": 7164 + } + ], + "13216": [ + { + "length": 32, + "start": 7212 + } + ], + "13218": [ + { + "length": 32, + "start": 7260 + } + ], + "13220": [ + { + "length": 32, + "start": 11068 + }, + { + "length": 32, + "start": 17406 + } + ], + "13222": [ + { + "length": 32, + "start": 18309 + } + ], + "13224": [ + { + "length": 32, + "start": 18345 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106103785760003560e01c806370464016116101d3578063a457c2d711610104578063d505accf116100a2578063ddf4627b1161007c578063ddf4627b146106e3578063eb0f24d6146106eb578063ed24911d146106f3578063f4b7964d146106fb57610378565b8063d505accf146106aa578063d5c096c4146106bd578063dd62ed3e146106d057610378565b8063ab7759f1116100de578063ab7759f11461067f578063b35056b814610692578063b7b814fc1461069a578063d2946c2b146106a257610378565b8063a457c2d714610651578063a9059cbb14610664578063aaabadc51461067757610378565b8063851c1bb311610171578063893d20e81161014b578063893d20e8146106195780638d928af81461062e57806390193b7c1461063657806395d89b411461064957610378565b8063851c1bb3146105eb578063876f303b146105fe57806387ec68171461060657610378565b80637ecebe00116101ad5780637ecebe00146105a55780637f1260d1146105b857806382687a56146105db5780638456cb59146105e357610378565b8063704640161461055e57806370a082311461057157806374f3b0091461058457610378565b80633644e515116102ad57806354a844ba1161024b57806355c676281161022557806355c67628146105165780636028bfd41461051e578063679aefce1461053f5780636daccffa1461054757610378565b806354a844ba146104f357806354dea00a146104fb57806354fd4d501461050e57610378565b8063395093511161028757806339509351146104af5780633c975d51146104c25780633f4ba83a146104d857806350dd6ed9146104e057610378565b80633644e5151461048c57806338e9922e1461049457806338fff2d0146104a757610378565b80631c0de0511161031a57806323b872dd116102f457806323b872dd1461043e5780632df2c7c0146104515780632f1a0bc914610464578063313ce5671461047757610378565b80631c0de051146103fd5780631dd746ea14610414578063238a2d591461042957610378565b8063095ea7b311610356578063095ea7b3146103c35780630da0669c146103e357806315b0015b146103ed57806318160ddd146103f557610378565b806301ec954a1461037d57806304842d4c146103a657806306fdde03146103ae575b600080fd5b61039061038b366004615a13565b61070e565b60405161039d9190615dc3565b60405180910390f35b6103906107b4565b6103b66107c3565b60405161039d9190615e99565b6103d66103d1366004615638565b610859565b60405161039d9190615da0565b6103eb610870565b005b6103d6610908565b61039061092c565b610405610932565b60405161039d93929190615dab565b61041c61095b565b60405161039d9190615d68565b610431610965565b60405161039d9190615d1b565b6103d661044c366004615588565b610a00565b6103eb61045f366004615534565b610a74565b6103eb610472366004615b62565b610ad0565b61047f610bb3565b60405161039d9190615f04565b610390610bbc565b6103eb6104a2366004615b32565b610bc6565b610390610be2565b6103d66104bd366004615638565b610c06565b6104ca610c41565b60405161039d929190615edb565b6103eb610c6c565b6103eb6104ee36600461584e565b610c7e565b6103eb610c9c565b610390610509366004615534565b610cae565b6103b6610cc9565b610390610d2a565b61053161052c36600461574f565b610d3d565b60405161039d929190615eac565b610390610d74565b61054f610de0565b60405161039d93929190615ec5565b61039061056c366004615b32565b610dfb565b61039061057f366004615534565b610ec1565b61059761059236600461574f565b610edc565b60405161039d929190615d7b565b6103906105b3366004615534565b610fdf565b6105cb6105c6366004615534565b610fea565b60405161039d9493929190615ee9565b61039061104c565b6103eb611070565b6103906105f93660046157f2565b611082565b6103906110d4565b61053161061436600461574f565b611102565b610621611128565b60405161039d9190615d07565b61062161114c565b610390610644366004615534565b611170565b6103b661118b565b6103d661065f366004615638565b6111ec565b6103d6610672366004615638565b61122a565b610621611237565b6103d661068d366004615534565b611241565b6103d6611254565b6103eb611265565b610621611277565b6103eb6106b83660046155c8565b61129b565b6105976106cb36600461574f565b611326565b6103906106de366004615550565b611449565b610390611486565b6103eb61148c565b6103906114b8565b6103eb610709366004615638565b6114c2565b6000846080015161073b61072061114c565b6001600160a01b0316336001600160a01b03161460cd6116aa565b610750610746610be2565b82146101f46116aa565b6107586116b8565b61076a84846107656116c8565b6116ec565b6060610774611704565b905060008751600181111561078557fe5b1461079c57610797878787878561179d565b6107a9565b6107a987878787856117f6565b979650505050505050565b60006107be611831565b905090565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b6000610866338484611838565b5060015b92915050565b6108786118a0565b610880610908565b156108b0576108b07f0000000000000000000000000000000000000000000000000000000000000000600061190d565b6108db7f0000000000000000000000000000000000000000000000000000000000000000600261190d565b6109067f0000000000000000000000000000000000000000000000000000000000000000600361190d565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b600080600061093f611afd565b15925061094a611b1a565b9150610954611b3e565b9050909192565b60606107be611704565b606060006109716116c8565b905060608167ffffffffffffffff8111801561098c57600080fd5b506040519080825280602002602001820160405280156109b6578160200160208202803683370190505b50905060005b828110156109f9576109cd81611b62565b8282815181106109d957fe5b6001600160a01b03909216602092830291909101909101526001016109bc565b5091505090565b600080610a0d8533611449565b9050610a31336001600160a01b0387161480610a295750838210155b61019e6116aa565b610a3c858585611c8b565b336001600160a01b03861614801590610a5757506000198114155b15610a6957610a698533858403611838565b506001949350505050565b6000610a7f82611d6b565b90506000610a8c82611b62565b9050610aa56001600160a01b03821615156101556116aa565b6000828152600a6020526040812054610abd90611ef9565b9050610aca838383611f08565b50505050565b610ad8611feb565b610ae8600183101561012c6116aa565b610af961138883111561012d6116aa565b6000610b0582426115ef565b9050610b196201518082101561013d6116aa565b600080610b24612031565b91509150610b35811561013e6116aa565b6000610b43866103e8611558565b90506000838211610b7257610b6d610b5e6201518086611558565b610b688488611558565b6120a5565b610b8c565b610b8c610b826201518084611558565b610b688688611558565b9050610b9e600282111561013f6116aa565b610baa848342896120d8565b50505050505050565b60055460ff1690565b60006107be6114b8565b610bce611feb565b610bd6612127565b610bdf8161213a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610866918590610c3c90866121b3565b611838565b600c546000908190610c568160e9601761169b565b9250610c6581600060e961169b565b9150509091565b610c74611feb565b61090660006121c5565b610c86611feb565b610c8e612127565b610c988282612256565b5050565b610ca4611feb565b6109066001612364565b6000610cc1610cbc83611d6b565b6123bb565b90505b919050565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6008546000906107be9060c0603f61169b565b60006060610d538651610d4e6116c8565b61240e565b610d688989898989898961241b61243d6124a6565b97509795505050505050565b60006060600080600080610d8661263d565b9398509196509450925090506000610d9e85856121b3565b90506000610daa612031565b5090506000848214610dc557610dc0828961272d565b610dc7565b835b9050610dd3818461288f565b9850505050505050505090565b6000806000610ded612031565b90949093506103e892509050565b6000610e05611254565b15610e1257506000610cc4565b81610e5e57610e1f610908565b610e49577f0000000000000000000000000000000000000000000000000000000000000000610e57565b600b5467ffffffffffffffff165b9050610cc4565b6002821415610e865750600b5468010000000000000000900467ffffffffffffffff16610cc4565b6003821415610eb65750600b54700100000000000000000000000000000000900467ffffffffffffffff16610cc4565b610cc46101bb6128e0565b6001600160a01b031660009081526020819052604090205490565b60608088610eeb61072061114c565b610ef6610746610be2565b60606000610f038661290a565b15610f2b57610f10612939565b610f2289610f1c61092c565b8861294c565b92509050610f7d565b610f336116b8565b6060610f3d611704565b9050610f498a82612990565b610f6d8d8d8d8d8d610f59611254565b610f63578d610f66565b60005b878e61241b565b93509150610f7b838261243d565b505b610f878b826129f9565b81895167ffffffffffffffff81118015610fa057600080fd5b50604051908082528060200260200182016040528015610fca578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610cc182611170565b6000806000806000600a6000610fff88611d6b565b815260208101919091526040016000205490506110208115156101556116aa565b61102981612a03565b945061103481612a11565b935061103f81612a1f565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611078611feb565b61090660016121c5565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016110b7929190615c91565b604051602081830303815290604052805190602001209050919050565b60008060006110e161263d565b505092509250506110fb81836121b390919063ffffffff16565b9250505090565b600060606111138651610d4e6116c8565b610d6889898989898989612a41612a526124a6565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6000806111f93385611449565b90508083106112135761120e33856000611838565b611220565b6112203385858403611838565b5060019392505050565b6000610866338484611c8b565b60006107be612abb565b6000610cc161124f83611d6b565b612b35565b6008546000906107be9060ff612b5d565b61126d611feb565b6109066000612364565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112ca8c611170565b896040516020016112e096959493929190615deb565b6040516020818303038152906040528051906020012090506113118882611308878787612b67565b886101f8612ba6565b61131c888888611838565b5050505050505050565b6060808861133561072061114c565b611340610746610be2565b6113486116b8565b6060611352611704565b905061135c61092c565b61140957600060606113718d8d8d868b612bfd565b9150915061138a611380611831565b83101560cc6116aa565b61139c6000611397611831565b612cd6565b6113af8b6113a8611831565b8403612cd6565b6113b98184612a52565b808a5167ffffffffffffffff811180156113d257600080fd5b506040519080825280602002602001820160405280156113fc578160200160208202803683370190505b5095509550505050610fd2565b6114138882612990565b6000606061143b8d8d8d8d8d611427611254565b611431578d611434565b60005b898e612a41565b915091506113af8b83612cd6565b600061145361114c565b6001600160a01b0316826001600160a01b03161415611475575060001961086a565b61147f8383612ce0565b905061086a565b60001981565b611494611feb565b60008061149f612031565b915091506114af816101406116aa565b610c9882612d0b565b60006107be612d46565b6114ca611feb565b60006114d583611d6b565b905060006114e282611b62565b90506114fb6001600160a01b03821615156101556116aa565b611506828285611f08565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516115409190615dc3565b60405180910390a350505050565b80610c9881612de3565b600082820261157c84158061157557508385838161157257fe5b04145b60036116aa565b9392505050565b61159b828414801561159457508183145b60676116aa565b505050565b60006001821b19841682846115b65760006115b9565b60015b60ff16901b17949350505050565b60006115d4848484612e5c565b5082821b6000196001831b01831b198516175b949350505050565b60006115ff8383111560016116aa565b50900390565b6000611618606084901c156101496116aa565b6115e742830160e060206116358660c083838c8c600060606115c7565b9291906115c7565b6000610cc161164b83612a03565b83906060806115c7565b600061166e67ffffffffffffffff8311156101ba6116aa565b5090565b600061167f848484612e5c565b50501b90565b6000818310611694578161157c565b5090919050565b6001901b6000190191901c1690565b81610c9857610c98816128e0565b6116c0612ea2565b610906612eaa565b7f000000000000000000000000000000000000000000000000000000000000000090565b61159b81841080156116fd57508183105b60646116aa565b606060006117106116c8565b905060608167ffffffffffffffff8111801561172b57600080fd5b50604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b828110156109f95761177e61176f826123bb565b61177883612ed2565b90612ff0565b82828151811061178a57fe5b602090810291909101015260010161175b565b60208501516000906001600160a01b03163014806117c7575060408601516001600160a01b031630145b6117dd576117d8868686868661301c565b6117ea565b6117ea8686868686613086565b90505b95945050505050565b60208501516000906001600160a01b0316301480611820575060408601516001600160a01b031630145b6117dd576117d8868686868661318a565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611893908590615dc3565b60405180910390a3505050565b6118a8612127565b606060008060006118b761263d565b94509450945050935060008311156118d2576118d2836131e1565b60006118dc612031565b50905060008382146118f7576118f2828761272d565b6118f9565b825b905061190582826131f2565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611955908590600401615dc3565b60206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190615b4a565b9050816119f3576119b581611655565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611ac0565b6002821415611a5057611a0581611655565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611ac0565b6003821415611ab557611a6281611655565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611ac0565b611ac06101bb6128e0565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611af09190615dc3565b60405180910390a2505050565b6000611b07611b3e565b4211806107be57505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611b9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415611bc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415611bf057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415611c2057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415611c5057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b610cc46101356128e0565b611ca26001600160a01b03841615156101986116aa565b611cb96001600160a01b03831615156101996116aa565b611cc483838361159b565b6001600160a01b038316600090815260208190526040902054611cea90826101a0613218565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d1990826121b3565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611893908590615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611daf57506000610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611df157506001610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e3357506002610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e7557506003610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611eb757506004610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c8057506005610cc4565b6000610cc18260c0602061169b565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615b4a565b6000858152600a6020526040902054909150611f98818385611605565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611fdc908590615dc3565b60405180910390a25050505050565b600061201a6000357fffffffff0000000000000000000000000000000000000000000000000000000016611082565b9050610bdf612029823361322e565b6101916116aa565b600080600080600080612042613317565b93509350935093508042101561209557600194508383111561207957818103824203858503028161206f57fe5b0484019550612090565b818103824203848603028161208a57fe5b04840395505b61209d565b600094508295505b505050509091565b60006120b482151560046116aa565b826120c15750600061086a565b8160018403816120cd57fe5b04600101905061086a565b6120e484848484613376565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516121199493929190615ee9565b60405180910390a150505050565b610906612132611afd565b6101926116aa565b61214f6121456133b5565b82101560cb6116aa565b61216461215a6133be565b82111560ca6116aa565b600854612175908260c0603f6115c7565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906121a8908390615dc3565b60405180910390a150565b600082820161157c84821015836116aa565b80156121e5576121e06121d6611b1a565b42106101936116aa565b6121fa565b6121fa6121f0611b3e565b42106101a96116aa565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906121a8908390615da0565b6000612260610be2565b9050600061226c61114c565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401612299929190615e64565b60806040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615b83565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250612336915085908790600401615e4b565b600060405180830381600087803b15801561235057600080fd5b505af115801561131c573d6000803e3d6000fd5b600854612373908260ff6115a0565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906123a6908390615da0565b60405180910390a180610bdf57610bdf6133ca565b60006123c561104c565b8214156123db5750670de0b6b3a7640000610cc4565b6000828152600a602052604090205480156123fe576123f981612a03565b61157c565b670de0b6b3a76400009392505050565b610c9881831460676116aa565b6000606061242c600088868661349c565b915091509850989650505050505050565b8151815161244c90829061240e565b60005b81811015610aca5761248784828151811061246657fe5b602002602001015184838151811061247a57fe5b602002602001015161288f565b84828151811061249357fe5b602090810291909101015260010161244f565b333014612595576000306001600160a01b03166000366040516124ca929190615cc1565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050806000811461251b57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612577573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61259d6116b8565b60606125a7611704565b90506125b38782612990565b600060606125cb8c8c8c8c8c8c898d8d63ffffffff16565b915091506125dd81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6060600080600080606061264f61114c565b6001600160a01b031663f94d4668612665610be2565b6040518263ffffffff1660e01b81526004016126819190615dc3565b60006040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190615663565b509150506126ea816126e5611704565b612990565b6126f38161354a565b965094506000612701610c41565b90945090506000612713888684613583565b945090506127218782613610565b95505050509091929394565b80516000908190815b8181101561276e5761276485828151811061274d57fe5b6020026020010151846121b390919063ffffffff16565b9250600101612736565b508161277f5760009250505061086a565b600082868302825b60ff811015612878578260005b868110156127d5576127cb6127a98387611558565b6127c68c84815181106127b857fe5b60200260200101518a611558565b613628565b9150600101612794565b5083945061282e61280d6128076127ec848a611558565b6128016127f9888d611558565b6103e8613628565b906121b3565b86611558565b6127c661281d8960010185611558565b6128016127f96103e889038a611558565b93508484111561285657600185850311612851578397505050505050505061086a565b61286f565b60018486031161286f578397505050505050505061086a565b50600101612787565b506128846101416128e0565b505050505092915050565b600061289e82151560046116aa565b826128ab5750600061086a565b670de0b6b3a7640000838102906128ce908583816128c557fe5b041460056116aa565b8281816128d757fe5b0491505061086a565b610bdf817f42414c0000000000000000000000000000000000000000000000000000000000613648565b6000808251118015610cc1575060ff80168280602001905181019061292f9190615bc3565b60ff161492915050565b610906612944611254565b6101b66116aa565b600060606000606061295d8761354a565b91509150600060606129708385896136c3565b91509150816129808260006136ef565b9550955050505050935093915050565b8151815161299f90829061240e565b60005b81811015610aca576129da8482815181106129b957fe5b60200260200101518483815181106129cd57fe5b6020026020010151612ff0565b8482815181106129e657fe5b60209081029190910101526001016129a2565b610c9882826137ac565b6000610cc18282606061169b565b6000610cc18260608061169b565b600080612a2b83611ef9565b9150612a3a8360e0602061169b565b9050915091565b6000606061242c600188868661349c565b81518151612a6190829061240e565b60005b81811015610aca57612a9c848281518110612a7b57fe5b6020026020010151848381518110612a8f57fe5b6020026020010151613878565b848281518110612aa857fe5b6020908102919091010152600101612a64565b6000612ac561114c565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190615832565b6000610cc17f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612bb1856138c6565b9050612bc7612bc18783876138e2565b836116aa565b612bd6428410156101b86116aa565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612c0c84613991565b9050612c276000826003811115612c1f57fe5b1460ce6116aa565b6060612c32856139a7565b9050612c408151875161240e565b612c4a8187612990565b6000612c54612031565b5090506060612c62836139bd565b90506000612c70838361272d565b9050806000612c8d6d8000000000000000000000000000836115ef565b9050612c998d82612cd6565b8086612ca361104c565b81518110612cad57fe5b602002602001018181525050612cc385846131f2565b509c939b50929950505050505050505050565b610c988282613a5f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612d1781824242613376565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516121a89190615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612db3613aec565b30604051602001612dc8959493929190615e1f565b60405160208183030381529060405280519060200120905090565b600281511015612df257610bdf565b600081600081518110612e0157fe5b602002602001015190506000600190505b825181101561159b576000838281518110612e2957fe5b60200260200101519050612e52816001600160a01b0316846001600160a01b03161060656116aa565b9150600101612e12565b612e6b610100831060646116aa565b612e93600182101580156116fd5750612e8960ff8461010003611685565b82111560646116aa565b61159b83821c156101b46116aa565b610906612127565b6000612eb46116c8565b905060005b81811015610c9857612eca81613af0565b600101612eb9565b600081612f0057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415612f3057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415612f6057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415612f9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415612fc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b600082820261300a84158061157557508385838161157257fe5b670de0b6b3a764000090049392505050565b60006130288583612990565b613049866060015183858151811061303c57fe5b6020026020010151613b44565b6060870152600061305c87878787613b50565b905061307b8184878151811061306e57fe5b6020026020010151613b64565b90506107a981613b70565b600080808751600181111561309757fe5b1490506130a48684612990565b6130c4876060015184836130b857866130ba565b875b8151811061303c57fe5b876060018181525050600060606000806130dd8a613b8c565b93509350935093506000806130f061104c565b8a1461311657613111878e60600151876131098e613bf5565b888b89613c2a565b613131565b613131878e60600151876131298f613bf5565b888b89613c63565b915091506131428486858985613c87565b8661315c57613157828a8d8151811061306e57fe5b613179565b613179828a8c8151811061316c57fe5b6020026020010151613d07565b9d9c50505050505050505050505050565b60006131998660600151613d13565b60608701526131a88583612990565b6131bc866060015183868151811061303c57fe5b606087015260006131cf87878787613d34565b90506107a98184868151811061316c57fe5b610bdf6131ec611277565b82612cd6565b6131ff81600060e9611672565b61320c8360e96017611672565b17600c55610c98613d48565b600061322784841115836116aa565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61324d611128565b6001600160a01b031614158015613268575061326883613d7e565b1561329057613275611128565b6001600160a01b0316336001600160a01b031614905061086a565b613298612abb565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016132c793929190615dcc565b60206040518083038186803b1580156132df57600080fd5b505afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f919061572f565b6000806000806133366000604060095461169b9092919063ffffffff16565b6009549094506133489060408061169b565b60095490935061335b906080604061169b565b60095490925061336e9060c0604061169b565b905090919293565b6133838160c06040611672565b6133908360806040611672565b61339c85604080611672565b6133a98760006040611672565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b60606133d461114c565b6001600160a01b031663f94d46686133ea610be2565b6040518263ffffffff1660e01b81526004016134069190615dc3565b60006040518083038186803b15801561341e57600080fd5b505afa158015613432573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261345a9190810190615663565b5091505061346a816126e5611704565b6060613475826139bd565b90506000613481612031565b5090506000613490828461272d565b9050610aca82826131f2565b60006060600060606000806134b089613b8c565b93509350935093506153d08a6134c857613d896134cc565b613e1e5b9050600060606134e4868689878f8f8963ffffffff16565b915091506153d08d6134f8576115ef6134fc565b6121b35b9050613509878383613e9c565b600061351989858463ffffffff16565b90506135288789888c85613c87565b836135348460006136ef565b9a509a5050505050505050505094509492505050565b600060606135718361355a61104c565b8151811061356457fe5b6020026020010151613f10565b61357a846139bd565b91509150915091565b60008060008060006135958888613f24565b92509250925060008684116135ab5760006135af565b8684035b905060008484116135c15760006135c5565b8484035b905060006135e06135d66000610dfb565b611778858761288f565b905060006135fb6135f16002610dfb565b611778858861288f565b919091019b939a509298505050505050505050565b600061157c61361f8484611558565b6127c684613fa6565b600061363782151560046116aa565b81838161364057fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000606060006136d284613fcc565b905060606136e1878784613fe2565b919791965090945050505050565b6060825160010167ffffffffffffffff8111801561370c57600080fd5b50604051908082528060200260200182016040528015613736578160200160208202803683370190505b50905060005b81518110156137a55761374d61104c565b8114613784578361375c61104c565b821061376b576001820361376d565b815b8151811061377757fe5b6020026020010151613786565b825b82828151811061379257fe5b602090810291909101015260010161373c565b5092915050565b6137c36001600160a01b038316151561019b6116aa565b6137cf8260008361159b565b6001600160a01b0382166000908152602081905260409020546137f590826101b2613218565b6001600160a01b0383166000908152602081905260409020556138286138238261381d61092c565b90614091565b61409f565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386c9190615dc3565b60405180910390a35050565b600061388782151560046116aa565b826138945750600061086a565b670de0b6b3a7640000838102906138ae908583816128c557fe5b8260018203816138ba57fe5b0460010191505061086a565b60006138d0612d46565b826040516020016110b7929190615cd1565b60006138f482516041146101b96116aa565b60208281015160408085015160608601518251600080825295019283905292939092811a9160019061392d908990859088908890615e7b565b6020604051602081039080840390855afa15801561394f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906139855750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610cc1919061595d565b60608180602001905181019061157c9190615978565b606080600183510367ffffffffffffffff811180156139db57600080fd5b50604051908082528060200260200182016040528015613a05578160200160208202803683370190505b50905060005b81518110156137a55783613a1d61104c565b8210613a2c5781600101613a2e565b815b81518110613a3857fe5b6020026020010151828281518110613a4c57fe5b6020908102919091010152600101613a0b565b613a6b6000838361159b565b613a7a6138238261280161092c565b6001600160a01b038216600090815260208190526040902054613a9d90826121b3565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061386c908590615dc3565b4690565b613af861104c565b811415613b0457610bdf565b6000818152600a60205260409020548015610c9857600080613b2583612a1f565b9150915080421115610aca57610aca84613b3e86611b62565b84611f08565b600061157c8383612ff0565b60006117ed600086606001518686866140a4565b600061157c8383613878565b6000610cc1613b85613b80610d2a565b613fa6565b8390613878565b60006060600080600080613b9e610c41565b91509150600060606000613bb38a8686614116565b9250925092506000613bc3612031565b5090506000868214613bde57613bd9828561272d565b613be0565b825b949c939b509099509297509095505050505050565b6000613c0c613c0261104c565b83141560646116aa565b613c1461104c565b821061166e57613c258260016115ef565b610cc1565b60008088613c4557613c4088888888888861416e565b613c53565b613c53888888888888614245565b9150915097509795505050505050565b60008088613c7957613c408888888888886142a6565b613c5388888888888861430c565b6000613c93868661272d565b90506000613ca1838561288f565b90506000613caf8683612ff0565b905080831115613cfd578083036000613cd9613cd383613cce84610dfb565b611558565b86613628565b90508015613cfa576000613ced8783613610565b9050613cf8816131e1565b505b50505b61131c88846131f2565b600061157c838361288f565b600080613d28613d21610d2a565b84906143bb565b905061157c83826115ef565b60006117ed600186606001518686866140a4565b6000613d526116c8565b905060005b81811015610c9857613d68816143f7565b15613d7657613d7681614426565b600101613d57565b6000610cc182614454565b600060606000613d988461445f565b90506001816002811115613da857fe5b1415613dc657613dbc87878a8c8989614475565b9250925050613e13565b6002816002811115613dd457fe5b1415613de557613dbc878a866144d4565b6000816002811115613df357fe5b1415613e0657613dbc87878a8c886144f2565b613e116101506128e0565b505b965096945050505050565b600060606000613e2d84613991565b90506001816003811115613e3d57fe5b1415613e5157613dbc87878a8c8989614593565b6003816003811115613e5f57fe5b1415613e7057613dbc878a866145e2565b6002816003811115613e7e57fe5b1415613e9157613dbc87878a8c88614600565b613e116101366128e0565b82518251613eab90829061240e565b60005b81811015613f0957613eea858281518110613ec557fe5b6020026020010151858381518110613ed957fe5b60200260200101518563ffffffff16565b858281518110613ef657fe5b6020908102919091010152600101613eae565b5050505050565b6000610cc182613f1e61092c565b906115ef565b6000806000613f3d84613f3887600161467a565b61272d565b9250613f47614783565b15613f6057613f56848661272d565b9150819050613f9f565b613f686147a7565b15613f8157829150613f7a848661272d565b9050613f9f565b613f9084613f3887600061467a565b9150613f9c848661272d565b90505b9250925092565b6000670de0b6b3a76400008210613fbe576000610cc1565b50670de0b6b3a76400000390565b60008180602001905181019061157c9190615bdf565b60606000613ff0838561288f565b9050845167ffffffffffffffff8111801561400a57600080fd5b50604051908082528060200260200182016040528015614034578160200160208202803683370190505b50915060005b8551811015614088576140698287838151811061405357fe5b6020026020010151612ff090919063ffffffff16565b83828151811061407557fe5b602090810291909101015260010161403a565b50509392505050565b600061157c83836001613218565b600255565b600060606140b1856139bd565b905060006140be85613bf5565b905060006140cb85613bf5565b905060006140d7612031565b50905060006140e6828661272d565b90508a15614108576140fc828686868e866147cb565b955050505050506117ed565b6140fc828686868e86614856565b6000606060008060606141288861354a565b9150915060008061413a838a8a613583565b91509150600061414a8584613610565b9050801561415b5761415b816131e1565b9390930199919850919650945050505050565b6000806060875167ffffffffffffffff8111801561418b57600080fd5b506040519080825280602002602001820160405280156141b5578160200160208202803683370190505b509050888188815181106141c557fe5b60200260200101818152505060006141e8878a8489896141e3610d2a565b6148e9565b90506142108a8a8a815181106141fa57fe5b60200260200101516115ef90919063ffffffff16565b89898151811061421c57fe5b6020908102919091010152600061423387836115ef565b919b919a509098505050505050505050565b60008060006142608689898c898961425b610d2a565b614b79565b9050614272818989815181106141fa57fe5b88888151811061427e57fe5b60209081029190910101526000614295868b6115ef565b919a91995090975050505050505050565b60008060006142c18689898c89896142bc610d2a565b614c68565b90506142e9818989815181106142d357fe5b60200260200101516121b390919063ffffffff16565b8888815181106142f557fe5b60209081029190910101526000614295868b6121b3565b6000806060875167ffffffffffffffff8111801561432957600080fd5b50604051908082528060200260200182016040528015614353578160200160208202803683370190505b5090508881888151811061436357fe5b6020026020010181815250506000614386878a848989614381610d2a565b614d35565b90506143988a8a8a815181106142d357fe5b8989815181106143a457fe5b6020908102919091010152600061423387836121b3565b60008282026143d584158061157557508385838161157257fe5b806143e457600091505061086a565b670de0b6b3a764000060001982016138ba565b6000610cc17f000000000000000000000000000000000000000000000000000000000000000060068401612b5d565b6000818152600a602052604090205461443e8161163d565b6000928352600a60205260409092209190915550565b6000610cc182614fb6565b600081806020019051810190610cc1919061589c565b6000606080600061448585614ff2565b915091506144958251885161240e565b6144a2826126e5886139bd565b60006144b48989858e8e6141e3610d2a565b90506144c48282111560cf6116aa565b9a91995090975050505050505050565b6000606060006144e384615015565b905060606136e1868884613fe2565b600060606000806145028561502b565b915091506145148651821060646116aa565b6060865167ffffffffffffffff8111801561452e57600080fd5b50604051908082528060200260200182016040528015614558578160200160208202803683370190505b50905061456c888884868e8e61425b610d2a565b81838151811061457857fe5b60209081029190910101529199919850909650505050505050565b600060608060006145a385615042565b915091506145b38751835161240e565b6145c0826126e5886139bd565b60006145d28989858e8e614381610d2a565b90506144c48282101560d06116aa565b6000606060006145f18461505a565b905060606136e1868389615070565b600060606000806146108561510c565b915091506146228651821060646116aa565b6060865167ffffffffffffffff8111801561463c57600080fd5b50604051908082528060200260200182016040528015614666578160200160208202803683370190505b50905061456c888884868e8e6142bc610d2a565b8151606090818167ffffffffffffffff8111801561469757600080fd5b506040519080825280602002602001820160405280156146c1578160200160208202803683370190505b50905060005b8281101561477a5760006146d961104c565b8210156146e657816146eb565b816001015b90506146f681612b35565b8061470d575085801561470d575061470d816143f7565b61472a5786828151811061471d57fe5b602002602001015161475a565b61475a87838151811061473957fe5b6020026020010151600a600084815260200190815260200160002054615123565b83838151811061476657fe5b6020908102919091010152506001016146c7565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006147dd838787815181106142d357fe5b8686815181106147e957fe5b60200260200101818152505060006148038888858861513e565b90508387878151811061481257fe5b60200260200101510387878151811061482757fe5b6020026020010181815250506148486001613f1e838a89815181106141fa57fe5b9150505b9695505050505050565b6000614868838786815181106141fa57fe5b86858151811061487457fe5b602002602001018181525050600061488e8888858961513e565b90508387868151811061489d57fe5b6020026020010151018786815181106148b257fe5b60200260200101818152505061484860016128018989815181106148d257fe5b6020026020010151846115ef90919063ffffffff16565b600080805b87518110156149275761491d88828151811061490657fe5b6020026020010151836121b390919063ffffffff16565b91506001016148ee565b506060865167ffffffffffffffff8111801561494257600080fd5b5060405190808252806020026020018201604052801561496c578160200160208202803683370190505b5090506000805b8951811015614a395760006149a4858c848151811061498e57fe5b602002602001015161387890919063ffffffff16565b90506149e68b83815181106149b557fe5b60200260200101516149e08c85815181106149cc57fe5b60200260200101518e86815181106141fa57fe5b90613878565b8483815181106149f257fe5b602002602001018181525050614a2e614a2782868581518110614a1157fe5b60200260200101516143bb90919063ffffffff16565b84906121b3565b925050600101614973565b506060895167ffffffffffffffff81118015614a5457600080fd5b50604051908082528060200260200182016040528015614a7e578160200160208202803683370190505b50905060005b8a51811015614b49576000848281518110614a9b57fe5b6020026020010151841115614b02576000614ac4614ab886613fa6565b8e858151811061405357fe5b90506000614ad8828e86815181106141fa57fe5b9050614af9614af282670de0b6b3a76400008d9003613878565b83906121b3565b92505050614b19565b8a8281518110614b0e57fe5b602002602001015190505b614b29818d84815181106141fa57fe5b838381518110614b3557fe5b602090810291909101015250600101614a84565b506000614b568c8361272d565b90506000614b64828a61288f565b9050613179614b7282613fa6565b8b906143bb565b600080614b9484614b8e876149e0818b6115ef565b906143bb565b90506000614ba48a8a848b61513e565b90506000614bb8828b8b815181106141fa57fe5b90506000805b8b51811015614be057614bd68c828151811061490657fe5b9150600101614bbe565b506000614c09828d8d81518110614bf357fe5b602002602001015161288f90919063ffffffff16565b90506000614c1682613fa6565b90506000614c2485836143bb565b90506000614c3286836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003612ff0565b82906121b3565b98505050505050505050979650505050505050565b600080614c7d84614b8e876149e0818b6121b3565b90506000614c8d8a8a848b61513e565b90506000614cb78a8a81518110614ca057fe5b6020026020010151836115ef90919063ffffffff16565b90506000805b8b51811015614cdf57614cd58c828151811061490657fe5b9150600101614cbd565b506000614cf2828d8d81518110614bf357fe5b90506000614cff82613fa6565b90506000614d0d85836143bb565b90506000614d1b86836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003613878565b600080805b8751811015614d5c57614d5288828151811061490657fe5b9150600101614d3a565b506060865167ffffffffffffffff81118015614d7757600080fd5b50604051908082528060200260200182016040528015614da1578160200160208202803683370190505b5090506000805b8951811015614e3b576000614dc3858c8481518110614bf357fe5b9050614e058b8381518110614dd457fe5b6020026020010151614dff8c8581518110614deb57fe5b60200260200101518e86815181106142d357fe5b9061288f565b848381518110614e1157fe5b602002602001018181525050614e30614a278286858151811061405357fe5b925050600101614da8565b506060895167ffffffffffffffff81118015614e5657600080fd5b50604051908082528060200260200182016040528015614e80578160200160208202803683370190505b50905060005b8a51811015614f4157600083858381518110614e9e57fe5b60200260200101511115614efa576000614ec3614ab886670de0b6b3a76400006115ef565b90506000614ed7828e86815181106141fa57fe5b9050614ef1614af282670de0b6b3a76400008d9003612ff0565b92505050614f11565b8a8281518110614f0657fe5b602002602001015190505b614f21818d84815181106142d357fe5b838381518110614f2d57fe5b602090810291909101015250600101614e86565b506000614f4e8c8361272d565b90506000614f5c828a61288f565b9050670de0b6b3a7640000811115614fa757614f9a8a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c00008301612ff0565b965050505050505061484c565b6000965050505050505061484c565b6000614fe17ff4b7964d00000000000000000000000000000000000000000000000000000000611082565b821480610cc15750610cc1826152fb565b606060008280602001905181019061500a91906158b7565b909590945092505050565b60008180602001905181019061157c91906158fc565b6000808280602001905181019061500a9190615928565b606060008280602001905181019061500a91906159bb565b60008180602001905181019061157c91906159d9565b6060600061507e8484613878565b90506060855167ffffffffffffffff8111801561509a57600080fd5b506040519080825280602002602001820160405280156150c4578160200160208202803683370190505b50905060005b8651811015615102576150e383888381518110614a1157fe5b8282815181106150ef57fe5b60209081029190910101526001016150ca565b5095945050505050565b6000808280602001905181019061500a91906159f5565b600061157c61513584613cce85612a11565b6127c684612a03565b60008084518602905060008560008151811061515657fe5b60200260200101519050600086518760008151811061517157fe5b60200260200101510290506000600190505b87518110156151d7576151bc6151b66151af848b85815181106151a257fe5b6020026020010151611558565b8a51611558565b88613628565b91506151cd88828151811061274d57fe5b9250600101615183565b508685815181106151e457fe5b60200260200101518203915060006151fc8788611558565b9050600061522861521c61521484610b688988611558565b6103e8611558565b8a89815181106151a257fe5b9050600061524361523c6152148b89613628565b86906121b3565b905060008061525f61525586866121b3565b610b688d866121b3565b905060005b60ff8110156152df57819250615294615281866128018586611558565b610b688e613f1e88612801886002611558565b9150828211156152bd576001838303116152b8575097506115e79650505050505050565b6152d7565b6001828403116152d7575097506115e79650505050505050565b600101615264565b506152eb6101426128e0565b5050505050505050949350505050565b60006153267f2f1a0bc900000000000000000000000000000000000000000000000000000000611082565b82148061535a57506153577feb0f24d600000000000000000000000000000000000000000000000000000000611082565b82145b80610cc15750610cc182600061538f7f38e9922e00000000000000000000000000000000000000000000000000000000611082565b8214806153c357506153c07f50dd6ed900000000000000000000000000000000000000000000000000000000611082565b82145b80610cc157506000610cc1565bfe5b803561086a81615f59565b600082601f8301126153ed578081fd5b81356154006153fb82615f39565b615f12565b81815291506020808301908481018184028601820187101561542157600080fd5b60005b8481101561288457813584529282019290820190600101615424565b600082601f830112615450578081fd5b815161545e6153fb82615f39565b81815291506020808301908481018184028601820187101561547f57600080fd5b60005b8481101561288457815184529282019290820190600101615482565b600082601f8301126154ae578081fd5b813567ffffffffffffffff8111156154c4578182fd5b6154d76020601f19601f84011601615f12565b91508082528360208285010111156154ee57600080fd5b8060208401602084013760009082016020015292915050565b80516003811061086a57600080fd5b80516004811061086a57600080fd5b80356002811061086a57600080fd5b600060208284031215615545578081fd5b813561157c81615f59565b60008060408385031215615562578081fd5b823561556d81615f59565b9150602083013561557d81615f59565b809150509250929050565b60008060006060848603121561559c578081fd5b83356155a781615f59565b925060208401356155b781615f59565b929592945050506040919091013590565b600080600080600080600060e0888a0312156155e2578283fd5b87356155ed81615f59565b965060208801356155fd81615f59565b95506040880135945060608801359350608088013561561b81615f6e565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561564a578182fd5b823561565581615f59565b946020939093013593505050565b600080600060608486031215615677578081fd5b835167ffffffffffffffff8082111561568e578283fd5b818601915086601f8301126156a1578283fd5b81516156af6153fb82615f39565b80828252602080830192508086018b8283870289010111156156cf578788fd5b8796505b848710156156fa5780516156e681615f59565b8452600196909601959281019281016156d3565b508901519097509350505080821115615711578283fd5b5061571e86828701615440565b925050604084015190509250925092565b600060208284031215615740578081fd5b8151801515811461157c578182fd5b600080600080600080600060e0888a031215615769578081fd5b87359650602088013561577b81615f59565b9550604088013561578b81615f59565b9450606088013567ffffffffffffffff808211156157a7578283fd5b6157b38b838c016153dd565b955060808a0135945060a08a0135935060c08a01359150808211156157d6578283fd5b506157e38a828b0161549e565b91505092959891949750929550565b600060208284031215615803578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461157c578182fd5b600060208284031215615843578081fd5b815161157c81615f59565b60008060408385031215615860578182fd5b823561586b81615f59565b9150602083013567ffffffffffffffff811115615886578182fd5b6158928582860161549e565b9150509250929050565b6000602082840312156158ad578081fd5b61157c8383615507565b6000806000606084860312156158cb578081fd5b6158d58585615507565b9250602084015167ffffffffffffffff8111156158f0578182fd5b61571e86828701615440565b6000806040838503121561590e578182fd5b6159188484615507565b9150602083015190509250929050565b60008060006060848603121561593c578081fd5b6159468585615507565b925060208401519150604084015190509250925092565b60006020828403121561596e578081fd5b61157c8383615516565b6000806040838503121561598a578182fd5b6159948484615516565b9150602083015167ffffffffffffffff8111156159af578182fd5b61589285828601615440565b6000806000606084860312156159cf578081fd5b6158d58585615516565b600080604083850312156159eb578182fd5b6159188484615516565b600080600060608486031215615a09578081fd5b6159468585615516565b60008060008060808587031215615a28578182fd5b843567ffffffffffffffff80821115615a3f578384fd5b818701915061012080838a031215615a55578485fd5b615a5e81615f12565b9050615a6a8984615525565b8152615a7989602085016153d2565b6020820152615a8b89604085016153d2565b6040820152606083013560608201526080830135608082015260a083013560a0820152615abb8960c085016153d2565b60c0820152615acd8960e085016153d2565b60e08201526101008084013583811115615ae5578687fd5b615af18b82870161549e565b828401525050809650506020870135915080821115615b0e578384fd5b50615b1b878288016153dd565b949794965050505060408301359260600135919050565b600060208284031215615b43578081fd5b5035919050565b600060208284031215615b5b578081fd5b5051919050565b60008060408385031215615b74578182fd5b50508035926020909101359150565b60008060008060808587031215615b98578182fd5b8451935060208501519250604085015191506060850151615bb881615f59565b939692955090935050565b600060208284031215615bd4578081fd5b815161157c81615f6e565b60008060408385031215615bf1578182fd5b8251615bfc81615f6e565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615c3b57815187529582019590820190600101615c1f565b509495945050505050565b60008151808452815b81811015615c6b57602081850181015186830182015201615c4f565b81811115615c7c5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015615d5c5783516001600160a01b031683529284019291840191600101615d37565b50909695505050505050565b60006020825261157c6020830184615c0c565b600060408252615d8e6040830185615c0c565b82810360208401526117ed8185615c0c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526115e76040830184615c46565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261157c6020830184615c46565b6000838252604060208301526115e76040830184615c0c565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715615f3157600080fd5b604052919050565b600067ffffffffffffffff821115615f4f578081fd5b5060209081020190565b6001600160a01b0381168114610bdf57600080fd5b60ff81168114610bdf57600080fdfea2646970667358221220dcc30bf1aa1b16ae6ad0c83c0807514f1e6fdbe66d9e246a013ce46ba54d53bf64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x378 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70464016 GT PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xDDF4627B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6F3 JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x6FB JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6D0 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xAB7759F1 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x6A2 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x651 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x664 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x677 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x893D20E8 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x649 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0x876F303B EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x606 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5E3 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x70464016 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x571 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x584 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2AD JUMPI DUP1 PUSH4 0x54A844BA GT PUSH2 0x24B JUMPI DUP1 PUSH4 0x55C67628 GT PUSH2 0x225 JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x53F JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x547 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x54A844BA EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x50E JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x287 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4D8 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x4E0 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4A7 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x31A JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x2F4 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x477 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x429 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x356 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3F5 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1EC954A EQ PUSH2 0x37D JUMPI DUP1 PUSH4 0x4842D4C EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3AE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x390 PUSH2 0x38B CALLDATASIZE PUSH1 0x4 PUSH2 0x5A13 JUMP JUMPDEST PUSH2 0x70E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x390 PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5E99 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x870 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D6 PUSH2 0x908 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x92C JUMP JUMPDEST PUSH2 0x405 PUSH2 0x932 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DAB JUMP JUMPDEST PUSH2 0x41C PUSH2 0x95B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D68 JUMP JUMPDEST PUSH2 0x431 PUSH2 0x965 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D1B JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x5588 JUMP JUMPDEST PUSH2 0xA00 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xA74 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B62 JUMP JUMPDEST PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x47F PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5F04 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBBC JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x4A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B32 JUMP JUMPDEST PUSH2 0xBC6 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x4BD CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0xC06 JUMP JUMPDEST PUSH2 0x4CA PUSH2 0xC41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5EDB JUMP JUMPDEST PUSH2 0x3EB PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x584E JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH2 0x3EB PUSH2 0xC9C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x509 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xCAE JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x531 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0xD3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5EAC JUMP JUMPDEST PUSH2 0x390 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x54F PUSH2 0xDE0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EC5 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x56C CALLDATASIZE PUSH1 0x4 PUSH2 0x5B32 JUMP JUMPDEST PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x390 PUSH2 0x57F CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xEC1 JUMP JUMPDEST PUSH2 0x597 PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0xEDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5D7B JUMP JUMPDEST PUSH2 0x390 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x5CB PUSH2 0x5C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EE9 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x104C JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x5F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x57F2 JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x531 PUSH2 0x614 CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0x1102 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D07 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x114C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x644 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x118B JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x65F CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x11EC JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x672 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x122A JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0x1241 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x1265 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x6B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x55C8 JUMP JUMPDEST PUSH2 0x129B JUMP JUMPDEST PUSH2 0x597 PUSH2 0x6CB CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0x1326 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x6DE CALLDATASIZE PUSH1 0x4 PUSH2 0x5550 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x1486 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x148C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x709 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x14C2 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x73B PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x750 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x758 PUSH2 0x16B8 JUMP JUMPDEST PUSH2 0x76A DUP5 DUP5 PUSH2 0x765 PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0x16EC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x774 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x785 JUMPI INVALID JUMPDEST EQ PUSH2 0x79C JUMPI PUSH2 0x797 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x179D JUMP JUMPDEST PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x7A9 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x17F6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x1831 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x832 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 CALLER DUP5 DUP5 PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x878 PUSH2 0x18A0 JUMP JUMPDEST PUSH2 0x880 PUSH2 0x908 JUMP JUMPDEST ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH32 0x0 PUSH1 0x0 PUSH2 0x190D JUMP JUMPDEST PUSH2 0x8DB PUSH32 0x0 PUSH1 0x2 PUSH2 0x190D JUMP JUMPDEST PUSH2 0x906 PUSH32 0x0 PUSH1 0x3 PUSH2 0x190D JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x93F PUSH2 0x1AFD JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x94A PUSH2 0x1B1A JUMP JUMPDEST SWAP2 POP PUSH2 0x954 PUSH2 0x1B3E JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7BE PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x971 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x98C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9B6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9F9 JUMPI PUSH2 0x9CD DUP2 PUSH2 0x1B62 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9D9 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x9BC JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA0D DUP6 CALLER PUSH2 0x1449 JUMP JUMPDEST SWAP1 POP PUSH2 0xA31 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0xA29 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xA3C DUP6 DUP6 DUP6 PUSH2 0x1C8B JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0xA57 JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xA69 JUMPI PUSH2 0xA69 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7F DUP3 PUSH2 0x1D6B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA8C DUP3 PUSH2 0x1B62 JUMP JUMPDEST SWAP1 POP PUSH2 0xAA5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xABD SWAP1 PUSH2 0x1EF9 JUMP JUMPDEST SWAP1 POP PUSH2 0xACA DUP4 DUP4 DUP4 PUSH2 0x1F08 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xAD8 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xAE8 PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xAF9 PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB05 DUP3 TIMESTAMP PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0xB19 PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB24 PUSH2 0x2031 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xB35 DUP2 ISZERO PUSH2 0x13E PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP7 PUSH2 0x3E8 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0xB72 JUMPI PUSH2 0xB6D PUSH2 0xB5E PUSH3 0x15180 DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP5 DUP9 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x20A5 JUMP JUMPDEST PUSH2 0xB8C JUMP JUMPDEST PUSH2 0xB8C PUSH2 0xB82 PUSH3 0x15180 DUP5 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP7 DUP9 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH2 0xB9E PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xBAA DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x20D8 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0xBCE PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xBD6 PUSH2 0x2127 JUMP JUMPDEST PUSH2 0xBDF DUP2 PUSH2 0x213A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x866 SWAP2 DUP6 SWAP1 PUSH2 0xC3C SWAP1 DUP7 PUSH2 0x21B3 JUMP JUMPDEST PUSH2 0x1838 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xC56 DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x169B JUMP JUMPDEST SWAP3 POP PUSH2 0xC65 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x169B JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xC74 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x0 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0xC86 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xC8E PUSH2 0x2127 JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x2256 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xCA4 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x1 PUSH2 0x2364 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0xCBC DUP4 PUSH2 0x1D6B JUMP JUMPDEST PUSH2 0x23BB JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7BE SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xD53 DUP7 MLOAD PUSH2 0xD4E PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0x240E JUMP JUMPDEST PUSH2 0xD68 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x241B PUSH2 0x243D PUSH2 0x24A6 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD86 PUSH2 0x263D JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xD9E DUP6 DUP6 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 DUP3 EQ PUSH2 0xDC5 JUMPI PUSH2 0xDC0 DUP3 DUP10 PUSH2 0x272D JUMP JUMPDEST PUSH2 0xDC7 JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH2 0xDD3 DUP2 DUP5 PUSH2 0x288F JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xDED PUSH2 0x2031 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE05 PUSH2 0x1254 JUMP JUMPDEST ISZERO PUSH2 0xE12 JUMPI POP PUSH1 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH2 0xE5E JUMPI PUSH2 0xE1F PUSH2 0x908 JUMP JUMPDEST PUSH2 0xE49 JUMPI PUSH32 0x0 PUSH2 0xE57 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xE86 JUMPI POP PUSH1 0xB SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xEB6 JUMPI POP PUSH1 0xB SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xCC4 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1BB PUSH2 0x28E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xEEB PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH2 0xEF6 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xF03 DUP7 PUSH2 0x290A JUMP JUMPDEST ISZERO PUSH2 0xF2B JUMPI PUSH2 0xF10 PUSH2 0x2939 JUMP JUMPDEST PUSH2 0xF22 DUP10 PUSH2 0xF1C PUSH2 0x92C JUMP JUMPDEST DUP9 PUSH2 0x294C JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xF7D JUMP JUMPDEST PUSH2 0xF33 PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF3D PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0xF49 DUP11 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0xF6D DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xF59 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0xF63 JUMPI DUP14 PUSH2 0xF66 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x241B JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xF7B DUP4 DUP3 PUSH2 0x243D JUMP JUMPDEST POP JUMPDEST PUSH2 0xF87 DUP12 DUP3 PUSH2 0x29F9 JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xFA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 PUSH2 0xFFF DUP9 PUSH2 0x1D6B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x1020 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1029 DUP2 PUSH2 0x2A03 JUMP JUMPDEST SWAP5 POP PUSH2 0x1034 DUP2 PUSH2 0x2A11 JUMP JUMPDEST SWAP4 POP PUSH2 0x103F DUP2 PUSH2 0x2A1F JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1078 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x1 PUSH2 0x21C5 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10B7 SWAP3 SWAP2 SWAP1 PUSH2 0x5C91 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x10E1 PUSH2 0x263D JUMP JUMPDEST POP POP SWAP3 POP SWAP3 POP POP PUSH2 0x10FB DUP2 DUP4 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1113 DUP7 MLOAD PUSH2 0xD4E PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0xD68 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x2A41 PUSH2 0x2A52 PUSH2 0x24A6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x11F9 CALLER DUP6 PUSH2 0x1449 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x1213 JUMPI PUSH2 0x120E CALLER DUP6 PUSH1 0x0 PUSH2 0x1838 JUMP JUMPDEST PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x1220 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 CALLER DUP5 DUP5 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x124F DUP4 PUSH2 0x1D6B JUMP JUMPDEST PUSH2 0x2B35 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7BE SWAP1 PUSH1 0xFF PUSH2 0x2B5D JUMP JUMPDEST PUSH2 0x126D PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x0 PUSH2 0x2364 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x12CA DUP13 PUSH2 0x1170 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12E0 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DEB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1311 DUP9 DUP3 PUSH2 0x1308 DUP8 DUP8 DUP8 PUSH2 0x2B67 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2BA6 JUMP JUMPDEST PUSH2 0x131C DUP9 DUP9 DUP9 PUSH2 0x1838 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1335 PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH2 0x1340 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1352 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0x135C PUSH2 0x92C JUMP JUMPDEST PUSH2 0x1409 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1371 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x2BFD JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x138A PUSH2 0x1380 PUSH2 0x1831 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x139C PUSH1 0x0 PUSH2 0x1397 PUSH2 0x1831 JUMP JUMPDEST PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x13AF DUP12 PUSH2 0x13A8 PUSH2 0x1831 JUMP JUMPDEST DUP5 SUB PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x13B9 DUP2 DUP5 PUSH2 0x2A52 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13FC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x1413 DUP9 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x143B DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1427 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x1431 JUMPI DUP14 PUSH2 0x1434 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x2A41 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x13AF DUP12 DUP4 PUSH2 0x2CD6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1453 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1475 JUMPI POP PUSH1 0x0 NOT PUSH2 0x86A JUMP JUMPDEST PUSH2 0x147F DUP4 DUP4 PUSH2 0x2CE0 JUMP JUMPDEST SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH2 0x1494 PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x149F PUSH2 0x2031 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14AF DUP2 PUSH2 0x140 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xC98 DUP3 PUSH2 0x2D0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x2D46 JUMP JUMPDEST PUSH2 0x14CA PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14D5 DUP4 PUSH2 0x1D6B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x14E2 DUP3 PUSH2 0x1B62 JUMP JUMPDEST SWAP1 POP PUSH2 0x14FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1506 DUP3 DUP3 DUP6 PUSH2 0x1F08 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1540 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xC98 DUP2 PUSH2 0x2DE3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x157C DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x16AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x159B DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1594 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x16AA JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x15B6 JUMPI PUSH1 0x0 PUSH2 0x15B9 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15D4 DUP5 DUP5 DUP5 PUSH2 0x2E5C JUMP JUMPDEST POP DUP3 DUP3 SHL PUSH1 0x0 NOT PUSH1 0x1 DUP4 SHL ADD DUP4 SHL NOT DUP6 AND OR JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15FF DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x16AA JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1618 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x15E7 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1635 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x15C7 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x164B DUP4 PUSH2 0x2A03 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x166E PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x16AA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167F DUP5 DUP5 DUP5 PUSH2 0x2E5C JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1694 JUMPI DUP2 PUSH2 0x157C JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xC98 JUMPI PUSH2 0xC98 DUP2 PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x16C0 PUSH2 0x2EA2 JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2EAA JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x159B DUP2 DUP5 LT DUP1 ISZERO PUSH2 0x16FD JUMPI POP DUP2 DUP4 LT JUMPDEST PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1710 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x172B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1755 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9F9 JUMPI PUSH2 0x177E PUSH2 0x176F DUP3 PUSH2 0x23BB JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH2 0x2ED2 JUMP JUMPDEST SWAP1 PUSH2 0x2FF0 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x178A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x175B JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x17C7 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x17DD JUMPI PUSH2 0x17D8 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x301C JUMP JUMPDEST PUSH2 0x17EA JUMP JUMPDEST PUSH2 0x17EA DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3086 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1820 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x17DD JUMPI PUSH2 0x17D8 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x318A JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1893 SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x18A8 PUSH2 0x2127 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18B7 PUSH2 0x263D JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP4 POP PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x18D2 JUMPI PUSH2 0x18D2 DUP4 PUSH2 0x31E1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18DC PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP4 DUP3 EQ PUSH2 0x18F7 JUMPI PUSH2 0x18F2 DUP3 DUP8 PUSH2 0x272D JUMP JUMPDEST PUSH2 0x18F9 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH2 0x1905 DUP3 DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x1955 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A5 SWAP2 SWAP1 PUSH2 0x5B4A JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x19F3 JUMPI PUSH2 0x19B5 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x1A50 JUMPI PUSH2 0x1A05 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x1AB5 JUMPI PUSH2 0x1A62 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1AC0 PUSH2 0x1BB PUSH2 0x28E0 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x1AF0 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B07 PUSH2 0x1B3E JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x7BE JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1B90 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1BC0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1BF0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1C20 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1C50 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x135 PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x1CA2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1CB9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1CC4 DUP4 DUP4 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1CEA SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1D19 SWAP1 DUP3 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1893 SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DAF JUMPI POP PUSH1 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DF1 JUMPI POP PUSH1 0x1 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E33 JUMPI POP PUSH1 0x2 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E75 JUMPI POP PUSH1 0x3 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EB7 JUMPI POP PUSH1 0x4 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH1 0x5 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F7B SWAP2 SWAP1 PUSH2 0x5B4A JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1F98 DUP2 DUP4 DUP6 PUSH2 0x1605 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x1FDC SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x201A PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1082 JUMP JUMPDEST SWAP1 POP PUSH2 0xBDF PUSH2 0x2029 DUP3 CALLER PUSH2 0x322E JUMP JUMPDEST PUSH2 0x191 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2042 PUSH2 0x3317 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x2095 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x2079 JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x206F JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x2090 JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x208A JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x209D JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20B4 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x20C1 JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x20CD JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x20E4 DUP5 DUP5 DUP5 DUP5 PUSH2 0x3376 JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2119 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2132 PUSH2 0x1AFD JUMP JUMPDEST PUSH2 0x192 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x214F PUSH2 0x2145 PUSH2 0x33B5 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2164 PUSH2 0x215A PUSH2 0x33BE JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2175 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x21A8 SWAP1 DUP4 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x157C DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x16AA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x21E5 JUMPI PUSH2 0x21E0 PUSH2 0x21D6 PUSH2 0x1B1A JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x21FA JUMP JUMPDEST PUSH2 0x21FA PUSH2 0x21F0 PUSH2 0x1B3E JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x21A8 SWAP1 DUP4 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 PUSH2 0xBE2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x226C PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2299 SWAP3 SWAP2 SWAP1 PUSH2 0x5E64 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22E9 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x2336 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2373 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x15A0 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x23A6 SWAP1 DUP4 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xBDF JUMPI PUSH2 0xBDF PUSH2 0x33CA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23C5 PUSH2 0x104C JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x23DB JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x23FE JUMPI PUSH2 0x23F9 DUP2 PUSH2 0x2A03 JUMP JUMPDEST PUSH2 0x157C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xC98 DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x242C PUSH1 0x0 DUP9 DUP7 DUP7 PUSH2 0x349C JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP9 POP SWAP9 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x244C SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x2487 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2466 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x247A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x288F JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2493 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x244F JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x2595 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x24CA SWAP3 SWAP2 SWAP1 PUSH2 0x5CC1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2507 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x250C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x251B JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x2577 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x259D PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x25A7 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0x25B3 DUP8 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x25CB DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x25DD DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1F NOT DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x264F PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x2665 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2681 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x26D5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5663 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x26EA DUP2 PUSH2 0x26E5 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x26F3 DUP2 PUSH2 0x354A JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 PUSH2 0x2701 PUSH2 0xC41 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x0 PUSH2 0x2713 DUP9 DUP7 DUP5 PUSH2 0x3583 JUMP JUMPDEST SWAP5 POP SWAP1 POP PUSH2 0x2721 DUP8 DUP3 PUSH2 0x3610 JUMP JUMPDEST SWAP6 POP POP POP POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x276E JUMPI PUSH2 0x2764 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x274D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2736 JUMP JUMPDEST POP DUP2 PUSH2 0x277F JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2878 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x27D5 JUMPI PUSH2 0x27CB PUSH2 0x27A9 DUP4 DUP8 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x27B8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3628 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2794 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x282E PUSH2 0x280D PUSH2 0x2807 PUSH2 0x27EC DUP5 DUP11 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x2801 PUSH2 0x27F9 DUP9 DUP14 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x3628 JUMP JUMPDEST SWAP1 PUSH2 0x21B3 JUMP JUMPDEST DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 PUSH2 0x281D DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x2801 PUSH2 0x27F9 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1558 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2856 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2851 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x286F JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x286F JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x86A JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x2787 JUMP JUMPDEST POP PUSH2 0x2884 PUSH2 0x141 PUSH2 0x28E0 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x289E DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x28AB JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x28CE SWAP1 DUP6 DUP4 DUP2 PUSH2 0x28C5 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x16AA JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x28D7 JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0xBDF DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x3648 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xCC1 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x292F SWAP2 SWAP1 PUSH2 0x5BC3 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2944 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH2 0x295D DUP8 PUSH2 0x354A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x2970 DUP4 DUP6 DUP10 PUSH2 0x36C3 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2980 DUP3 PUSH1 0x0 PUSH2 0x36EF JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x299F SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x29DA DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29B9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x29CD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FF0 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29E6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x29A2 JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x37AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 DUP3 PUSH1 0x60 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH1 0x60 DUP1 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A2B DUP4 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP PUSH2 0x2A3A DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x169B JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x242C PUSH1 0x1 DUP9 DUP7 DUP7 PUSH2 0x349C JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2A61 SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x2A9C DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2A7B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A8F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3878 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AA8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2A64 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2AC5 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7BE SWAP2 SWAP1 PUSH2 0x5832 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BB1 DUP6 PUSH2 0x38C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x2BC7 PUSH2 0x2BC1 DUP8 DUP4 DUP8 PUSH2 0x38E2 JUMP JUMPDEST DUP4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2BD6 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x16AA JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C0C DUP5 PUSH2 0x3991 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C27 PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2C1F JUMPI INVALID JUMPDEST EQ PUSH1 0xCE PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2C32 DUP6 PUSH2 0x39A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C40 DUP2 MLOAD DUP8 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x2C4A DUP2 DUP8 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C54 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x60 PUSH2 0x2C62 DUP4 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2C70 DUP4 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 PUSH2 0x2C8D PUSH14 0x8000000000000000000000000000 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x2C99 DUP14 DUP3 PUSH2 0x2CD6 JUMP JUMPDEST DUP1 DUP7 PUSH2 0x2CA3 PUSH2 0x104C JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2CAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2CC3 DUP6 DUP5 PUSH2 0x31F2 JUMP JUMPDEST POP SWAP13 SWAP4 SWAP12 POP SWAP3 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x3A5F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D17 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x3376 JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x21A8 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2DB3 PUSH2 0x3AEC JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2DC8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5E1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2DF2 JUMPI PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E01 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x159B JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E29 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2E52 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x16AA JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2E12 JUMP JUMPDEST PUSH2 0x2E6B PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2E93 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x16FD JUMPI POP PUSH2 0x2E89 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1685 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x159B DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2127 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB4 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC98 JUMPI PUSH2 0x2ECA DUP2 PUSH2 0x3AF0 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2EB9 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2F00 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2F30 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x2F60 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x2F90 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x2FC0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x300A DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3028 DUP6 DUP4 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x3049 DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B44 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x305C DUP8 DUP8 DUP8 DUP8 PUSH2 0x3B50 JUMP JUMPDEST SWAP1 POP PUSH2 0x307B DUP2 DUP5 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x306E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B64 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A9 DUP2 PUSH2 0x3B70 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3097 JUMPI INVALID JUMPDEST EQ SWAP1 POP PUSH2 0x30A4 DUP7 DUP5 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x30C4 DUP8 PUSH1 0x60 ADD MLOAD DUP5 DUP4 PUSH2 0x30B8 JUMPI DUP7 PUSH2 0x30BA JUMP JUMPDEST DUP8 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST DUP8 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x30DD DUP11 PUSH2 0x3B8C JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x30F0 PUSH2 0x104C JUMP JUMPDEST DUP11 EQ PUSH2 0x3116 JUMPI PUSH2 0x3111 DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3109 DUP15 PUSH2 0x3BF5 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3C2A JUMP JUMPDEST PUSH2 0x3131 JUMP JUMPDEST PUSH2 0x3131 DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3129 DUP16 PUSH2 0x3BF5 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3C63 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3142 DUP5 DUP7 DUP6 DUP10 DUP6 PUSH2 0x3C87 JUMP JUMPDEST DUP7 PUSH2 0x315C JUMPI PUSH2 0x3157 DUP3 DUP11 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x306E JUMPI INVALID JUMPDEST PUSH2 0x3179 JUMP JUMPDEST PUSH2 0x3179 DUP3 DUP11 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x316C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3D07 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3199 DUP7 PUSH1 0x60 ADD MLOAD PUSH2 0x3D13 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x31A8 DUP6 DUP4 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x31BC DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x31CF DUP8 DUP8 DUP8 DUP8 PUSH2 0x3D34 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A9 DUP2 DUP5 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x316C JUMPI INVALID JUMPDEST PUSH2 0xBDF PUSH2 0x31EC PUSH2 0x1277 JUMP JUMPDEST DUP3 PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x31FF DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x320C DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1672 JUMP JUMPDEST OR PUSH1 0xC SSTORE PUSH2 0xC98 PUSH2 0x3D48 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3227 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x16AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x324D PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3268 JUMPI POP PUSH2 0x3268 DUP4 PUSH2 0x3D7E JUMP JUMPDEST ISZERO PUSH2 0x3290 JUMPI PUSH2 0x3275 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x3298 PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32C7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147F SWAP2 SWAP1 PUSH2 0x572F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3336 PUSH1 0x0 PUSH1 0x40 PUSH1 0x9 SLOAD PUSH2 0x169B SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP5 POP PUSH2 0x3348 SWAP1 PUSH1 0x40 DUP1 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP4 POP PUSH2 0x335B SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP3 POP PUSH2 0x336E SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x169B JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x3383 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x3390 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x339C DUP6 PUSH1 0x40 DUP1 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x33A9 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x33D4 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x33EA PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3406 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x341E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x345A SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5663 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x346A DUP2 PUSH2 0x26E5 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3475 DUP3 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3481 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x3490 DUP3 DUP5 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH2 0xACA DUP3 DUP3 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x34B0 DUP10 PUSH2 0x3B8C JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x53D0 DUP11 PUSH2 0x34C8 JUMPI PUSH2 0x3D89 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0x3E1E JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x34E4 DUP7 DUP7 DUP10 DUP8 DUP16 DUP16 DUP10 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x53D0 DUP14 PUSH2 0x34F8 JUMPI PUSH2 0x15EF PUSH2 0x34FC JUMP JUMPDEST PUSH2 0x21B3 JUMPDEST SWAP1 POP PUSH2 0x3509 DUP8 DUP4 DUP4 PUSH2 0x3E9C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3519 DUP10 DUP6 DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3528 DUP8 DUP10 DUP9 DUP13 DUP6 PUSH2 0x3C87 JUMP JUMPDEST DUP4 PUSH2 0x3534 DUP5 PUSH1 0x0 PUSH2 0x36EF JUMP JUMPDEST SWAP11 POP SWAP11 POP POP POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x3571 DUP4 PUSH2 0x355A PUSH2 0x104C JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3564 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0x357A DUP5 PUSH2 0x39BD JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3595 DUP9 DUP9 PUSH2 0x3F24 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x35AB JUMPI PUSH1 0x0 PUSH2 0x35AF JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x35C1 JUMPI PUSH1 0x0 PUSH2 0x35C5 JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35E0 PUSH2 0x35D6 PUSH1 0x0 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1778 DUP6 DUP8 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35FB PUSH2 0x35F1 PUSH1 0x2 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1778 DUP6 DUP9 PUSH2 0x288F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C PUSH2 0x361F DUP5 DUP5 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 DUP5 PUSH2 0x3FA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3637 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x3640 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x36D2 DUP5 PUSH2 0x3FCC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP8 DUP8 DUP5 PUSH2 0x3FE2 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x370C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3736 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x37A5 JUMPI PUSH2 0x374D PUSH2 0x104C JUMP JUMPDEST DUP2 EQ PUSH2 0x3784 JUMPI DUP4 PUSH2 0x375C PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x376B JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x376D JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3777 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3786 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3792 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x373C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x37C3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x37CF DUP3 PUSH1 0x0 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x37F5 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3828 PUSH2 0x3823 DUP3 PUSH2 0x381D PUSH2 0x92C JUMP JUMPDEST SWAP1 PUSH2 0x4091 JUMP JUMPDEST PUSH2 0x409F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x386C SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3887 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x3894 JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x38AE SWAP1 DUP6 DUP4 DUP2 PUSH2 0x28C5 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x38BA JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38D0 PUSH2 0x2D46 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10B7 SWAP3 SWAP2 SWAP1 PUSH2 0x5CD1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38F4 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x392D SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x5E7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x394F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3985 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC1 SWAP2 SWAP1 PUSH2 0x595D JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x5978 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x39DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3A05 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x37A5 JUMPI DUP4 PUSH2 0x3A1D PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x3A2C JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3A2E JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3A38 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3A4C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3A0B JUMP JUMPDEST PUSH2 0x3A6B PUSH1 0x0 DUP4 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH2 0x3A7A PUSH2 0x3823 DUP3 PUSH2 0x2801 PUSH2 0x92C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3A9D SWAP1 DUP3 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x386C SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH2 0x3AF8 PUSH2 0x104C JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x3B04 JUMPI PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xC98 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3B25 DUP4 PUSH2 0x2A1F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0xACA JUMPI PUSH2 0xACA DUP5 PUSH2 0x3B3E DUP7 PUSH2 0x1B62 JUMP JUMPDEST DUP5 PUSH2 0x1F08 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17ED PUSH1 0x0 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x40A4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x3B85 PUSH2 0x3B80 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x3FA6 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3B9E PUSH2 0xC41 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3BB3 DUP11 DUP7 DUP7 PUSH2 0x4116 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x3BC3 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 DUP3 EQ PUSH2 0x3BDE JUMPI PUSH2 0x3BD9 DUP3 DUP6 PUSH2 0x272D JUMP JUMPDEST PUSH2 0x3BE0 JUMP JUMPDEST DUP3 JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP1 SWAP10 POP SWAP3 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C0C PUSH2 0x3C02 PUSH2 0x104C JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x3C14 PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x166E JUMPI PUSH2 0x3C25 DUP3 PUSH1 0x1 PUSH2 0x15EF JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3C45 JUMPI PUSH2 0x3C40 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x416E JUMP JUMPDEST PUSH2 0x3C53 JUMP JUMPDEST PUSH2 0x3C53 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4245 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3C79 JUMPI PUSH2 0x3C40 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x42A6 JUMP JUMPDEST PUSH2 0x3C53 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x430C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C93 DUP7 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CA1 DUP4 DUP6 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CAF DUP7 DUP4 PUSH2 0x2FF0 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x3CFD JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x3CD9 PUSH2 0x3CD3 DUP4 PUSH2 0x3CCE DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1558 JUMP JUMPDEST DUP7 PUSH2 0x3628 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3CFA JUMPI PUSH1 0x0 PUSH2 0x3CED DUP8 DUP4 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP PUSH2 0x3CF8 DUP2 PUSH2 0x31E1 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x131C DUP9 DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x288F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D28 PUSH2 0x3D21 PUSH2 0xD2A JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH2 0x157C DUP4 DUP3 PUSH2 0x15EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17ED PUSH1 0x1 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x40A4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D52 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC98 JUMPI PUSH2 0x3D68 DUP2 PUSH2 0x43F7 JUMP JUMPDEST ISZERO PUSH2 0x3D76 JUMPI PUSH2 0x3D76 DUP2 PUSH2 0x4426 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3D57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x4454 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D98 DUP5 PUSH2 0x445F JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DA8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3DC6 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4475 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x3E13 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DD4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3DE5 JUMPI PUSH2 0x3DBC DUP8 DUP11 DUP7 PUSH2 0x44D4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DF3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E06 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x44F2 JUMP JUMPDEST PUSH2 0x3E11 PUSH2 0x150 PUSH2 0x28E0 JUMP JUMPDEST POP JUMPDEST SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3E2D DUP5 PUSH2 0x3991 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E3D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E51 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4593 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E5F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E70 JUMPI PUSH2 0x3DBC DUP8 DUP11 DUP7 PUSH2 0x45E2 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E7E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E91 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x4600 JUMP JUMPDEST PUSH2 0x3E11 PUSH2 0x136 PUSH2 0x28E0 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD PUSH2 0x3EAB SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3EEA DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3EC5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3ED9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3EF6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3EAE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x3F1E PUSH2 0x92C JUMP JUMPDEST SWAP1 PUSH2 0x15EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3F3D DUP5 PUSH2 0x3F38 DUP8 PUSH1 0x1 PUSH2 0x467A JUMP JUMPDEST PUSH2 0x272D JUMP JUMPDEST SWAP3 POP PUSH2 0x3F47 PUSH2 0x4783 JUMP JUMPDEST ISZERO PUSH2 0x3F60 JUMPI PUSH2 0x3F56 DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x3F9F JUMP JUMPDEST PUSH2 0x3F68 PUSH2 0x47A7 JUMP JUMPDEST ISZERO PUSH2 0x3F81 JUMPI DUP3 SWAP2 POP PUSH2 0x3F7A DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH2 0x3F9F JUMP JUMPDEST PUSH2 0x3F90 DUP5 PUSH2 0x3F38 DUP8 PUSH1 0x0 PUSH2 0x467A JUMP JUMPDEST SWAP2 POP PUSH2 0x3F9C DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x3FBE JUMPI PUSH1 0x0 PUSH2 0xCC1 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3FF0 DUP4 DUP6 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x400A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4034 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x4088 JUMPI PUSH2 0x4069 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FF0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4075 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x403A JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH1 0x1 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x40B1 DUP6 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40BE DUP6 PUSH2 0x3BF5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40CB DUP6 PUSH2 0x3BF5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40D7 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x40E6 DUP3 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP DUP11 ISZERO PUSH2 0x4108 JUMPI PUSH2 0x40FC DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x47CB JUMP JUMPDEST SWAP6 POP POP POP POP POP POP PUSH2 0x17ED JUMP JUMPDEST PUSH2 0x40FC DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x4856 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x4128 DUP9 PUSH2 0x354A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x413A DUP4 DUP11 DUP11 PUSH2 0x3583 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x414A DUP6 DUP5 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x415B JUMPI PUSH2 0x415B DUP2 PUSH2 0x31E1 JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x41B5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x41C5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x41E8 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x41E3 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x48E9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4210 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x421C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4233 DUP8 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4260 DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x425B PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4B79 JUMP JUMPDEST SWAP1 POP PUSH2 0x4272 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x427E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4295 DUP7 DUP12 PUSH2 0x15EF JUMP JUMPDEST SWAP2 SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x42C1 DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x42BC PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4C68 JUMP JUMPDEST SWAP1 POP PUSH2 0x42E9 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x42F5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4295 DUP7 DUP12 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4353 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4363 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4386 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x4381 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4D35 JUMP JUMPDEST SWAP1 POP PUSH2 0x4398 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x43A4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4233 DUP8 DUP4 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x43D5 DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST DUP1 PUSH2 0x43E4 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x0 NOT DUP3 ADD PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2B5D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x443E DUP2 PUSH2 0x163D JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x4FB6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC1 SWAP2 SWAP1 PUSH2 0x589C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x4485 DUP6 PUSH2 0x4FF2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4495 DUP3 MLOAD DUP9 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x44A2 DUP3 PUSH2 0x26E5 DUP9 PUSH2 0x39BD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44B4 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x41E3 PUSH2 0xD2A JUMP JUMPDEST SWAP1 POP PUSH2 0x44C4 DUP3 DUP3 GT ISZERO PUSH1 0xCF PUSH2 0x16AA JUMP JUMPDEST SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x44E3 DUP5 PUSH2 0x5015 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP7 DUP9 DUP5 PUSH2 0x3FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x4502 DUP6 PUSH2 0x502B JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4514 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x452E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4558 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x456C DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x425B PUSH2 0xD2A JUMP JUMPDEST DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4578 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP2 SWAP10 SWAP2 SWAP9 POP SWAP1 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x45A3 DUP6 PUSH2 0x5042 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x45B3 DUP8 MLOAD DUP4 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x45C0 DUP3 PUSH2 0x26E5 DUP9 PUSH2 0x39BD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D2 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x4381 PUSH2 0xD2A JUMP JUMPDEST SWAP1 POP PUSH2 0x44C4 DUP3 DUP3 LT ISZERO PUSH1 0xD0 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x45F1 DUP5 PUSH2 0x505A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP7 DUP4 DUP10 PUSH2 0x5070 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x4610 DUP6 PUSH2 0x510C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4622 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x463C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4666 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x456C DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x42BC PUSH2 0xD2A JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x46C1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x477A JUMPI PUSH1 0x0 PUSH2 0x46D9 PUSH2 0x104C JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x46E6 JUMPI DUP2 PUSH2 0x46EB JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x46F6 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP1 PUSH2 0x470D JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x470D JUMPI POP PUSH2 0x470D DUP2 PUSH2 0x43F7 JUMP JUMPDEST PUSH2 0x472A JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x471D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x475A JUMP JUMPDEST PUSH2 0x475A DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4739 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x5123 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4766 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x46C7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47DD DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x47E9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4803 DUP9 DUP9 DUP6 DUP9 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x4812 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x4827 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4848 PUSH1 0x1 PUSH2 0x3F1E DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP2 POP POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4868 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4874 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x488E DUP9 DUP9 DUP6 DUP10 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x489D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x48B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4848 PUSH1 0x1 PUSH2 0x2801 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x48D2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4927 JUMPI PUSH2 0x491D DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x48EE JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4942 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x496C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4A39 JUMPI PUSH1 0x0 PUSH2 0x49A4 DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x498E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3878 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x49E6 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x49B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x49E0 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x49CC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x3878 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x49F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4A2E PUSH2 0x4A27 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4A11 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x43BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4973 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4A54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4A7E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4B49 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4A9B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x4B02 JUMPI PUSH1 0x0 PUSH2 0x4AC4 PUSH2 0x4AB8 DUP7 PUSH2 0x3FA6 JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4AD8 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4AF9 PUSH2 0x4AF2 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3878 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4B19 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B0E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4B29 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4B35 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4A84 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4B56 DUP13 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B64 DUP3 DUP11 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH2 0x3179 PUSH2 0x4B72 DUP3 PUSH2 0x3FA6 JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x43BB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4B94 DUP5 PUSH2 0x4B8E DUP8 PUSH2 0x49E0 DUP2 DUP12 PUSH2 0x15EF JUMP JUMPDEST SWAP1 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4BA4 DUP11 DUP11 DUP5 DUP12 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4BB8 DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4BE0 JUMPI PUSH2 0x4BD6 DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4BBE JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4C09 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x288F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C16 DUP3 PUSH2 0x3FA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C24 DUP6 DUP4 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C32 DUP7 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x4C53 PUSH2 0x4C4C DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x2FF0 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4C7D DUP5 PUSH2 0x4B8E DUP8 PUSH2 0x49E0 DUP2 DUP12 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C8D DUP11 DUP11 DUP5 DUP12 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4CB7 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x4CA0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4CDF JUMPI PUSH2 0x4CD5 DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4CBD JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4CF2 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4CFF DUP3 PUSH2 0x3FA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D0D DUP6 DUP4 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D1B DUP7 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x4C53 PUSH2 0x4C4C DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4D5C JUMPI PUSH2 0x4D52 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4D3A JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4D77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4DA1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4E3B JUMPI PUSH1 0x0 PUSH2 0x4DC3 DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4E05 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4DD4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4DFF DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4DEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x288F JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4E11 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4E30 PUSH2 0x4A27 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4DA8 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4E56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4E80 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4F41 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4E9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x4EFA JUMPI PUSH1 0x0 PUSH2 0x4EC3 PUSH2 0x4AB8 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4ED7 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4EF1 PUSH2 0x4AF2 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x2FF0 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4F11 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4F06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4F21 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4F2D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4E86 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4F4E DUP13 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F5C DUP3 DUP11 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x4FA7 JUMPI PUSH2 0x4F9A DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x2FF0 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x484C JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x484C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4FE1 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xCC1 JUMPI POP PUSH2 0xCC1 DUP3 PUSH2 0x52FB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x58B7 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x58FC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x5928 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x59BB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x59D9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x507E DUP5 DUP5 PUSH2 0x3878 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x509A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x50C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x5102 JUMPI PUSH2 0x50E3 DUP4 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A11 JUMPI INVALID JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x50EF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x50CA JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x59F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C PUSH2 0x5135 DUP5 PUSH2 0x3CCE DUP6 PUSH2 0x2A11 JUMP JUMPDEST PUSH2 0x27C6 DUP5 PUSH2 0x2A03 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5156 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5171 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x51D7 JUMPI PUSH2 0x51BC PUSH2 0x51B6 PUSH2 0x51AF DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x51A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1558 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1558 JUMP JUMPDEST DUP9 PUSH2 0x3628 JUMP JUMPDEST SWAP2 POP PUSH2 0x51CD DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x274D JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x5183 JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x51E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0x51FC DUP8 DUP9 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5228 PUSH2 0x521C PUSH2 0x5214 DUP5 PUSH2 0xB68 DUP10 DUP9 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1558 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x51A2 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5243 PUSH2 0x523C PUSH2 0x5214 DUP12 DUP10 PUSH2 0x3628 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x525F PUSH2 0x5255 DUP7 DUP7 PUSH2 0x21B3 JUMP JUMPDEST PUSH2 0xB68 DUP14 DUP7 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x52DF JUMPI DUP2 SWAP3 POP PUSH2 0x5294 PUSH2 0x5281 DUP7 PUSH2 0x2801 DUP6 DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP15 PUSH2 0x3F1E DUP9 PUSH2 0x2801 DUP9 PUSH1 0x2 PUSH2 0x1558 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x52BD JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x52B8 JUMPI POP SWAP8 POP PUSH2 0x15E7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x52D7 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x52D7 JUMPI POP SWAP8 POP PUSH2 0x15E7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5264 JUMP JUMPDEST POP PUSH2 0x52EB PUSH2 0x142 PUSH2 0x28E0 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5326 PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x535A JUMPI POP PUSH2 0x5357 PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xCC1 JUMPI POP PUSH2 0xCC1 DUP3 PUSH1 0x0 PUSH2 0x538F PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x53C3 JUMPI POP PUSH2 0x53C0 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xCC1 JUMPI POP PUSH1 0x0 PUSH2 0xCC1 JUMP JUMPDEST INVALID JUMPDEST DUP1 CALLDATALOAD PUSH2 0x86A DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x53ED JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5400 PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST PUSH2 0x5F12 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x5421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2884 JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5424 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5450 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x545E PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x547F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2884 JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5482 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x54AE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x54C4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x54D7 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5F12 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x54EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x4 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x2 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5545 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x157C DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5562 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x556D DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x557D DUP2 PUSH2 0x5F59 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x559C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x55A7 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x55B7 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x55E2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x55ED DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x55FD DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x561B DUP2 PUSH2 0x5F6E JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x564A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5655 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5677 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x568E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56A1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x56AF PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP7 ADD DUP12 DUP3 DUP4 DUP8 MUL DUP10 ADD ADD GT ISZERO PUSH2 0x56CF JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x56FA JUMPI DUP1 MLOAD PUSH2 0x56E6 DUP2 PUSH2 0x5F59 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP3 DUP2 ADD SWAP3 DUP2 ADD PUSH2 0x56D3 JUMP JUMPDEST POP DUP10 ADD MLOAD SWAP1 SWAP8 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5711 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x571E DUP7 DUP3 DUP8 ADD PUSH2 0x5440 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5740 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x157C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5769 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x577B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x578B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x57A7 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x57B3 DUP12 DUP4 DUP13 ADD PUSH2 0x53DD JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x57D6 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x57E3 DUP11 DUP3 DUP12 ADD PUSH2 0x549E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5803 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x157C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5843 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x157C DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5860 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x586B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5886 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5892 DUP6 DUP3 DUP7 ADD PUSH2 0x549E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58AD JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x157C DUP4 DUP4 PUSH2 0x5507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58CB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x58D5 DUP6 DUP6 PUSH2 0x5507 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58F0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x571E DUP7 DUP3 DUP8 ADD PUSH2 0x5440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x590E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5918 DUP5 DUP5 PUSH2 0x5507 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x593C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5946 DUP6 DUP6 PUSH2 0x5507 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x596E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x157C DUP4 DUP4 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x598A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5994 DUP5 DUP5 PUSH2 0x5516 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x59AF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5892 DUP6 DUP3 DUP7 ADD PUSH2 0x5440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59CF JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x58D5 DUP6 DUP6 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59EB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5918 DUP5 DUP5 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A09 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5946 DUP6 DUP6 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A28 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5A3F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP PUSH2 0x120 DUP1 DUP4 DUP11 SUB SLT ISZERO PUSH2 0x5A55 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5A5E DUP2 PUSH2 0x5F12 JUMP JUMPDEST SWAP1 POP PUSH2 0x5A6A DUP10 DUP5 PUSH2 0x5525 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5A79 DUP10 PUSH1 0x20 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5A8B DUP10 PUSH1 0x40 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5ABB DUP10 PUSH1 0xC0 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5ACD DUP10 PUSH1 0xE0 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x5AE5 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x5AF1 DUP12 DUP3 DUP8 ADD PUSH2 0x549E JUMP JUMPDEST DUP3 DUP5 ADD MSTORE POP POP DUP1 SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5B0E JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x5B1B DUP8 DUP3 DUP9 ADD PUSH2 0x53DD JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B43 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B5B JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B74 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5B98 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x5BB8 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BD4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x157C DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BF1 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5BFC DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C3B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5C1F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5C6B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x5C4F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5C7C JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D5C JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5D37 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x157C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x5D8E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5C0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x17ED DUP2 DUP6 PUSH2 0x5C0C JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x15E7 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C46 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x157C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C46 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x15E7 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C0C JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F4F JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDC 0xC3 SIGNEXTEND CALL 0xAA SHL AND 0xAE PUSH11 0xD0C83C0807514F1E6FDBE6 PUSH14 0x9E246A013CE46BA54D53BF64736F PUSH13 0x63430007010033000000000000 ", + "sourceMap": "2683:47726:55:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1274:631:27;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6305:97:55;;;:::i;2254:81:51:-;;;:::i;:::-;;;;;;;:::i;4857:164::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5813:394:34:-;;;:::i;:::-;;6721:117;;;:::i;3500:106:51:-;;;:::i;3274:363:45:-;;;:::i;:::-;;;;;;;;;:::i;29081:120:28:-;;;:::i;:::-;;;;;;;:::i;14709:346:59:-;;;:::i;:::-;;;;;;;:::i;2575:655:26:-;;;;;;:::i;:::-;;:::i;6715:383:58:-;;;;;;:::i;:::-;;:::i;5907:1301:61:-;;;;;;:::i;:::-;;:::i;3156:81:51:-;;;:::i;:::-;;;;;;;:::i;2243:113:52:-;;;:::i;8723:165:28:-;;;;;;:::i;:::-;;:::i;7114:91::-;;;:::i;6269:211:51:-;;;;;;:::i;:::-;;:::i;16974:534:57:-;;;:::i;:::-;;;;;;;;:::i;12270:75:28:-;;;:::i;11034:231::-;;;;;;:::i;:::-;;:::i;3432:100:30:-;;;:::i;4246:128:58:-;;;;;;:::i;:::-;;:::i;5741:98:55:-;;;:::i;7926:185:28:-;;;:::i;20592:913::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42671:1933:55:-;;;:::i;3034:299:61:-;;;:::i;:::-;;;;;;;;;:::i;5051:560:34:-;;;;;;:::i;:::-;;:::i;4022:117:51:-;;;;;;:::i;:::-;;:::i;16016:2311:28:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2006:113:52:-;;;;;;:::i;:::-;;:::i;5256:599:58:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;10262:86:59:-;;;:::i;11817:72:28:-;;;:::i;2607:430:38:-;;;;;;:::i;:::-;;:::i;45398:211:55:-;;;:::i;19019:911:28:-;;;;;;:::i;:::-;;:::i;1751:80:29:-;;;:::i;:::-;;;;;;;:::i;1797:79:26:-;;;:::i;1303:121:41:-;;;;;;:::i;:::-;;:::i;2448:85:51:-;;;:::i;3356:429:26:-;;;;;;:::i;:::-;;:::i;4342:170:51:-;;;;;;:::i;:::-;;:::i;1837:101:29:-;;;:::i;16438:167:59:-;;;;;;:::i;:::-;;:::i;9746:133:28:-;;;:::i;3780:102:30:-;;;:::i;8305:127:28:-;;;:::i;1437:508:52:-;;;;;;:::i;:::-;;:::i;13533:2321:28:-;;;;;;:::i;:::-;;:::i;2178:254:26:-;;;;;;:::i;:::-;;:::i;2859:80:34:-;;;:::i;7319:259:61:-;;;:::i;1184:113:41:-;;;:::i;6142:414:58:-;;;;;;:::i;:::-;;:::i;1274:631:27:-;1479:7;1450:11;:18;;;13172:68:28;13203:10;:8;:10::i;:::-;-1:-1:-1;;;;;13181:33:28;:10;:33;6194:3:10;13172:8:28;:68::i;:::-;13250:55;13269:11;:9;:11::i;:::-;13259:6;:21;12526:3:10;13250:8:28;:55::i;:::-;1498:21:27::1;:19;:21::i;:::-;1530:54;1547:7;1556:8;1566:17;:15;:17::i;:::-;1530:16;:54::i;:::-;1594:31;1628:17;:15;:17::i;:::-;1594:51:::0;-1:-1:-1;1695:24:27::1;1675:16:::0;;:44:::1;::::0;::::1;;;;;;;:223;;1827:71;1841:11;1854:8;1864:7;1873:8;1883:14;1827:13;:71::i;:::-;1675:223;;;1738:70;1751:11;1764:8;1774:7;1783:8;1793:14;1738:12;:70::i;:::-;1656:242:::0;1274:631;-1:-1:-1;;;;;;;1274:631:27:o;6305:97:55:-;6353:7;6379:16;:14;:16::i;:::-;6372:23;;6305:97;:::o;2254:81:51:-;2323:5;2316:12;;;;;;;;;;;;;-1:-1:-1;;2316:12:51;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;;:::o;5813:394:34:-;5876:31;:29;:31::i;:::-;5922:30;:28;:30::i;:::-;5918:128;;;5968:67;5992:20;4359:1:17;5968:23:34;:67::i;:::-;6056:68;6080:20;4446:1:17;6056:23:34;:68::i;:::-;6134:66;6158:20;4485:1:17;6134:23:34;:66::i;:::-;5813:394::o;6721:117::-;6805:26;6721:117;:::o;3500:106:51:-;3587:12;;3500:106;:::o;3274:363:45:-;3377:11;3402:26;3442:27;3504:14;:12;:14::i;:::-;3503:15;3494:24;;3549;:22;:24::i;:::-;3528:45;;3605:25;:23;:25::i;:::-;3583:47;;3274:363;;;:::o;29081:120:28:-;29142:16;29177:17;:15;:17::i;14709:346:59:-;14760:22;14794:19;14816:17;:15;:17::i;:::-;14794:39;;14843:32;14898:11;14878:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14878:32:59;;14843:67;;14926:9;14921:101;14945:11;14941:1;:15;14921:101;;;14992:19;15009:1;14992:16;:19::i;:::-;14977:9;14987:1;14977:12;;;;;;;;-1:-1:-1;;;;;14977:34:59;;;;:12;;;;;;;;;;;:34;-1:-1:-1;14958:3:59;14921:101;;;-1:-1:-1;15039:9:59;-1:-1:-1;;14709:346:59;:::o;2575:655:26:-;2703:4;2719:24;2746:29;2756:6;2764:10;2746:9;:29::i;:::-;2719:56;-1:-1:-1;2785:101:26;-1:-1:-1;;;;;2794:20:26;;:10;:20;;:50;;;2838:6;2818:16;:26;;2794:50;10712:3:10;2785:8:26;:101::i;:::-;2897:36;2907:6;2915:9;2926:6;2897:9;:36::i;:::-;-1:-1:-1;;;;;2948:20:26;;:10;:20;;;;:55;;-1:-1:-1;;;2972:31:26;;;2948:55;2944:258;;;3136:55;3145:6;3153:10;3184:6;3165:16;:25;3136:8;:55::i;:::-;-1:-1:-1;3219:4:26;;2575:655;-1:-1:-1;;;;2575:655:26:o;6715:383:58:-;6778:13;6794:21;6809:5;6794:14;:21::i;:::-;6778:37;;6826:22;6851:23;6868:5;6851:16;:23::i;:::-;6826:48;-1:-1:-1;6884:83:58;-1:-1:-1;;;;;6893:31:58;;;;9022:3:10;6884:8:58;:83::i;:::-;6977:16;6996:23;;;:16;:23;;;;;;:37;;:35;:37::i;:::-;6977:56;;7043:48;7065:5;7072:8;7082;7043:21;:48::i;:::-;6715:383;;;;:::o;5907:1301:61:-;2276:21:38;:19;:21::i;:::-;6020:60:61::1;1275:1:60;6029:11:61;:34;;6565:3:10;6020:8:61;:60::i;:::-;6090;1319:4:60;6099:11:61;:34;;6610:3:10;6090:8:61;:60::i;:::-;6161:16;6180:34;6189:7;6198:15;6180:8;:34::i;:::-;6161:53;;6224:69;1823:6;6233:8;:28;;7518:3:10;6224:8:61;:69::i;:::-;6305:20;6327:15:::0;6346:28:::1;:26;:28::i;:::-;6304:70;;;;6384:48;6394:10;6393:11;7574:3:10;6384:8:61;:48::i;:::-;6443:16;6462:48;6471:11;1372:3:60;6462:8:61;:48::i;:::-;6443:67;;6817:17;6848:12;6837:8;:23;:197;;6962:72;6973:30;6982:6;6990:12;6973:8;:30::i;:::-;7005:28;7014:8;7024;7005;:28::i;:::-;6962:10;:72::i;:::-;6837:197;;;6875:72;6886:26;6895:6;6903:8;6886;:26::i;:::-;6914:32;6923:12;6937:8;6914;:32::i;6875:72::-;6817:217;;7044:75;1889:1;7053:9;:39;;7629:3:10;7044:8:61;:75::i;:::-;7130:71;7152:12;7166:8;7176:15;7193:7;7130:21;:71::i;:::-;2307:1:38;;;;;5907:1301:61::0;;:::o;3156:81:51:-;3221:9;;;;3156:81;:::o;2243:113:52:-;2303:7;2329:20;:18;:20::i;8723:165:28:-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;8841:40:28::2;8863:17;8841:21;:40::i;:::-;8723:165:::0;:::o;7114:91::-;7191:7;7114:91;:::o;6269:211:51:-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6403:32:51;;;;;;;;;;6357:4;;6373:79;;6403:32;;:48;;6440:10;6403:36;:48::i;:::-;6373:8;:79::i;16974:534:57:-;17152:17;;17050:33;;;;17208:126;17152:17;2613:3;2838:2;17208:18;:126::i;:::-;17180:154;-1:-1:-1;17373:128:57;:7;2543:1;2613:3;17373:18;:128::i;:::-;17345:156;;16974:534;;;:::o;12270:75:28:-;2276:21:38;:19;:21::i;:::-;12321:17:28::1;12332:5;12321:10;:17::i;11034:231::-:0;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;11213:45:28::2;11240:5;11247:10;11213:26;:45::i;:::-;11034:231:::0;;:::o;3432:100:30:-;2276:21:38;:19;:21::i;:::-;3503:22:30::1;3520:4;3503:16;:22::i;4246:128:58:-:0;4305:7;4331:36;4345:21;4360:5;4345:14;:21::i;:::-;4331:13;:36::i;:::-;4324:43;;4246:128;;;;:::o;5741:98:55:-;5824:8;5817:15;;;;;;;;;;;;;-1:-1:-1;;5817:15:55;;;;;;;;;;;;;;;;;;;;;;;;;;5792:13;;5817:15;;5824:8;;5817:15;;;5824:8;5817:15;;;;;;;;;;;;;;;;;;;;;;;;7926:185:28;8022:9;;7996:7;;8022:82;;4326:3;4561:2;8022:20;:82::i;20592:913::-;20861:13;20876:27;20915:71;20951:8;:15;20968:17;:15;:17::i;:::-;20915:35;:71::i;:::-;20997:255;21023:6;21043;21063:9;21086:8;21108:15;21137:25;21176:8;21198:11;21223:19;20997:12;:255::i;:::-;20592:913;;;;;;;;;;:::o;42671:1933:55:-;42730:7;43035:25;43074:21;43109:25;43148:23;43185:43;43241:23;:21;:23::i;:::-;43021:243;;-1:-1:-1;43021:243:55;;-1:-1:-1;43021:243:55;-1:-1:-1;43021:243:55;-1:-1:-1;43021:243:55;-1:-1:-1;43438:25:55;43466:36;43021:243;;43466:17;:36::i;:::-;43438:64;;43681:18;43705:28;:26;:28::i;:::-;43680:53;;;44249:24;44291:15;44277:10;:29;44276:148;;44372:52;44403:10;44415:8;44372:30;:52::i;:::-;44276:148;;;44322:35;44276:148;44249:175;-1:-1:-1;44554:43:55;44249:175;44579:17;44554:24;:43::i;:::-;44547:50;;;;;;;;;;42671:1933;:::o;3034:299:61:-;3131:13;3158:15;3187:17;3251:28;:26;:28::i;:::-;3229:50;;;;-1:-1:-1;1372:3:60;;-1:-1:-1;3034:299:61;-1:-1:-1;3034:299:61:o;5051:560:34:-;5128:7;5151:16;:14;:16::i;:::-;5147:55;;;-1:-1:-1;5190:1:34;5183:8;;5147:55;5216:31;5212:393;;5270:30;:28;:30::i;:::-;:81;;5320:31;5270:81;;;5303:6;:14;;;5270:81;5263:88;;;;5212:393;4446:1:17;5372:7:34;:32;5368:237;;;-1:-1:-1;5427:6:34;:15;;;;;;5420:22;;5368:237;4485:1:17;5463:7:34;:30;5459:146;;;-1:-1:-1;5516:6:34;:13;;;;;;5509:20;;5459:146;5560:34;12459:3:10;5560:7:34;:34::i;4022:117:51:-;-1:-1:-1;;;;;4114:18:51;4088:7;4114:18;;;;;;;;;;;;4022:117::o;16016:2311:28:-;16304:16;16322;16287:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;16350:27:::1;16387:19;16841:33;:8;:31;:33::i;:::-;16837:1175;;;16956:23;:21;:23::i;:::-;17180:54;17200:8;17210:13;:11;:13::i;:::-;17225:8;17180:19;:54::i;:::-;17152:82:::0;-1:-1:-1;17152:82:28;-1:-1:-1;16837:1175:28::1;;;17346:21;:19;:21::i;:::-;17382:31;17416:17;:15;:17::i;:::-;17382:51;;17447:39;17461:8;17471:14;17447:13;:39::i;:::-;17529:336;17558:6;17582;17606:9;17633:8;17659:15;17692:16;:14;:16::i;:::-;:48;;17715:25;17692:48;;;17711:1;17692:48;17811:14;17843:8;17529:11;:336::i;:::-;17501:364:::0;-1:-1:-1;17501:364:28;-1:-1:-1;17954:47:28::1;17501:364:::0;17986:14;17954:19:::1;:47::i;:::-;16837:1175;;18117:36;18133:6;18141:11;18117:15;:36::i;:::-;18277:10;18303:8;:15;18289:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;18289:30:28::1;;18269:51;;;;;;13315:1;16016:2311:::0;;;;;;;;;;;:::o;2006:113:52:-;2067:7;2093:19;2106:5;2093:12;:19::i;5256:599:58:-;5357:12;5383:15;5412:16;5442:15;5482:13;5498:16;:39;5515:21;5530:5;5515:14;:21::i;:::-;5498:39;;;;;;;;;;;-1:-1:-1;5498:39:58;;;-1:-1:-1;5646:71:58;5655:19;;;9022:3:10;5646:8:58;:71::i;:::-;5735:22;:5;:20;:22::i;:::-;5728:29;;5777:18;:5;:16;:18::i;:::-;5767:28;;5827:21;:5;:19;:21::i;:::-;5256:599;;;;-1:-1:-1;5805:43:58;;5256:599;-1:-1:-1;;;5256:599:58:o;10262:86:59:-;10332:9;10262:86;:::o;11817:72:28:-;2276:21:38;:19;:21::i;:::-;11866:16:28::1;11877:4;11866:10;:16::i;2607:430:38:-:0;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;45398:211:55:-;45448:7;45470:21;45493:25;45526:23;:21;:23::i;:::-;45467:82;;;;;;;45566:36;45584:17;45566:13;:17;;:36;;;;:::i;:::-;45559:43;;;;45398:211;:::o;19019:911:28:-;19288:14;19304:26;19342:71;19378:8;:15;19395:17;:15;:17::i;19342:71::-;19424:253;19450:6;19470;19490:9;19513:8;19535:15;19564:25;19603:8;19625:11;19650:17;19424:12;:253::i;1751:80:29:-;1818:6;1751:80;:::o;1797:79:26:-;1863:6;1797:79;:::o;1303:121:41:-;-1:-1:-1;;;;;1398:19:41;1372:7;1398:19;;;:10;:19;;;;;;;1303:121::o;2448:85:51:-;2519:7;2512:14;;;;;;;;;;;;;-1:-1:-1;;2512:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;3356:429:26;3441:4;3457:24;3484:30;3494:10;3506:7;3484:9;:30::i;:::-;3457:57;;3539:16;3529:6;:26;3525:232;;3571:32;3580:10;3592:7;3601:1;3571:8;:32::i;:::-;3525:232;;;3690:56;3699:10;3711:7;3739:6;3720:16;:25;3690:8;:56::i;:::-;-1:-1:-1;3774:4:26;;3356:429;-1:-1:-1;;;3356:429:26:o;4342:170:51:-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;1837:101:29:-;1885:11;1915:16;:14;:16::i;16438:167:59:-;16518:4;16541:57;16576:21;16591:5;16576:14;:21::i;:::-;16541:34;:57::i;9746:133:28:-;9825:9;;9802:4;;9825:47;;4388:3;9825:20;:47::i;3780:102:30:-;2276:21:38;:19;:21::i;:::-;3852:23:30::1;3869:5;3852:16;:23::i;8305:127:28:-:0;8403:22;8305:127;:::o;1437:508:52:-;1645:18;921:109;1718:5;1725:7;1734:5;1741:19;1754:5;1741:12;:19::i;:::-;1762:8;1689:82;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1666:115;;;;;;1645:136;;1792:104;1814:5;1821:10;1833:26;1851:1;1854;1857;1833:17;:26::i;:::-;1861:8;12759:3:10;1792:21:52;:104::i;:::-;1907:31;1916:5;1923:7;1932:5;1907:8;:31::i;:::-;1437:508;;;;;;;;:::o;13533:2321:28:-;13821:16;13839;13804:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;13867:21:::1;:19;:21::i;:::-;13899:31;13933:17;:15;:17::i;:::-;13899:51;;13965:13;:11;:13::i;:::-;13961:1887;;14000:20;14022:26;14052:164;14087:6;14111;14135:9;14162:14;14194:8;14052:17;:164::i;:::-;13999:217;;;;14515:62;14540:16;:14;:16::i;:::-;14524:12;:32;;6140:3:10;14515:8:28;:62::i;:::-;14591:45;14615:1;14619:16;:14;:16::i;:::-;14591:15;:45::i;:::-;14650:59;14666:9;14692:16;:14;:16::i;:::-;14677:12;:31;14650:15;:59::i;:::-;14796:44;14814:9;14825:14;14796:17;:44::i;:::-;14863:9;14888:8;:15;14874:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;14874:30:28::1;;14855:50;;;;;;;;;13961:1887;14936:39;14950:8;14960:14;14936:13;:39::i;:::-;14990:20;15012:26;15042:336;15071:6;15095;15119:9;15146:8;15172:15;15205:16;:14;:16::i;:::-;:48;;15228:25;15205:48;;;15224:1;15205:48;15324:14;15356:8;15042:11;:336::i;:::-;14989:389;;;;15492:40;15508:9;15519:12;15492:15;:40::i;2178:254:26:-:0;2259:7;2301:10;:8;:10::i;:::-;-1:-1:-1;;;;;2282:30:26;;;;;;2278:148;;;-1:-1:-1;;;2328:18:26;;2278:148;2384:31;2400:5;2407:7;2384:15;:31::i;:::-;2377:38;;;;2859:80:34;-1:-1:-1;;2859:80:34;:::o;7319:259:61:-;2276:21:38;:19;:21::i;:::-;7396:20:61::1;7418:15:::0;7437:28:::1;:26;:28::i;:::-;7395:70;;;;7475:50;7484:10;7688:3:10;7475:8:61;:50::i;:::-;7536:35;7558:12;7536:21;:35::i;1184:113:41:-:0;1244:7;1270:20;:18;:20::i;6142:414:58:-;2276:21:38;:19;:21::i;:::-;6241:13:58::1;6257:21;6272:5;6257:14;:21::i;:::-;6241:37;;6288:22;6313:23;6330:5;6313:16;:23::i;:::-;6288:48:::0;-1:-1:-1;6346:83:58::1;-1:-1:-1::0;;;;;6355:31:58;::::1;::::0;::::1;9022:3:10;6346:8:58;:83::i;:::-;6439:48;6461:5;6468:8;6478;6439:21;:48::i;:::-;6502:47;::::0;-1:-1:-1;;;;;6502:47:58;::::1;::::0;6523:5;;6502:47:::1;::::0;::::1;::::0;6540:8;;6502:47:::1;:::i;:::-;;;;;;;;2307:1:38;;6142:414:58::0;;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;:::-;2210:1;2038:180;-1:-1:-1;;;2038:180:49:o;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;2512:395::-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;2884:15;;;2862:38;2512:395;;;;;;;:::o;1193:166:49:-;1251:7;1270:37;1284:1;1279;:6;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;:85::i;:::-;:113;:180;;:113;:180::i;2499:175::-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;2586:5;;1703:2;;2586:16;:81::i;1410:186:53:-;1466:6;1484:75;1502:16;1493:25;;;12403:3:10;1484:8:53;:75::i;:::-;-1:-1:-1;1583:5:53;1410:186::o;3883:240:46:-;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;2005:20;-1:-1:-1;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;6578:502:55:-;6637:27;:25;:27::i;:::-;7044:29;:27;:29::i;9914:112:59:-;10007:12;9914:112;:::o;4791:203:27:-;4920:67;4939:5;4929:7;:15;:35;;;;;4959:5;4948:8;:16;4929:35;5640:3:10;4920:8:27;:67::i;10780:483:58:-;10847:16;10972:19;10994:17;:15;:17::i;:::-;10972:39;;11021:31;11069:11;11055:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11055:26:58;;11021:60;;11097:9;11092:133;11116:11;11112:1;:15;11092:133;;;11168:46;11197:16;11211:1;11197:13;:16::i;:::-;11168:20;11186:1;11168:17;:20::i;:::-;:28;;:46::i;:::-;11148:14;11163:1;11148:17;;;;;;;;;;;;;;;;;:66;11129:3;;11092:133;;9423:746:55;9723:19;;;;9684:7;;-1:-1:-1;;;;;9723:35:55;9753:4;9723:35;;:75;;-1:-1:-1;9762:20:55;;;;-1:-1:-1;;;;;9762:36:55;9793:4;9762:36;9723:75;9722:440;;9937:225;9978:11;10011:18;10051:17;10090:18;10130:14;9937:19;:225::i;:::-;9722:440;;;9818:100;9831:11;9844:18;9864:17;9883:18;9903:14;9818:12;:100::i;:::-;9703:459;;9423:746;;;;;;;;:::o;7885:744::-;8184:19;;;;8145:7;;-1:-1:-1;;;;;8184:35:55;8214:4;8184:35;;:75;;-1:-1:-1;8223:20:55;;;;-1:-1:-1;;;;;8223:36:55;8254:4;8223:36;8184:75;8183:439;;8398:224;8438:11;8471:18;8511:17;8550:18;8590:14;8398:18;:224::i;7683:110:28:-;3257:3;7683:110;:::o;10034:213:51:-;-1:-1:-1;;;;;10157:18:51;;;;;;;-1:-1:-1;10157:18:51;;;;;;;;:27;;;;;;;;;;;;;;:36;;;10208:32;;;;;10157:36;;10208:32;:::i;:::-;;;;;;;;10034:213;;;:::o;45615:2367:55:-;46386:18;:16;:18::i;:::-;46660:25;46713;46752:23;46789:43;46845:23;:21;:23::i;:::-;46646:222;;;;;;;;;46903:1;46883:17;:21;46879:87;;;46920:35;46937:17;46920:16;:35::i;:::-;47172:18;47196:28;:26;:28::i;:::-;47171:53;;;47740:24;47782:15;47768:10;:29;47767:148;;47863:52;47894:10;47906:8;47863:30;:52::i;:::-;47767:148;;;47813:35;47767:148;47740:175;;47926:49;47946:10;47958:16;47926:19;:49::i;:::-;45615:2367;;;;;;:::o;6844:665:34:-;6988:49;;;;;6965:20;;-1:-1:-1;;;;;6988:40:34;;;;;:49;;7029:7;;6988:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6965:72;-1:-1:-1;7052:31:34;7048:383;;7116:23;:12;:21;:23::i;:::-;7099:6;:40;;;;;;;;;;;;;;;7048:383;;;4446:1:17;7160:7:34;:32;7156:275;;;7226:23;:12;:21;:23::i;:::-;7208:6;:41;;;;;;;;;;;;;;;;;;;7156:275;;;4485:1:17;7270:7:34;:30;7266:165;;;7332:23;:12;:21;:23::i;:::-;7316:6;:39;;;;;;;;;;;;;;;;;;;7266:165;;;7386:34;12459:3:10;7386:7:34;:34::i;:::-;7480:7;7446:56;7489:12;7446:56;;;;;;:::i;:::-;;;;;;;;6844:665;;;:::o;4837:237:45:-;4884:4;5030:25;:23;:25::i;:::-;5012:15;:43;:55;;;-1:-1:-1;;5060:7:45;;;;5059:8;;4837:237::o;5187:108::-;5269:19;5187:108;:::o;5301:110::-;5384:20;5301:110;:::o;15061:436:59:-;15125:13;15154:10;15150:37;;-1:-1:-1;15173:14:59;15166:21;;15150:37;15201:5;15210:1;15201:10;15197:37;;;-1:-1:-1;15220:14:59;15213:21;;15197:37;15248:5;15257:1;15248:10;15244:37;;;-1:-1:-1;15267:14:59;15260:21;;15244:37;15295:5;15304:1;15295:10;15291:37;;;-1:-1:-1;15314:14:59;15307:21;;15291:37;15342:5;15351:1;15342:10;15338:37;;;-1:-1:-1;15361:14:59;15354:21;;15338:37;15389:5;15398:1;15389:10;15385:106;;;-1:-1:-1;15408:14:59;15401:21;;15385:106;15451:29;7054:3:10;15451:7:59;:29::i;7753:559:51:-;7880:71;-1:-1:-1;;;;;7889:20:51;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;-1:-1:-1;;;;;7970:23:51;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;-1:-1:-1;;;;;8122:17:51;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;-1:-1:-1;;;;;8102:17:51;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;-1:-1:-1;;;;;8200:20:51;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;;;;8298:6;;8270:35;:::i;10354:357:59:-;10415:7;10447;-1:-1:-1;;;;;10438:16:59;;;;;;;10434:30;;;-1:-1:-1;10463:1:59;10456:8;;10434:30;10487:7;-1:-1:-1;;;;;10478:16:59;;;;;;;10474:30;;;-1:-1:-1;10503:1:59;10496:8;;10474:30;10527:7;-1:-1:-1;;;;;10518:16:59;;;;;;;10514:30;;;-1:-1:-1;10543:1:59;10536:8;;10514:30;10567:7;-1:-1:-1;;;;;10558:16:59;;;;;;;10554:30;;;-1:-1:-1;10583:1:59;10576:8;;10554:30;10607:7;-1:-1:-1;;;;;10598:16:59;;;;;;;10594:30;;;-1:-1:-1;10623:1:59;10616:8;;10594:30;10647:7;-1:-1:-1;;;;;10638:16:59;;;;;;;10634:30;;;-1:-1:-1;10663:1:59;10656:8;;2752:165:36;2811:7;2837:73;:5;1772:3;1951:2;2837:16;:73::i;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7470:13;7486:23;;;:16;:23;;;;;;7427:33;;-1:-1:-1;7546:43:58;7486:23;7427:33;7580:8;7546:27;:43::i;:::-;7520:23;;;;:16;:23;;;;;;;:69;;;;7605:34;7537:5;;7605:34;;;;7634:4;;7605:34;:::i;:::-;;;;;;;;7282:364;;;;;:::o;2420:181:38:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;3515:1248:61:-;3576:13;3591:15;3619:18;3639:16;3657:17;3676:15;3695:23;:21;:23::i;:::-;3618:100;;;;;;;;3868:7;3850:15;:25;3846:911;;;3904:4;3891:17;;4380:10;4369:8;:21;4365:303;;;4502:9;4492:7;:19;4477:9;4459:15;:27;4444:10;4433:8;:21;4432:55;4431:81;;;;;;4418:10;:94;4410:102;;4365:303;;;4643:9;4633:7;:19;4618:9;4600:15;:27;4587:8;4574:10;:21;4573:55;4572:81;;;;;;4559:10;:94;4551:102;;4365:303;3846:911;;;4711:5;4698:18;;4738:8;4730:16;;3846:911;3515:1248;;;;;;:::o;2556:232:49:-;2616:7;2635:38;2644:6;;;5318:1:10;2635:8:49;:38::i;:::-;2688:6;2684:98;;-1:-1:-1;2717:1:49;2710:8;;2684:98;2770:1;2765;2761;:5;2760:11;;;;;;2756:1;:15;2749:22;;;;7770:306:61;7931:65;7955:10;7967:8;7977:9;7988:7;7931:23;:65::i;:::-;8011:58;8028:10;8040:8;8050:9;8061:7;8011:58;;;;;;;;;:::i;:::-;;;;;;;;7770:306;;;;:::o;4340:98:45:-;4392:39;4401:14;:12;:14::i;:::-;9935:3:10;4392:8:45;:39::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:17;:47;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:17;:47;;6030:3:10;9078:8:28;:89::i;:::-;9190:9;;:147;;9224:17;4326:3;4561:2;9190:20;:147::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;966:167:54:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;3913:358:45:-;3969:6;3965:232;;;3991:81;4018:24;:22;:24::i;:::-;4000:15;:42;9993:3:10;3991:8:45;:81::i;:::-;3965:232;;;4103:83;4130:25;:23;:25::i;:::-;4112:15;:43;11423:3:10;4103:8:45;:83::i;:::-;4207:7;:16;;;;;;;;;;4238:26;;;;;;4207:16;;4238:26;:::i;11271:279:28:-;11364:14;11381:11;:9;:11::i;:::-;11364:28;;11409:20;11433:10;:8;:10::i;:::-;:42;;;;;-1:-1:-1;;;;;11433:27:28;;;;;;;:42;;11461:6;;11469:5;;11433:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11486:57;;;;;11402:73;;-1:-1:-1;;;;;;11486:37:28;;;-1:-1:-1;11486:37:28;;-1:-1:-1;11486:57:28;;-1:-1:-1;11524:6:28;;11532:10;;11486:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:488;10065:9;;:56;;10086:7;4388:3;10065:20;:56::i;:::-;10053:9;:68;10137:33;;;;;;10162:7;;10137:33;:::i;:::-;;;;;;;;10425:7;10420:38;;10434:24;:22;:24::i;4380:719:58:-;4449:7;4877:13;:11;:13::i;:::-;4868:5;:22;4864:74;;;-1:-1:-1;945:4:47;4906:21:58;;4864:74;4948:22;4973:23;;;:16;:23;;;;;;5013:28;;:79;;5061:31;:14;:29;:31::i;:::-;5013:79;;;945:4:47;5006:86:58;4380:719;-1:-1:-1;;;4380:719:58:o;920:131:43:-;998:46;1012:1;1007;:6;5804:3:10;998:8:43;:46::i;25271:375:55:-;25527:7;25536:16;25571:68;25587:5;25594:18;25614:14;25630:8;25571:15;:68::i;:::-;25564:75;;;;25271:375;;;;;;;;;;;:::o;31004:360:28:-;31133:14;;31201:21;;31157:66;;31133:14;;31157:35;:66::i;:::-;31239:9;31234:124;31258:6;31254:1;:10;31234:124;;;31298:49;31317:7;31325:1;31317:10;;;;;;;;;;;;;;31329:14;31344:1;31329:17;;;;;;;;;;;;;;31298:18;:49::i;:::-;31285:7;31293:1;31285:10;;;;;;;;;;;;;;;;;:62;31266:3;;31234:124;;32751:7126;33432:10;33454:4;33432:27;33428:6443;;33746:28;;33728:12;;33754:4;;33746:28;;33728:12;;33765:8;;33746:28;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33727:47;;;33992:7;34025:1;34020:3336;;;;37516:9;34020:3336;34496:4;34493:1;34490;34475:26;34549:1;34543:8;34553:66;34539:81;34781:66;34771:77;;34765:2;;34904:16;34901:1;34898;34883:38;34960:16;34957:1;34950:27;34765:2;;36371;36365:4;36362:1;36347:27;36568:2;36562:4;36555:16;36992:2;36974:16;36970:25;36964:4;36958;36943:53;37330:2;37312:16;37308:25;37305:1;37298:36;33858:3703;37816:21;:19;:21::i;:::-;37852:31;37886:17;:15;:17::i;:::-;37852:51;;37917:39;37931:8;37941:14;37917:13;:39::i;:::-;37972:17;37991:29;38024:256;38049:6;38073;38097:9;38124:8;38150:15;38183:25;38226:14;38258:8;38024:7;:256;;:::i;:::-;37971:309;;;;38295:45;38311:12;38325:14;38295:15;:45;;:::i;:::-;38821:19;;-1:-1:-1;39208:23:28;;39248:24;;;39494:66;39476:16;;;39469:92;-1:-1:-1;38817:28:28;39587:16;;;39843:2;39833:13;;39587:16;39819:28;39809:1766:55;39901:25;39940:21;39975:25;40014:23;40051:43;40299:35;40340:10;:8;:10::i;:::-;-1:-1:-1;;;;;40340:24:55;;40365:11;:9;:11::i;:::-;40340:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40340:37:55;;;;;;;;;;;;:::i;:::-;40296:81;;;;40387:52;40401:18;40421:17;:15;:17::i;:::-;40387:13;:52::i;:::-;40477:44;40502:18;40477:24;:44::i;:::-;40449:72;-1:-1:-1;40449:72:55;-1:-1:-1;40842:33:55;40932:21;:19;:21::i;:::-;40885:68;;-1:-1:-1;40885:68:55;-1:-1:-1;41156:43:55;41320:89;41356:8;40885:68;;41320:35;:89::i;:::-;41209:200;-1:-1:-1;41209:200:55;-1:-1:-1;41440:128:55;41496:13;41209:200;41440:42;:128::i;:::-;41420:148;;39809:1766;;;;;;;;:::o;3181:2872:60:-;4328:15;;3316:7;;;;;4353:91;4377:9;4373:1;:13;4353:91;;;4413:20;4421:8;4430:1;4421:11;;;;;;;;;;;;;;4413:3;:7;;:20;;;;:::i;:::-;4407:26;-1:-1:-1;4388:3:60;;4353:91;;;-1:-1:-1;4457:8:60;4453:47;;4488:1;4481:8;;;;;;4453:47;4510:21;4591:3;4654:34;;;4510:21;4727:1262;4751:3;4747:1;:7;4727:1262;;;4789:9;4775:11;4813:216;4837:9;4833:1;:13;4813:216;;;4942:72;4955:24;4964:3;4969:9;4955:8;:24::i;:::-;4981:32;4990:8;4999:1;4990:11;;;;;;;;;;;;;;5003:9;4981:8;:32::i;:::-;4942:12;:72::i;:::-;4936:78;-1:-1:-1;4848:3:60;;4813:216;;;;5059:9;5043:25;;5095:622;5125:248;5235:88;5298:24;5307:3;5312:9;5298:8;:24::i;:::-;5235:58;5248:28;5257:13;5272:3;5248:8;:28::i;:::-;1372:3;5235:12;:58::i;:::-;:62;;:88::i;:::-;5346:9;5125:8;:248::i;:::-;5520:165;5633:30;5643:9;5655:1;5643:13;5659:3;5633:8;:30::i;:::-;5520:83;5533:53;1372:3;5543:13;:30;5576:9;5533:8;:53::i;5095:622::-;5083:634;;5748:13;5736:9;:25;5732:247;;;5814:1;5797:13;5785:9;:25;:30;5781:93;;5846:9;5839:16;;;;;;;;;;;5781:93;5732:247;;;5927:1;5914:9;5898:13;:25;:30;5894:85;;5955:9;5948:16;;;;;;;;;;;5894:85;-1:-1:-1;4756:3:60;;4727:1262;;;;5999:47;7757:3:10;5999:7:60;:47::i;:::-;3181:2872;;;;;;;;;:::o;2628:355:47:-;2690:7;2709:38;2718:6;;;5318:1:10;2709:8:47;:38::i;:::-;2762:6;2758:219;;-1:-1:-1;2791:1:47;2784:8;;2758:219;945:4;2843:7;;;;2864:51;;2843:1;:7;:1;2873:13;;;;;:20;5366:1:10;2864:8:47;:51::i;:::-;2965:1;2953:9;:13;;;;;;2946:20;;;;;1437:126:10;1484:28;1492:9;1484:28;:7;:28::i;1066:243:2:-;1140:4;1245:1;1231:4;:11;:15;:71;;;;;1003:3;1250:52;;1261:4;1250:25;;;;;;;;;;;;:::i;:::-;:52;;;;1066:243;-1:-1:-1;;1066:243:2:o;4531:119:30:-;4588:55;4597:16;:14;:16::i;:::-;12169:3:10;4588:8:30;:55::i;37719:1128:55:-;37882:7;37891:16;38437:21;38460:25;38489:44;38514:18;38489:24;:44::i;:::-;38436:97;;;;38545:19;38566:27;38597:106;38636:8;38658:13;38685:8;38597:25;:106::i;:::-;38544:159;;;;38800:11;38813:26;38825:10;38837:1;38813:11;:26::i;:::-;38792:48;;;;;;;;37719:1128;;;;;;:::o;30111:354:28:-;30234:14;;30302:21;;30258:66;;30234:14;;30258:35;:66::i;:::-;30340:9;30335:124;30359:6;30355:1;:10;30335:124;;;30399:49;30418:7;30426:1;30418:10;;;;;;;;;;;;;;30430:14;30445:1;30430:17;;;;;;;;;;;;;;30399:18;:49::i;:::-;30386:7;30394:1;30386:10;;;;;;;;;;;;;;;;;:62;30367:3;;30335:124;;3934:104:26;4010:21;4016:6;4024;4010:5;:21::i;2038:157:36:-;2100:7;2126:62;:5;2100:7;1895:2;2126:16;:62::i;2275:149::-;2333:7;2359:58;:5;1703:2;;2359:16;:58::i;3015:234::-;3076:16;3094:15;3132:18;3144:5;3132:11;:18::i;:::-;3121:29;-1:-1:-1;3170:72:36;:5;1841:3;1951:2;3170:16;:72::i;:::-;3160:82;;3015:234;;;:::o;24702:374:55:-;24958:7;24967:16;25002:67;25018:4;25024:18;25044:14;25060:8;25002:15;:67::i;31895:356:28:-;32022:14;;32090:21;;32046:66;;32022:14;;32046:35;:66::i;:::-;32128:9;32123:122;32147:6;32143:1;:10;32123:122;;;32187:47;32204:7;32212:1;32204:10;;;;;;;;;;;;;;32216:14;32231:1;32216:17;;;;;;;;;;;;;;32187:16;:47::i;:::-;32174:7;32182:1;32174:10;;;;;;;;;;;;;;;;;:60;32155:3;;32123:122;;32257:488;32315:11;32712:10;:8;:10::i;:::-;-1:-1:-1;;;;;32712:24:28;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16696:183:59:-;16793:4;16816:56;:23;16851:20;5949:143:46;6054:14;2246:10;6046:33;;;6045:40;;5949:143::o;3803:419:41:-;3963:13;;;3973:2;3963:13;;;;;;;;;3914:12;;;;3963:13;;;;;;;;;;;-1:-1:-1;3963:13:41;3938:38;;4092:1;4087:2;4076:9;4072:18;4065:29;4134:1;4129:2;4118:9;4114:18;4107:29;4177:1;4172:2;4161:9;4157:18;4149:30;4206:9;3803:419;-1:-1:-1;;;;3803:419:41:o;1701:1214::-;1895:14;1912:28;1929:10;1912:16;:28::i;:::-;1895:45;;1950:66;1959:45;1977:7;1986:6;1994:9;1959:17;:45::i;:::-;2006:9;1950:8;:66::i;:::-;2487:63;2508:15;2496:8;:27;;12277:3:10;2487:8:41;:63::i;:::-;-1:-1:-1;;;;;;;;;2884:19:41;;;;;;;;:10;:19;;;;;:24;;-1:-1:-1;2884:24:41;;;-1:-1:-1;1701:1214:41:o;22584:1988:55:-;22774:7;22783:16;22811:32;22846:19;:8;:17;:19::i;:::-;22811:54;-1:-1:-1;22875:72:55;22892:32;22884:4;:40;;;;;;;;;6245:3:10;22875:8:55;:72::i;:::-;23061:38;23102:27;:8;:25;:27::i;:::-;23061:68;;23139:88;23175:21;:28;23205:14;:21;23139:35;:88::i;:::-;23237:52;23251:21;23274:14;23237:13;:52::i;:::-;23301:11;23318:28;:26;:28::i;:::-;23300:46;;;23356:26;23385:35;23398:21;23385:12;:35::i;:::-;23356:64;;23430:26;23459:46;23490:3;23495:9;23459:30;:46::i;:::-;23430:75;-1:-1:-1;23430:75:55;23577:20;24232:42;3234:8;23430:75;24232:28;:42::i;:::-;24211:63;;24285:35;24301:6;24309:10;24285:15;:35::i;:::-;24369:10;24330:21;24352:13;:11;:13::i;:::-;24330:36;;;;;;;;;;;;;:49;;;;;24466:44;24486:3;24491:18;24466:19;:44::i;:::-;-1:-1:-1;24529:12:55;24543:21;;-1:-1:-1;22584:1988:55;;-1:-1:-1;;;;;;;;;;22584:1988:55:o;3818:110:26:-;3897:24;3903:9;3914:6;3897:5;:24::i;4570:149:51:-;-1:-1:-1;;;;;4685:18:51;;;4659:7;4685:18;;;-1:-1:-1;4685:18:51;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;7584:180:61:-;7648:71;7672:5;7679;7686:15;7703;7648:23;:71::i;:::-;7734:23;7751:5;7734:23;;;;;;:::i;2386:188:50:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;1799:51:43;-1:-1:-1;;;;;1808:18:43;;;;;;;5692:3:10;1799:8:43;:51::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;7061:607:46;7197:44;7215:3;7206:6;:12;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;:27::i;:::-;7433:9;:40;;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;26094:164:28:-;26233:18;:16;:18::i;7724:209:58:-;7782:19;7804:17;:15;:17::i;:::-;7782:39;;7836:9;7831:96;7855:11;7851:1;:15;7831:96;;;7887:29;7914:1;7887:26;:29::i;:::-;7868:3;;7831:96;;14150:437:59;14215:7;14238:10;14234:38;;-1:-1:-1;14257:15:59;14250:22;;14234:38;14286:5;14295:1;14286:10;14282:38;;;-1:-1:-1;14305:15:59;14298:22;;14282:38;14334:5;14343:1;14334:10;14330:38;;;-1:-1:-1;14353:15:59;14346:22;;14330:38;14382:5;14391:1;14382:10;14378:38;;;-1:-1:-1;14401:15:59;14394:22;;14378:38;14430:5;14439:1;14430:10;14426:38;;;-1:-1:-1;14449:15:59;14442:22;;14426:38;14478:5;14487:1;14478:10;14474:107;;;-1:-1:-1;14497:15:59;14490:22;;1790:209:47;1852:7;1889:5;;;1904:57;1913:6;;;:26;;;1938:1;1933;1923:7;:11;;;;1904:57;945:4;1979:13;;;;-1:-1:-1;;;1790:209:47:o;2693:749:27:-;2915:7;2934:39;2948:8;2958:14;2934:13;:39::i;:::-;3004:54;3013:11;:18;;;3033:14;3048:8;3033:24;;;;;;;;;;;;;;3004:8;:54::i;:::-;2983:18;;;:75;3069:16;3088:57;2983:11;3117:8;3127:7;3136:8;3088:15;:57::i;:::-;3069:76;;3233:47;3246:8;3256:14;3271:7;3256:23;;;;;;;;;;;;;;3233:12;:47::i;:::-;3222:58;;3408:27;3426:8;3408:17;:27::i;13388:1964:55:-;13630:7;;;13666:16;;:44;;;;;;;;;13649:61;;13721:49;13735:18;13755:14;13721:13;:49::i;:::-;13801:130;13823:11;:18;;;13855:14;13870:9;:50;;13902:18;13870:50;;;13882:17;13870:50;13855:66;;;;;;;13801:130;13780:11;:18;;:151;;;;;13956:25;13995;14034:18;14066:28;14107:35;14123:18;14107:15;:35::i;:::-;13942:200;;;;;;;;14241:24;14267:26;14319:13;:11;:13::i;:::-;14297:18;:35;:596;;14627:266;14656:9;14683:11;:18;;;14719:8;14745:33;14759:18;14745:13;:33::i;:::-;14796:10;14824:17;14859:20;14627:11;:266::i;:::-;14297:596;;;14347:265;14376:9;14403:11;:18;;;14439:8;14465:32;14479:17;14465:13;:32::i;:::-;14515:10;14543:17;14578:20;14347:11;:265::i;:::-;14240:653;;;;14904:182;14947:10;14971:8;14993:20;15027:17;15058:18;14904:29;:182::i;:::-;15116:9;:206;;15257:65;15270:16;15288:14;15303:17;15288:33;;;;;;;15257:65;15116:206;;;15144:68;15159:16;15177:14;15192:18;15177:34;;;;;;;;;;;;;;15144:14;:68::i;:::-;15097:225;13388:1964;-1:-1:-1;;;;;;;;;;;;;13388:1964:55:o;1911:776:27:-;2132:7;2280:42;2303:11;:18;;;2280:22;:42::i;:::-;2259:18;;;:63;2333:39;2347:8;2357:14;2333:13;:39::i;:::-;2403:53;2412:11;:18;;;2432:14;2447:7;2432:23;;;;;;;2403:53;2382:18;;;:74;2467:17;2487:56;2382:11;2515:8;2525:7;2534:8;2487:14;:56::i;:::-;2467:76;;2629:51;2644:9;2655:14;2670:8;2655:24;;;;;;;26392:134:28;26456:63;26480:26;:24;:26::i;:::-;26509:9;26456:15;:63::i;16366:468:57:-;16618:181;16656:21;2543:1;2613:3;16618:20;:181::i;:::-;16497:106;16518:10;2613:3;2838:2;16497:20;:106::i;:::-;:302;16465:17;:334;16810:17;:15;:17::i;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;1944:544:29:-;2032:4;1638:42;2053:10;:8;:10::i;:::-;-1:-1:-1;;;;;2053:29:29;;;;;2052:63;;;2087:28;2106:8;2087:18;:28::i;:::-;2048:434;;;2247:10;:8;:10::i;:::-;-1:-1:-1;;;;;2233:24:29;:10;:24;;-1:-1:-1;2226:31:29;;2048:434;2410:16;:14;:16::i;:::-;:61;;;;;-1:-1:-1;;;;;2410:27:29;;;;;;;:61;;2438:8;;2448:7;;2465:4;;2410:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4832:642:61:-;4924:18;4956:16;4986:17;5017:15;5070:83;2181:1;2411:2;5070:24;;:35;;:83;;;;;:::i;:::-;5174:24;;5057:96;;-1:-1:-1;5174:81:61;;2237:2;;5174:35;:81::i;:::-;5277:24;;5163:92;;-1:-1:-1;5277:86:61;;2295:3;2472:2;5277:35;:86::i;:::-;5383:24;;5265:98;;-1:-1:-1;5383:84:61;;2352:3;2472:2;5383:35;:84::i;:::-;5373:94;;4832:642;;;;:::o;8082:570::-;8567:78;8588:7;2352:3;2472:2;8567:20;:78::i;:::-;8470:82;8491:9;2295:3;2472:2;8470:20;:82::i;:::-;8379:76;8400:8;2237:2;2411;8379:20;:76::i;:::-;8284:80;8305:10;2181:1;2411:2;8284:20;:80::i;:::-;:171;:268;:361;8245:24;:400;-1:-1:-1;;;;8082:570:61:o;9409:124:28:-;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;47988:1050:55:-;48608:35;48649:10;:8;:10::i;:::-;-1:-1:-1;;;;;48649:24:55;;48674:11;:9;:11::i;:::-;48649:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48649:37:55;;;;;;;;;;;;:::i;:::-;48605:81;;;;48696:52;48710:18;48730:17;:15;:17::i;48696:52::-;48758:25;48786:32;48799:18;48786:12;:32::i;:::-;48758:60;;48830:18;48854:28;:26;:28::i;:::-;48829:53;;;48892:24;48919:52;48950:10;48962:8;48919:30;:52::i;:::-;48892:79;;48982:49;49002:10;49014:16;48982:19;:49::i;25825:1971::-;26012:7;26021:16;26063:25;26102;26141:18;26173:28;26214:35;26230:18;26214:15;:35::i;:::-;26049:200;;;;;;;;26265:197;26475:6;:26;;26494:7;26475:26;;;26484:7;26475:26;26265:237;;26514:17;26533:29;26566:184;26593:8;26615:10;26639:17;26670:20;26704:14;26732:8;26566:13;:184;;:::i;:::-;26513:237;;;;26911:68;26982:6;:40;;27008:14;26982:40;;;26991:14;26982:40;26911:111;;27032:49;27047:8;27057:12;27071:9;27032:14;:49::i;:::-;27091:26;27120:39;27130:17;27149:9;27120;:39;;:::i;:::-;27091:68;;27334:182;27377:10;27401:8;27423:20;27457:17;27488:18;27334:29;:182::i;:::-;27749:9;27760:28;27772:12;27786:1;27760:11;:28::i;:::-;27741:48;;;;;;;;;;;;;25825:1971;;;;;;;:::o;12340:261:59:-;12458:7;12467:16;12507:52;12525:18;12544:13;:11;:13::i;:::-;12525:33;;;;;;;;;;;;;;12507:17;:52::i;:::-;12561:32;12574:18;12561:12;:32::i;:::-;12499:95;;;;12340:261;;;:::o;4998:6138:57:-;5183:7;5192;6628:30;6672:37;6723:28;6764:47;6785:8;6795:15;6764:20;:47::i;:::-;6614:197;;;;;;9748:35;9812:25;9787:22;:50;9786:133;;9918:1;9786:133;;;9878:25;9853:22;:50;9786:133;9748:171;;9929:42;10007:22;9975:29;:54;9974:141;;10114:1;9974:141;;;10077:22;10045:29;:54;9974:141;9929:186;;10461:33;10497:140;10576:51;4359:1:17;10576:29:57;:51::i;:::-;10497:57;:27;10533:20;10497:35;:57::i;:140::-;10461:176;;10648:31;10682:148;10768:52;4446:1:17;10768:29:57;:52::i;:::-;10682:64;:34;10725:20;10682:42;:64::i;:148::-;11055:51;;;;;11108:20;;-1:-1:-1;4998:6138:57;;-1:-1:-1;;;;;;;;;4998:6138:57:o;1470:619:35:-;1610:7;1984:98;1997:46;2006:11;2019:23;1997:8;:46::i;:::-;2045:36;:23;:34;:36::i;2402:148:49:-;2464:7;2483:38;2492:6;;;5318:1:10;2483:8:49;:38::i;:::-;2542:1;2538;:5;;;;;;;2402:148;-1:-1:-1;;;2402:148:49:o;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;5268:399:30;5424:7;5433:16;5461:19;5483:27;:8;:25;:27::i;:::-;5461:49;;5521:27;5551:66;5582:8;5592:11;5605;5551:30;:66::i;:::-;5636:11;;;;-1:-1:-1;5268:399:30;;-1:-1:-1;;;;;5268:399:30:o;13695:426:59:-;13808:39;13902:7;:14;13919:1;13902:18;13888:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13888:33:59;;13863:58;;13936:9;13931:184;13955:22;:29;13951:1;:33;13931:184;;;14038:13;:11;:13::i;:::-;14033:1;:18;:71;;14066:7;14078:13;:11;:13::i;:::-;14074:1;:17;:29;;14102:1;14098;:5;14074:29;;;14094:1;14074:29;14066:38;;;;;;;;;;;;;;14033:71;;;14054:9;14033:71;14005:22;14028:1;14005:25;;;;;;;;;;;;;;;;;:99;13986:3;;13931:184;;;;13695:426;;;;:::o;9200:411:51:-;9275:68;-1:-1:-1;;;;;9284:21:51;;;;10506:3:10;9275:8:51;:68::i;:::-;9354:49;9375:7;9392:1;9396:6;9354:20;:49::i;:::-;-1:-1:-1;;;;;9435:18:51;;:9;:18;;;;;;;;;;;:65;;9458:6;11950:3:10;9435:22:51;:65::i;:::-;-1:-1:-1;;;;;9414:18:51;;:9;:18;;;;;;;;;;:86;9510:42;9526:25;9544:6;9526:13;:11;:13::i;:::-;:17;;:25::i;:::-;9510:15;:42::i;:::-;9567:37;;9593:1;;-1:-1:-1;;;;;9567:37:51;;;;;;;9597:6;;9567:37;:::i;:::-;;;;;;;;9200:411;;:::o;2989:682:47:-;3049:7;3068:38;3077:6;;;5318:1:10;3068:8:47;:38::i;:::-;3121:6;3117:548;;-1:-1:-1;3150:1:47;3143:8;;3117:548;945:4;3202:7;;;;3223:51;;3202:1;:7;:1;3232:13;;;3223:51;3648:1;3643;3631:9;:13;3630:19;;;;;;3653:1;3629:25;3622:32;;;;;3199:183:50;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;:::i;2921:876:41:-;3066:4;3082:60;3091:9;:16;3111:2;3091:22;12334:3:10;3082:8:41;:60::i;:::-;3427:4;3412:20;;;3406:27;3472:4;3457:20;;;3451:27;3525:4;3510:20;;3504:27;3579:26;;3153:9;3579:26;;;;;;;;;3406:27;;3451;;3496:36;;;3579:26;;;;3589:6;;3496:36;;3406:27;;3451;;3579:26;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3579:26:41;;-1:-1:-1;3579:26:41;;;-1:-1:-1;;;;;;;3728:30:41;;;;;;:61;;-1:-1:-1;;;;;;3762:27:41;;;;;;;3728:61;3720:70;2921:876;-1:-1:-1;;;;;;;;2921:876:41:o;979:122:1:-;1039:8;1077:4;1066:28;;;;;;;;;;;;:::i;1249:168::-;1317:26;1382:4;1371:39;;;;;;;;;;;;:::i;11795:361:59:-;11866:16;11894:34;11962:1;11945:7;:14;:18;11931:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11931:33:59;;11894:70;;11979:9;11974:141;11998:17;:24;11994:1;:28;11974:141;;;12066:7;12078:13;:11;:13::i;:::-;12074:1;:17;:29;;12098:1;12102;12098:5;12074:29;;;12094:1;12074:29;12066:38;;;;;;;;;;;;;;12043:17;12061:1;12043:20;;;;;;;;;;;;;;;;;:61;12024:3;;11974:141;;8583:297:51;8658:49;8687:1;8691:7;8700:6;8658:20;:49::i;:::-;8718:42;8734:25;8752:6;8734:13;:11;:13::i;8718:42::-;-1:-1:-1;;;;;8791:18:51;;:9;:18;;;;;;;;;;;:30;;8814:6;8791:22;:30::i;:::-;-1:-1:-1;;;;;8770:18:51;;:9;:18;;;;;;;;;;;:51;;;;8836:37;;8770:18;;:9;8836:37;;;;8866:6;;8836:37;:::i;3388:427:50:-;3790:9;;3765:44::o;8058:913:58:-;8569:13;:11;:13::i;:::-;8560:5;:22;8556:35;;;8584:7;;8556:35;8601:13;8617:23;;;:16;:23;;;;;;8654:19;;8650:315;;8690:16;8708:15;8727:21;:5;:19;:21::i;:::-;8689:59;;;;8784:7;8766:15;:25;8762:193;;;8877:63;8899:5;8906:23;8923:5;8906:16;:23::i;:::-;8931:8;8877:21;:63::i;29363:579:28:-;29443:7;29894:41;29913:6;29921:13;29894:18;:41::i;11201:466:55:-;11419:7;11457:203;11489:5;11525:7;:14;;;11557:18;11593:17;11628:18;11457:14;:203::i;31566:156:28:-;31650:7;31676:39;31693:6;31701:13;31676:16;:39::i;26620:240::-;26686:7;26804:49;26817:35;:22;:20;:22::i;:::-;:33;:35::i;:::-;26804:6;;:12;:49::i;27917:1089:55:-;28026:7;28047:16;28077:7;28098;28131:23;28156:33;28193:21;:19;:21::i;:::-;28130:84;;;;28238:25;28277;28316:34;28363:94;28394:18;28414:15;28431:25;28363:30;:94::i;:::-;28224:233;;;;;;28688:18;28712:28;:26;:28::i;:::-;28687:53;;;28750:28;28795:15;28781:10;:29;:137;;28866:52;28897:10;28909:8;28866:30;:52::i;:::-;28781:137;;;28825:26;28781:137;28937:17;;28956:8;;-1:-1:-1;28966:10:55;;-1:-1:-1;28937:17:55;;-1:-1:-1;27917:1089:55;;-1:-1:-1;;;;;;27917:1089:55:o;11304:383:59:-;11365:7;11564:54;11582:13;:11;:13::i;:::-;11573:5;:22;;5640:3:10;11564:8:59;:54::i;:::-;11644:13;:11;:13::i;:::-;11636:5;:21;:44;;11668:12;:5;11678:1;11668:9;:12::i;:::-;11636:44;;18906:844:55;19161:7;19170;19208:9;:535;;19499:244;19551:6;19579:8;19609;19639:10;19671:12;19705:20;19499:30;:244::i;:::-;19208:535;;;19236:244;19288:6;19316:8;19346;19376:10;19408:12;19442:20;19236:30;:244::i;:::-;19189:554;;;;18906:844;;;;;;;;;;:::o;15596:841::-;15850:7;15859;15897:9;:533;;16187:243;16239:6;16267:8;16297:7;16326:10;16358:12;16392:20;16187:30;:243::i;15897:533::-;15925:243;15977:6;16005:8;16035:7;16064:10;16096:12;16130:20;15925:30;:243::i;13606:2484:57:-;14462:29;14494:52;14525:10;14537:8;14494:30;:52::i;:::-;14462:84;-1:-1:-1;14626:25:57;14654:45;:18;14681:17;14654:26;:45::i;:::-;14626:73;-1:-1:-1;14709:24:57;14736:47;:20;14626:73;14736:28;:47::i;:::-;14709:74;;15226:16;15202:21;:40;15198:821;;;15291:40;;;15258:30;15525:168;15555:85;15291:40;15588:51;15258:30;15588:29;:51::i;:::-;15555:8;:85::i;:::-;15658:21;15525:12;:168::i;:::-;15487:206;-1:-1:-1;15712:31:57;;15708:301;;15763:25;15791:149;15855:18;15895:27;15791:42;:149::i;:::-;15763:177;;15959:35;15976:17;15959:16;:35::i;:::-;15708:301;;15198:821;;;16029:54;16049:10;16061:21;16029:19;:54::i;30669:160:28:-;30755:7;30781:41;30800:6;30808:13;30781:18;:41::i;26960:283::-;27031:7;27142:17;27162:36;27175:22;:20;:22::i;:::-;27162:6;;:12;:36::i;:::-;27142:56;-1:-1:-1;27215:21:28;:6;27142:56;27215:10;:21::i;10453:463:55:-;10670:7;10708:201;10740:4;10774:7;:14;;;10806:18;10842:17;10877:18;10708:14;:201::i;9206:210:58:-;9252:19;9274:17;:15;:17::i;:::-;9252:39;;9306:9;9301:109;9325:11;9321:1;:15;9301:109;;;9361:19;9378:1;9361:16;:19::i;:::-;9357:42;;;9382:17;9397:1;9382:14;:17::i;:::-;9338:3;;9301:109;;49834:573:55;50339:4;50366:34;50391:8;50366:24;:34::i;33387:1184::-;33641:7;33650:16;33678:32;33713:19;:8;:17;:19::i;:::-;33678:54;-1:-1:-1;33754:55:55;33746:4;:63;;;;;;;;;33742:823;;;33848:254;33897:17;33936:20;33978:10;34010:8;34040:14;34076:8;33848:27;:254::i;:::-;33825:277;;;;;;;33742:823;34131:59;34123:4;:67;;;;;;;;;34119:446;;;34213:66;34241:17;34260:8;34270;34213:27;:66::i;34119:446::-;34308:58;34300:4;:66;;;;;;;;;34296:269;;;34389:99;34416:17;34435:20;34457:10;34469:8;34479;34389:26;:99::i;34296:269::-;34519:35;8698:3:10;34519:7:55;:35::i;:::-;33387:1184;;;;;;;;;;;:::o;29113:1183::-;29367:7;29376:16;29404:32;29439:19;:8;:17;:19::i;:::-;29404:54;-1:-1:-1;29480:55:55;29472:4;:63;;;;;;;;;29468:822;;;29574:254;29623:17;29662:20;29704:10;29736:8;29766:14;29802:8;29574:27;:254::i;29468:822::-;29857:59;29849:4;:67;;;;;;;;;29845:445;;;29939:69;29970:17;29989:8;29999;29939:30;:69::i;29845:445::-;30037:54;30029:4;:62;;;;;;;;;30025:265;;;30114:99;30141:17;30160:20;30182:10;30194:8;30204;30114:26;:99::i;30025:265::-;30244:35;7111:3:10;30244:7:55;:35::i;49224:423::-;49433:15;;49502:16;;49458:61;;49433:15;;49458:35;:61::i;:::-;49535:9;49530:111;49554:6;49550:1;:10;49530:111;;;49595:35;49604:8;49613:1;49604:11;;;;;;;;;;;;;;49617:9;49627:1;49617:12;;;;;;;;;;;;;;49595:8;:35;;:::i;:::-;49581:8;49590:1;49581:11;;;;;;;;;;;;;;;;;:49;49562:3;;49530:111;;;;49224:423;;;;:::o;17816:417:59:-;17886:7;18197:29;18215:10;18197:13;:11;:13::i;:::-;:17;;:29::i;11142:2145:57:-;11284:30;11328:37;11379:28;11602:142;11646:15;11675:36;11696:8;11706:4;11675:20;:36::i;:::-;11602:30;:142::i;:::-;11577:167;;11956:20;:18;:20::i;:::-;11952:1329;;;12294:57;12325:15;12342:8;12294:30;:57::i;:::-;12262:89;;12388:29;12365:52;;11952:1329;;;12438:21;:19;:21::i;:::-;12434:847;;;12672:22;12640:54;;12731:57;12762:15;12779:8;12731:30;:57::i;:::-;12708:80;;12434:847;;;13008:167;13056:15;13089:37;13110:8;13120:5;13089:20;:37::i;13008:167::-;12976:199;;13213:57;13244:15;13261:8;13213:30;:57::i;:::-;13190:80;;12434:847;11142:2145;;;;;:::o;5813:112:47:-;5867:7;945:4;5894:1;:7;5893:25;;5917:1;5893:25;;;-1:-1:-1;945:4:47;5906:7;;5813:112::o;1364:158:2:-;1432:19;1492:4;1481:34;;;;;;;;;;;;:::i;5673:1420:30:-;5835:27;6856:16;6875:32;:11;6895;6875:19;:32::i;:::-;6856:51;;6945:8;:15;6931:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6931:30:30;;6918:43;;6976:9;6971:116;6995:8;:15;6991:1;:19;6971:116;;;7047:29;7067:8;7047;7056:1;7047:11;;;;;;;;;;;;;;:19;;:29;;;;:::i;:::-;7031:10;7042:1;7031:13;;;;;;;;;;;;;;;;;:45;7012:3;;6971:116;;;;5673:1420;;;;;;:::o;1404:121:54:-;1462:7;1488:30;1492:1;1495;5172::10;1488:3:54;:30::i;3870:94:51:-;3937:12;:20;3870:94::o;11901:905:55:-;12122:7;12194:25;12222:32;12235:18;12222:12;:32::i;:::-;12194:60;;12264:15;12282:32;12296:17;12282:13;:32::i;:::-;12264:50;;12324:16;12343:33;12357:18;12343:13;:33::i;:::-;12324:52;;12388:18;12412:28;:26;:28::i;:::-;12387:53;;;12450:17;12470:52;12501:10;12513:8;12470:30;:52::i;:::-;12450:72;;12537:9;12533:267;;;12569:91;12596:10;12608:8;12618:7;12627:8;12637:11;12650:9;12569:26;:91::i;:::-;12562:98;;;;;;;;;12533:267;12698:91;12725:10;12737:8;12747:7;12756:8;12766:11;12779:9;12698:26;:91::i;3286:1706:57:-;3500:7;3521:16;3551:7;3584:21;3607:25;3636:44;3661:18;3636:24;:44::i;:::-;3583:97;;;;3854:43;3911;3967:89;4003:8;4013:15;4030:25;3967:35;:89::i;:::-;3840:216;;;;4369:25;4397:128;4453:13;4480:35;4397:42;:128::i;:::-;4369:156;-1:-1:-1;4540:21:57;;4536:87;;4577:35;4594:17;4577:16;:35::i;:::-;4904:33;;;;;4939:8;;-1:-1:-1;4904:33:57;;-1:-1:-1;3286:1706:57;-1:-1:-1;;;;;3286:1706:57:o;21034:1002:55:-;21287:7;21296;21500:27;21544:8;:15;21530:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21530:30:55;;21500:60;;21593:9;21570:10;21581:8;21570:20;;;;;;;;;;;;;:32;;;;;21613:17;21633:216;21687:10;21711:8;21733:10;21757:12;21783:20;21817:22;:20;:22::i;:::-;21633:40;:216::i;:::-;21613:236;;21881:33;21904:9;21881:8;21890;21881:18;;;;;;;;;;;;;;:22;;:33;;;;:::i;:::-;21860:8;21869;21860:18;;;;;;;;;;;;;;;;;:54;21924:26;21953:27;:12;21970:9;21953:16;:27::i;:::-;21999:9;;;;-1:-1:-1;21034:1002:55;;-1:-1:-1;;;;;;;;;21034:1002:55:o;20028:724::-;20281:7;20290;20309:17;20329:236;20382:10;20406:8;20428;20450:9;20473:12;20499:20;20533:22;:20;:22::i;:::-;20329:39;:236::i;:::-;20309:256;;20597:33;20620:9;20597:8;20606;20597:18;;;;;;;:33;20576:8;20585;20576:18;;;;;;;;;;;;;;;;;:54;20640:26;20669:27;:12;20686:9;20669:16;:27::i;:::-;20715:9;;;;-1:-1:-1;20028:724:55;;-1:-1:-1;;;;;;;;20028:724:55:o;17956:708::-;18205:7;18214;18233:16;18252:232;18305:10;18329:8;18351:7;18372:6;18392:12;18418:20;18452:22;:20;:22::i;:::-;18252:39;:232::i;:::-;18233:251;;18515:31;18537:8;18515;18524:7;18515:17;;;;;;;;;;;;;;:21;;:31;;;;:::i;:::-;18495:8;18504:7;18495:17;;;;;;;;;;;;;;;;;:51;18556:26;18585:24;:12;18602:6;18585:16;:24::i;16706:983::-;16957:7;16966;17170:26;17213:8;:15;17199:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17199:30:55;;17170:59;;17260:8;17239:9;17249:7;17239:18;;;;;;;;;;;;;:29;;;;;17279:14;17296:215;17350:10;17374:8;17396:9;17419:12;17445:20;17479:22;:20;:22::i;:::-;17296:40;:215::i;:::-;17279:232;;17542:31;17564:8;17542;17551:7;17542:17;;;;;;;:31;17522:8;17531:7;17522:17;;;;;;;;;;;;;;;;;:51;17583:26;17612:24;:12;17629:6;17612:16;:24::i;2005:617:47:-;2065:7;2102:5;;;2117:57;2126:6;;;:26;;;2151:1;2146;2136:7;:11;;;;2117:57;2189:12;2185:431;;2224:1;2217:8;;;;;2185:431;945:4;-1:-1:-1;;2582:11:47;;2581:19;;15593:175:59;15662:4;15685:76;:23;4198:1;15720:40;;15685:34;:76::i;3871:161:58:-;3929:13;3945:23;;;:16;:23;;;;;;4004:21;3945:23;4004:19;:21::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;17664:525:57:-;18121:4;18148:34;18173:8;18148:24;:34::i;1107:122:1:-;1167:8;1205:4;1194:28;;;;;;;;;;;;:::i;35353:987:55:-;35621:7;35630:16;35659:27;35688:22;35714:33;:8;:31;:33::i;:::-;35658:89;;;;35757:71;35793:10;:17;35812:8;:15;35757:35;:71::i;:::-;35911:55;35925:10;35937:28;35950:14;35937:12;:28::i;35911:55::-;35977:19;35999:216;36053:10;36077:8;36099:10;36123:12;36149:20;36183:22;:20;:22::i;35999:216::-;35977:238;;36225:65;36249:14;36234:11;:29;;6300:3:10;36225:8:55;:65::i;:::-;36309:11;36322:10;;-1:-1:-1;35353:987:55;;-1:-1:-1;;;;;;;;35353:987:55:o;34845:410::-;35006:7;35015:16;35043:19;35065:33;:8;:31;:33::i;:::-;35043:55;;35108:27;35138:67;35169:8;35179:12;35193:11;35138:30;:67::i;36438:1143::-;36664:7;36673:16;36803:19;36824:18;36846:32;:8;:30;:32::i;:::-;36802:76;;;;36989:60;37011:8;:15;36998:10;:28;5640:3:10;36989:8:55;:60::i;:::-;37134:27;37178:8;:15;37164:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37164:30:55;;37134:60;;37291:240;37344:10;37368:8;37390:10;37414:11;37439:12;37465:20;37499:22;:20;:22::i;37291:240::-;37266:10;37277;37266:22;;;;;;;;;;;;;;;;;:265;37550:11;;;;-1:-1:-1;36438:1143:55;;-1:-1:-1;;;;;;;36438:1143:55:o;30906:989::-;31174:7;31183:16;31212:26;31240:23;31267:33;:8;:31;:33::i;:::-;31211:89;;;;31310:70;31346:8;:15;31363:9;:16;31310:35;:70::i;:::-;31463:54;31477:9;31488:28;31501:14;31488:12;:28::i;31463:54::-;31528:20;31551:215;31605:10;31629:8;31651:9;31674:12;31700:20;31734:22;:20;:22::i;31551:215::-;31528:238;;31777:68;31802:15;31786:12;:31;;6356:3:10;31777:8:55;:68::i;30368:427::-;30532:7;30541:16;30569:20;30592:36;:8;:34;:36::i;:::-;30569:59;;30638:26;30667:78;30708:8;30718:12;30732;30667:40;:78::i;31993:1221::-;32219:7;32228:16;32359:20;32381:18;32403:32;:8;:30;:32::i;:::-;32358:77;;;;32621:60;32643:8;:15;32630:10;:28;5640:3:10;32621:8:55;:60::i;:::-;32768:26;32811:8;:15;32797:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32797:30:55;;32768:59;;32923:241;32976:10;33000:8;33022:10;33046:12;33072;33098:20;33132:22;:20;:22::i;9635:737:58:-;9827:15;;9763:16;;;9827:15;9888:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9888:36:58;;9852:72;;9940:9;9935:397;9959:21;9955:1;:25;9935:397;;;10001:20;10029:13;:11;:13::i;:::-;10024:1;:18;;:30;;10053:1;10024:30;;;10045:1;10049;10045:5;10024:30;10001:53;;10090:48;10125:12;10090:34;:48::i;:::-;:121;;;;10159:17;:51;;;;;10180:30;10197:12;10180:16;:30::i;:::-;10090:231;;10310:8;10319:1;10310:11;;;;;;;;;;;;;;10090:231;;;10230:61;10247:8;10256:1;10247:11;;;;;;;;;;;;;;10260:16;:30;10277:12;10260:30;;;;;;;;;;;;10230:16;:61::i;:::-;10068:16;10085:1;10068:19;;;;;;;;;;;;;;;;;:253;-1:-1:-1;9982:3:58;;9935:397;;;-1:-1:-1;10349:16:58;9635:737;-1:-1:-1;;;;9635:737:58:o;16049:98:59:-;16125:15;16049:98;:::o;15859:100::-;15936:16;15859:100;:::o;6228:2287:60:-;6476:7;7890:41;7917:13;7890:8;7899:12;7890:22;;;;;;;:41;7865:8;7874:12;7865:22;;;;;;;;;;;;;:66;;;;;7942:23;7968:167;8031:22;8067:8;8089:9;8112:13;7968:49;:167::i;:::-;7942:193;;8426:13;8401:8;8410:12;8401:22;;;;;;;;;;;;;;:38;8376:8;8385:12;8376:22;;;;;;;;;;;;;:63;;;;;8457:51;8506:1;8457:44;8485:15;8457:8;8466:13;8457:23;;;;;;;:51;8450:58;;;6228:2287;;;;;;;;;:::o;8733:2295::-;8982:7;10394:43;10422:14;10394:8;10403:13;10394:23;;;;;;;:43;10368:8;10377:13;10368:23;;;;;;;;;;;;;:69;;;;;10448:22;10473:166;10536:22;10572:8;10594:9;10617:12;10473:49;:166::i;:::-;10448:191;;10940:14;10914:8;10923:13;10914:23;;;;;;;;;;;;;;:40;10888:8;10897:13;10888:23;;;;;;;;;;;;;:66;;;;;10972:49;11019:1;10972:42;10991:8;11000:12;10991:22;;;;;;;;;;;;;;10972:14;:18;;:42;;;;:::i;15566:2527::-;15828:7;;;16086:113;16110:8;:15;16106:1;:19;16086:113;;;16160:28;16176:8;16185:1;16176:11;;;;;;;;;;;;;;16160;:15;;:28;;;;:::i;:::-;16146:42;-1:-1:-1;16127:3:60;;16086:113;;;;16282:40;16339:10;:17;16325:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16325:32:60;;16282:75;;16367:33;16419:9;16414:337;16438:8;:15;16434:1;:19;16414:337;;;16474:21;16498:30;16516:11;16498:8;16507:1;16498:11;;;;;;;;;;;;;;:17;;:30;;;;:::i;:::-;16474:54;;16571:49;16608:8;16617:1;16608:11;;;;;;;;;;;;;;16571:30;16587:10;16598:1;16587:13;;;;;;;;;;;;;;16571:8;16580:1;16571:11;;;;;;;:30;:36;;:49::i;:::-;16542:23;16566:1;16542:26;;;;;;;;;;;;;:78;;;;;16662;16692:47;16725:13;16692:23;16716:1;16692:26;;;;;;;;;;;;;;:32;;:47;;;;:::i;:::-;16662:25;;:29;:78::i;:::-;16634:106;-1:-1:-1;;16455:3:60;;16414:337;;;;16864:28;16909:8;:15;16895:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16895:30:60;;16864:61;;16940:9;16935:911;16959:8;:15;16955:1;:19;16935:911;;;17183:24;17253:23;17277:1;17253:26;;;;;;;;;;;;;;17225:25;:54;17221:550;;;17299:24;17326:59;17346:38;:25;:36;:38::i;:::-;17326:8;17335:1;17326:11;;;;;;;:59;17299:86;;17403:21;17427:35;17445:16;17427:10;17438:1;17427:13;;;;;;;:35;17403:59;-1:-1:-1;17608:77:60;17629:55;17403:59;945:4:47;17649:34:60;;;17629:19;:55::i;:::-;17608:16;;:20;:77::i;:::-;17589:96;;17221:550;;;;;17743:10;17754:1;17743:13;;;;;;;;;;;;;;17724:32;;17221:550;17802:33;17818:16;17802:8;17811:1;17802:11;;;;;;;:33;17785:11;17797:1;17785:14;;;;;;;;;;;;;;;;;:50;-1:-1:-1;16976:3:60;;16935:911;;;;17856:20;17879:37;17899:3;17904:11;17879:19;:37::i;:::-;17856:60;-1:-1:-1;17926:22:60;17951:38;17856:60;17972:16;17951:20;:38::i;:::-;17926:63;;18037:49;18058:27;:14;:25;:27::i;:::-;18037:14;;:20;:49::i;18099:1903::-;18380:7;;18471:77;18531:16;18471:53;18509:14;18471:31;18509:14;18490:11;18471:18;:31::i;:53::-;:59;;:77::i;:::-;18448:100;;18603:28;18634:148;18697:3;18714:8;18736:12;18762:10;18634:49;:148::i;:::-;18603:179;;18792:27;18822:46;18847:20;18822:8;18831:10;18822:20;;;;;;;:46;18792:76;;19013:19;19051:9;19046:113;19070:8;:15;19066:1;:19;19046:113;;;19120:28;19136:8;19145:1;19136:11;;;;;;;19120:28;19106:42;-1:-1:-1;19087:3:60;;19046:113;;;;19314:21;19338:41;19367:11;19338:8;19347:10;19338:20;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;19314:65;;19389:25;19417:26;:13;:24;:26::i;:::-;19389:54;-1:-1:-1;19654:21:60;19678:44;:19;19389:54;19678:25;:44::i;:::-;19654:68;-1:-1:-1;19732:24:60;19759:38;:19;19654:68;19759:23;:38::i;:::-;19732:65;-1:-1:-1;19916:79:60;19937:57;:13;945:4:47;19959:34:60;;;19937:21;:57::i;:::-;19916:16;;:20;:79::i;:::-;19909:86;;;;;;;;;;18099:1903;;;;;;;;;:::o;13693:1695::-;13975:7;;14063:78;14124:16;14063:54;14102:14;14063:32;14102:14;14082:12;14063:18;:32::i;:78::-;14040:101;;14196:28;14227:148;14290:3;14307:8;14329:12;14355:10;14227:49;:148::i;:::-;14196:179;;14385:26;14414:46;14439:8;14448:10;14439:20;;;;;;;;;;;;;;14414;:24;;:46;;;;:::i;:::-;14385:75;;14605:19;14643:9;14638:113;14662:8;:15;14658:1;:19;14638:113;;;14712:28;14728:8;14737:1;14728:11;;;;;;;14712:28;14698:42;-1:-1:-1;14679:3:60;;14638:113;;;;14905:21;14929:41;14958:11;14929:8;14938:10;14929:20;;;;;;;:41;14905:65;;14980:25;15008:26;:13;:24;:26::i;:::-;14980:54;-1:-1:-1;15044:21:60;15068:43;:18;14980:54;15068:24;:43::i;:::-;15044:67;-1:-1:-1;15121:24:60;15148:37;:18;15044:67;15148:22;:37::i;:::-;15121:64;-1:-1:-1;15304:77:60;15325:55;:13;945:4:47;15345:34:60;;;15325:19;:55::i;11034:2653::-;11295:7;;;11557:113;11581:8;:15;11577:1;:19;11557:113;;;11631:28;11647:8;11656:1;11647:11;;;;;;;11631:28;11617:42;-1:-1:-1;11598:3:60;;11557:113;;;;11753:37;11807:9;:16;11793:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11793:31:60;;11753:71;;11895:30;11944:9;11939:330;11963:8;:15;11959:1;:19;11939:330;;;11999:21;12023:32;12043:11;12023:8;12032:1;12023:11;;;;;;;:32;11999:56;;12095:50;12133:8;12142:1;12133:11;;;;;;;;;;;;;;12095:29;12111:9;12121:1;12111:12;;;;;;;;;;;;;;12095:8;12104:1;12095:11;;;;;;;:29;:37;;:50::i;:::-;12069:20;12090:1;12069:23;;;;;;;;;;;;;:76;;;;;12184:74;12211:46;12243:13;12211:20;12232:1;12211:23;;;;;;;12184:74;12159:99;-1:-1:-1;;11980:3:60;;11939:330;;;;12382:28;12427:8;:15;12413:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12413:30:60;;12382:61;;12458:9;12453:826;12477:8;:15;12473:1;:19;12453:826;;;12513:26;12680:22;12654:20;12675:1;12654:23;;;;;;;;;;;;;;:48;12650:552;;;12722:24;12749:63;12769:42;:22;945:4:47;12769:26:60;:42::i;12749:63::-;12722:90;;12830:21;12854:34;12871:16;12854:9;12864:1;12854:12;;;;;;;:34;12830:58;-1:-1:-1;13036:79:60;13057:57;12830:58;945:4:47;13079:34:60;;;13057:21;:57::i;13036:79::-;13015:100;;12650:552;;;;;13175:9;13185:1;13175:12;;;;;;;;;;;;;;13154:33;;12650:552;13233:35;13249:18;13233:8;13242:1;13233:11;;;;;;;:35;13216:11;13228:1;13216:14;;;;;;;;;;;;;;;;;:52;-1:-1:-1;12494:3:60;;12453:826;;;;13289:20;13312:37;13332:3;13337:11;13312:19;:37::i;:::-;13289:60;-1:-1:-1;13359:22:60;13384:38;13289:60;13405:16;13384:20;:38::i;:::-;13359:63;;945:4:47;13522:14:60;:31;13518:163;;;13576:55;:14;13599:31;;;13576:22;:55::i;:::-;13569:62;;;;;;;;;;13518:163;13669:1;13662:8;;;;;;;;;;11381:220:58;11467:4;11503:52;11515:39;11503:11;:52::i;:::-;11491:8;:64;11490:104;;;;11560:34;11585:8;11560:24;:34::i;2475:253:1:-;2573:27;2602:22;2684:4;2673:48;;;;;;;;;;;;:::i;:::-;2640:81;;;;-1:-1:-1;2475:253:1;-1:-1:-1;;;2475:253:1:o;2302:167::-;2376:19;2436:4;2425:37;;;;;;;;;;;;:::i;2089:207::-;2162:19;2183:18;2254:4;2243:46;;;;;;;;;;;;:::i;1423:253::-;1521:26;1549:23;1632:4;1621:48;;;;;;;;;;;;:::i;1897:172::-;1974:20;2036:4;2025:37;;;;;;;;;;;;:::i;22225:1259:60:-;22384:16;23211;23230:28;:12;23249:8;23230:18;:28::i;:::-;23211:47;;23269:26;23312:8;:15;23298:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23298:30:60;;23269:59;;23343:9;23338:113;23362:8;:15;23358:1;:19;23338:113;;;23413:27;23431:8;23413;23422:1;23413:11;;;;;;;:27;23398:9;23408:1;23398:12;;;;;;;;;;;;;;;;;:42;23379:3;;23338:113;;;-1:-1:-1;23468:9:60;22225:1259;-1:-1:-1;;;;;22225:1259:60:o;1682:209:1:-;1755:20;1777:18;1849:4;1838:46;;;;;;;;;;;;:::i;10472:188:58:-;10552:7;10578:75;10591:37;10600:7;10609:18;:5;:16;:18::i;10591:37::-;10630:22;:5;:20;:22::i;20136:2083:60:-;20354:7;20410:21;20459:8;:15;20434:22;:40;20410:64;;20484:11;20498:8;20507:1;20498:11;;;;;;;;;;;;;;20484:25;;20519:11;20547:8;:15;20533:8;20542:1;20533:11;;;;;;;;;;;;;;:29;20519:43;;20577:9;20589:1;20577:13;;20572:195;20596:8;:15;20592:1;:19;20572:195;;;20638:78;20651:53;20660:26;20669:3;20674:8;20683:1;20674:11;;;;;;;;;;;;;;20660:8;:26::i;:::-;20688:8;:15;20651:8;:53::i;:::-;20706:9;20638:12;:78::i;:::-;20632:84;;20736:20;20744:8;20753:1;20744:11;;;;;;;20736:20;20730:26;-1:-1:-1;20613:3:60;;20572:195;;;;20906:8;20915:10;20906:20;;;;;;;;;;;;;;20900:3;:26;20894:32;;20937:12;20952:30;20961:9;20972;20952:8;:30::i;:::-;20937:45;;21050:9;21062:138;21084:72;21093:46;21104:4;21110:28;21119:13;21134:3;21110:8;:28::i;21093:46::-;1372:3;21084:8;:72::i;:::-;21170:8;21179:10;21170:20;;;;;;;21062:138;21050:150;;21210:9;21222:73;21230:64;21239:38;21252:9;21263:13;21239:12;:38::i;21230:64::-;21222:3;;:7;:73::i;:::-;21210:85;-1:-1:-1;21348:24:60;;21546:41;21557:11;:4;21566:1;21557:8;:11::i;:::-;21570:16;:9;21584:1;21570:13;:16::i;21546:41::-;21523:64;;21603:9;21598:555;21622:3;21618:1;:7;21598:555;;;21665:12;21646:31;;21707:150;21735:43;21776:1;21735:36;21744:12;21758;21735:8;:36::i;:43::-;21796:47;21833:9;21796:32;21826:1;21796:25;21805:12;21819:1;21796:8;:25::i;21707:150::-;21692:165;;21891:16;21876:12;:31;21872:271;;;21966:1;21946:16;21931:12;:31;:36;21927:102;;-1:-1:-1;21998:12:60;-1:-1:-1;21991:19:60;;-1:-1:-1;;;;;;;21991:19:60;21927:102;21872:271;;;22088:1;22072:12;22053:16;:31;:36;22049:94;;-1:-1:-1;22116:12:60;-1:-1:-1;22109:19:60;;-1:-1:-1;;;;;;;22109:19:60;22049:94;21627:3;;21598:555;;;;22163:49;7828:3:10;22163:7:60;:49::i;:::-;20136:2083;;;;;;;;;;;;;;:::o;8801:341:61:-;8887:4;8935:60;8947:47;8935:11;:60::i;:::-;8923:8;:72;8922:163;;;-1:-1:-1;9025:59:61;9037:46;9025:11;:59::i;:::-;9013:8;:71;8922:163;:213;;;;9101:34;9126:8;12437:4:28;12485:47;12497:34;12485:11;:47::i;:::-;12473:8;:59;12472:143;;;-1:-1:-1;12562:52:28;12574:39;12562:11;:52::i;:::-;12550:8;:64;12472:143;:193;;;-1:-1:-1;2562:4:29;12631:34:28;2494:103:29:o;-1:-1:-1:-;;5:130;72:20;;97:33;72:20;97:33;:::i;1102:707::-;;1219:3;1212:4;1204:6;1200:17;1196:27;1186:2;;-1:-1;;1227:12;1186:2;1274:6;1261:20;1296:80;1311:64;1368:6;1311:64;:::i;:::-;1296:80;:::i;:::-;1404:21;;;1287:89;-1:-1;1448:4;1461:14;;;;1436:17;;;1550;;;1541:27;;;;1538:36;-1:-1;1535:2;;;1587:1;;1577:12;1535:2;1612:1;1597:206;1622:6;1619:1;1616:13;1597:206;;;6197:20;;1690:50;;1754:14;;;;1782;;;;1644:1;1637:9;1597:206;;1835:722;;1963:3;1956:4;1948:6;1944:17;1940:27;1930:2;;-1:-1;;1971:12;1930:2;2011:6;2005:13;2033:80;2048:64;2105:6;2048:64;:::i;2033:80::-;2141:21;;;2024:89;-1:-1;2185:4;2198:14;;;;2173:17;;;2287;;;2278:27;;;;2275:36;-1:-1;2272:2;;;2324:1;;2314:12;2272:2;2349:1;2334:217;2359:6;2356:1;2353:13;2334:217;;;6345:13;;2427:61;;2502:14;;;;2530;;;;2381:1;2374:9;2334:217;;2973:440;;3074:3;3067:4;3059:6;3055:17;3051:27;3041:2;;-1:-1;;3082:12;3041:2;3129:6;3116:20;37830:18;37822:6;37819:30;37816:2;;;-1:-1;;37852:12;37816:2;3151:64;-1:-1;37906:17;;-1:-1;37902:33;37993:4;37983:15;3151:64;:::i;:::-;3142:73;;3235:6;3228:5;3221:21;3339:3;37993:4;3330:6;3263;3321:16;;3318:25;3315:2;;;3356:1;;3346:12;3315:2;42742:6;37993:4;3263:6;3259:17;37993:4;3297:5;3293:16;42719:30;42798:1;42780:16;;;37993:4;42780:16;42773:27;3297:5;3034:379;-1:-1;;3034:379::o;3940:156::-;4029:13;;44243:1;44233:12;;44223:2;;44259:1;;44249:12;4103:156;4192:13;;44355:1;44345:12;;44335:2;;44371:1;;44361:12;4266:156;4346:20;;44469:1;44459:12;;44449:2;;44485:1;;44475:12;6678:241;;6782:2;6770:9;6761:7;6757:23;6753:32;6750:2;;;-1:-1;;6788:12;6750:2;85:6;72:20;97:33;124:5;97:33;:::i;6926:366::-;;;7047:2;7035:9;7026:7;7022:23;7018:32;7015:2;;;-1:-1;;7053:12;7015:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7105:63;-1:-1;7205:2;7244:22;;72:20;97:33;72:20;97:33;:::i;:::-;7213:63;;;;7009:283;;;;;:::o;7299:491::-;;;;7437:2;7425:9;7416:7;7412:23;7408:32;7405:2;;;-1:-1;;7443:12;7405:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7495:63;-1:-1;7595:2;7634:22;;72:20;97:33;72:20;97:33;:::i;:::-;7399:391;;7603:63;;-1:-1;;;7703:2;7742:22;;;;6197:20;;7399:391::o;7797:991::-;;;;;;;;8001:3;7989:9;7980:7;7976:23;7972:33;7969:2;;;-1:-1;;8008:12;7969:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8060:63;-1:-1;8160:2;8199:22;;72:20;97:33;72:20;97:33;:::i;:::-;8168:63;-1:-1;8268:2;8307:22;;6197:20;;-1:-1;8376:2;8415:22;;6197:20;;-1:-1;8484:3;8522:22;;6473:20;6498:31;6473:20;6498:31;:::i;:::-;7963:825;;;;-1:-1;7963:825;;;;8493:61;8591:3;8631:22;;2767:20;;-1:-1;8700:3;8740:22;;;2767:20;;7963:825;-1:-1;;7963:825::o;8795:366::-;;;8916:2;8904:9;8895:7;8891:23;8887:32;8884:2;;;-1:-1;;8922:12;8884:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8974:63;9074:2;9113:22;;;;6197:20;;-1:-1;;;8878:283::o;9168:823::-;;;;9382:2;9370:9;9361:7;9357:23;9353:32;9350:2;;;-1:-1;;9388:12;9350:2;9439:17;9433:24;9477:18;;9469:6;9466:30;9463:2;;;-1:-1;;9499:12;9463:2;9616:6;9605:9;9601:22;;;452:3;445:4;437:6;433:17;429:27;419:2;;-1:-1;;460:12;419:2;500:6;494:13;522:95;537:79;609:6;537:79;:::i;522:95::-;623:16;659:6;652:5;645:21;689:4;;706:3;702:14;695:21;;689:4;681:6;677:17;811:3;689:4;;795:6;791:17;681:6;782:27;;779:36;776:2;;;-1:-1;;818:12;776:2;-1:-1;844:10;;838:232;863:6;860:1;857:13;838:232;;;3868:6;3862:13;3880:48;3922:5;3880:48;:::i;:::-;931:76;;885:1;878:9;;;;;1021:14;;;;1049;;838:232;;;-1:-1;9676:18;;9670:25;9519:114;;-1:-1;9670:25;-1:-1;;;9704:30;;;9701:2;;;-1:-1;;9737:12;9701:2;;9767:89;9848:7;9839:6;9828:9;9824:22;9767:89;:::i;:::-;9757:99;;;9893:2;9947:9;9943:22;6345:13;9901:74;;9344:647;;;;;:::o;9998:257::-;;10110:2;10098:9;10089:7;10085:23;10081:32;10078:2;;;-1:-1;;10116:12;10078:2;2646:6;2640:13;43562:5;40357:13;40350:21;43540:5;43537:32;43527:2;;-1:-1;;43573:12;10262:1235;;;;;;;;10502:3;10490:9;10481:7;10477:23;10473:33;10470:2;;;-1:-1;;10509:12;10470:2;2780:6;2767:20;10561:63;;10661:2;10704:9;10700:22;72:20;97:33;124:5;97:33;:::i;:::-;10669:63;-1:-1;10769:2;10808:22;;72:20;97:33;72:20;97:33;:::i;:::-;10777:63;-1:-1;10905:2;10890:18;;10877:32;10929:18;10918:30;;;10915:2;;;-1:-1;;10951:12;10915:2;10981:78;11051:7;11042:6;11031:9;11027:22;10981:78;:::i;:::-;10971:88;;11096:3;11140:9;11136:22;6197:20;11105:63;;11205:3;11249:9;11245:22;6197:20;11214:63;;11342:3;11331:9;11327:19;11314:33;11300:47;;10929:18;11359:6;11356:30;11353:2;;;-1:-1;;11389:12;11353:2;;11419:62;11473:7;11464:6;11453:9;11449:22;11419:62;:::i;:::-;11409:72;;;10464:1033;;;;;;;;;;:::o;11504:239::-;;11607:2;11595:9;11586:7;11582:23;11578:32;11575:2;;;-1:-1;;11613:12;11575:2;2916:6;2903:20;40534:66;43808:5;40523:78;43784:5;43781:34;43771:2;;-1:-1;;43819:12;11750:303;;11885:2;11873:9;11864:7;11860:23;11856:32;11853:2;;;-1:-1;;11891:12;11853:2;3525:6;3519:13;3537:53;3584:5;3537:53;:::i;12338:500::-;;;12483:2;12471:9;12462:7;12458:23;12454:32;12451:2;;;-1:-1;;12489:12;12451:2;3697:6;3684:20;3709:48;3751:5;3709:48;:::i;:::-;12541:78;-1:-1;12684:2;12669:18;;12656:32;12708:18;12697:30;;12694:2;;;-1:-1;;12730:12;12694:2;12760:62;12814:7;12805:6;12794:9;12790:22;12760:62;:::i;:::-;12750:72;;;12445:393;;;;;:::o;13248:285::-;;13374:2;13362:9;13353:7;13349:23;13345:32;13342:2;;;-1:-1;;13380:12;13342:2;13442:75;13509:7;13485:22;13442:75;:::i;13540:686::-;;;;13725:2;13713:9;13704:7;13700:23;13696:32;13693:2;;;-1:-1;;13731:12;13693:2;13793:75;13860:7;13836:22;13793:75;:::i;:::-;13783:85;;13926:2;13915:9;13911:18;13905:25;13950:18;13942:6;13939:30;13936:2;;;-1:-1;;13972:12;13936:2;14002:89;14083:7;14074:6;14063:9;14059:22;14002:89;:::i;14233:421::-;;;14376:2;14364:9;14355:7;14351:23;14347:32;14344:2;;;-1:-1;;14382:12;14344:2;14444:75;14511:7;14487:22;14444:75;:::i;:::-;14434:85;;14556:2;14610:9;14606:22;6345:13;14564:74;;14338:316;;;;;:::o;14661:557::-;;;;14821:2;14809:9;14800:7;14796:23;14792:32;14789:2;;;-1:-1;;14827:12;14789:2;14889:75;14956:7;14932:22;14889:75;:::i;:::-;14879:85;;15001:2;15055:9;15051:22;6345:13;15009:74;;15120:2;15174:9;15170:22;6345:13;15128:74;;14783:435;;;;;:::o;15225:285::-;;15351:2;15339:9;15330:7;15326:23;15322:32;15319:2;;;-1:-1;;15357:12;15319:2;15419:75;15486:7;15462:22;15419:75;:::i;15517:550::-;;;15685:2;15673:9;15664:7;15660:23;15656:32;15653:2;;;-1:-1;;15691:12;15653:2;15753:75;15820:7;15796:22;15753:75;:::i;:::-;15743:85;;15886:2;15875:9;15871:18;15865:25;15910:18;15902:6;15899:30;15896:2;;;-1:-1;;15932:12;15896:2;15962:89;16043:7;16034:6;16023:9;16019:22;15962:89;:::i;16074:686::-;;;;16259:2;16247:9;16238:7;16234:23;16230:32;16227:2;;;-1:-1;;16265:12;16227:2;16327:75;16394:7;16370:22;16327:75;:::i;16767:421::-;;;16910:2;16898:9;16889:7;16885:23;16881:32;16878:2;;;-1:-1;;16916:12;16878:2;16978:75;17045:7;17021:22;16978:75;:::i;17195:557::-;;;;17355:2;17343:9;17334:7;17330:23;17326:32;17323:2;;;-1:-1;;17361:12;17323:2;17423:75;17490:7;17466:22;17423:75;:::i;17759:897::-;;;;;17968:3;17956:9;17947:7;17943:23;17939:33;17936:2;;;-1:-1;;17975:12;17936:2;18033:17;18020:31;18071:18;;18063:6;18060:30;18057:2;;;-1:-1;;18093:12;18057:2;18188:6;18177:9;18173:22;;;4589:6;;4577:9;4572:3;4568:19;4564:32;4561:2;;;-1:-1;;4599:12;4561:2;4627:22;4589:6;4627:22;:::i;:::-;4618:31;;4731:62;4789:3;4765:22;4731:62;:::i;:::-;4713:16;4706:88;4891:64;4951:3;4858:2;4931:9;4927:22;4891:64;:::i;:::-;4858:2;4877:5;4873:16;4866:90;5054:64;5114:3;5021:2;5094:9;5090:22;5054:64;:::i;:::-;5021:2;5040:5;5036:16;5029:90;5182:2;5240:9;5236:22;6197:20;5182:2;5201:5;5197:16;5190:75;17968:3;5387:9;5383:22;2767:20;17968:3;5348:5;5344:16;5337:75;5484:3;5543:9;5539:22;6197:20;5484:3;5504:5;5500:16;5493:75;5663:49;5708:3;5629;5688:9;5684:22;5663:49;:::i;:::-;5629:3;5649:5;5645:16;5638:75;5806:49;5851:3;5772;5831:9;5827:22;5806:49;:::i;:::-;5772:3;5792:5;5788:16;5781:75;5949:3;;5938:9;5934:19;5921:33;18071:18;5966:6;5963:30;5960:2;;;-1:-1;;5996:12;5960:2;6043:58;6097:3;6088:6;6077:9;6073:22;6043:58;:::i;:::-;5949:3;6027:5;6023:18;6016:86;;;18113:92;;;;4858:2;18259:9;18255:18;18242:32;18228:46;;18071:18;18286:6;18283:30;18280:2;;;-1:-1;;18316:12;18280:2;;18346:78;18416:7;18407:6;18396:9;18392:22;18346:78;:::i;:::-;17930:726;;18336:88;;-1:-1;;;;5021:2;18500:22;;6197:20;;5182:2;18608:22;6197:20;;17930:726;-1:-1;17930:726::o;18663:241::-;;18767:2;18755:9;18746:7;18742:23;18738:32;18735:2;;;-1:-1;;18773:12;18735:2;-1:-1;6197:20;;18729:175;-1:-1;18729:175::o;18911:263::-;;19026:2;19014:9;19005:7;19001:23;18997:32;18994:2;;;-1:-1;;19032:12;18994:2;-1:-1;6345:13;;18988:186;-1:-1;18988:186::o;19181:366::-;;;19302:2;19290:9;19281:7;19277:23;19273:32;19270:2;;;-1:-1;;19308:12;19270:2;-1:-1;;6197:20;;;19460:2;19499:22;;;6197:20;;-1:-1;19264:283::o;19554:672::-;;;;;19720:3;19708:9;19699:7;19695:23;19691:33;19688:2;;;-1:-1;;19727:12;19688:2;6351:6;6345:13;19779:74;;19890:2;19944:9;19940:22;6345:13;19898:74;;20009:2;20063:9;20059:22;6345:13;20017:74;;20128:2;20182:9;20178:22;220:13;238:33;265:5;238:33;:::i;:::-;19682:544;;;;-1:-1;19682:544;;-1:-1;;19682:544::o;20233:259::-;;20346:2;20334:9;20325:7;20321:23;20317:32;20314:2;;;-1:-1;;20352:12;20314:2;6623:6;6617:13;6635:31;6660:5;6635:31;:::i;20499:395::-;;;20629:2;20617:9;20608:7;20604:23;20600:32;20597:2;;;-1:-1;;20635:12;20597:2;6623:6;6617:13;6635:31;6660:5;6635:31;:::i;:::-;20796:2;20846:22;;;;6345:13;20687:72;;6345:13;;-1:-1;;;20591:303::o;22307:690::-;;22500:5;38476:12;39300:6;39295:3;39288:19;39337:4;;39332:3;39328:14;22512:93;;39337:4;22676:5;38151:14;-1:-1;22715:260;22740:6;22737:1;22734:13;22715:260;;;22801:13;;23187:37;;21279:14;;;;39028;;;;22762:1;22755:9;22715:260;;;-1:-1;22981:10;;22431:566;-1:-1;;;;;22431:566::o;23891:343::-;;24033:5;38476:12;39300:6;39295:3;39288:19;-1:-1;42887:101;42901:6;42898:1;42895:13;42887:101;;;39337:4;42968:11;;;;;42962:18;42949:11;;;;;42942:39;42916:10;42887:101;;;43003:6;43000:1;42997:13;42994:2;;;-1:-1;39337:4;43059:6;39332:3;43050:16;;43043:27;42994:2;-1:-1;43340:2;43320:14;-1:-1;;43316:28;24190:39;;;;39337:4;24190:39;;23981:253;-1:-1;;23981:253::o;26205:387::-;23187:37;;;40534:66;40523:78;26456:2;26447:12;;23482:56;26556:11;;;26347:245::o;26599:291::-;;42742:6;42737:3;42732;42719:30;42780:16;;42773:27;;;42780:16;26743:147;-1:-1;26743:147::o;26897:659::-;25750:66;25730:87;;25715:1;25836:11;;23187:37;;;;27408:12;;;23187:37;27519:12;;;27142:414::o;27563:222::-;-1:-1;;;;;40906:54;;;;21378:37;;27690:2;27675:18;;27661:124::o;27792:412::-;27990:2;28004:47;;;38476:12;;27975:18;;;39288:19;;;27792:412;;27990:2;38151:14;;;;39328;;;;27792:412;21944:302;21969:6;21966:1;21963:13;21944:302;;;22030:13;;-1:-1;;;;;40906:54;24332:70;;39028:14;;;;21097;;;;-1:-1;21984:9;21944:302;;;-1:-1;28057:137;;27961:243;-1:-1;;;;;;27961:243::o;28211:370::-;;28388:2;28409:17;28402:47;28463:108;28388:2;28377:9;28373:18;28557:6;28463:108;:::i;28588:629::-;;28843:2;28864:17;28857:47;28918:108;28843:2;28832:9;28828:18;29012:6;28918:108;:::i;:::-;29074:9;29068:4;29064:20;29059:2;29048:9;29044:18;29037:48;29099:108;29202:4;29193:6;29099:108;:::i;29224:210::-;40357:13;;40350:21;23070:34;;29345:2;29330:18;;29316:118::o;29441:432::-;40357:13;;40350:21;23070:34;;29776:2;29761:18;;23187:37;;;;29859:2;29844:18;;23187:37;29618:2;29603:18;;29589:284::o;29880:222::-;23187:37;;;30007:2;29992:18;;29978:124::o;30109:444::-;23187:37;;;-1:-1;;;;;40906:54;;;30456:2;30441:18;;21378:37;40906:54;30539:2;30524:18;;21378:37;30292:2;30277:18;;30263:290::o;30560:780::-;23187:37;;;-1:-1;;;;;40906:54;;;30992:2;30977:18;;21378:37;40906:54;;;;31075:2;31060:18;;21378:37;31158:2;31143:18;;23187:37;31241:3;31226:19;;23187:37;;;;-1:-1;31310:19;;23187:37;30827:3;30812:19;;30798:542::o;31347:668::-;23187:37;;;31751:2;31736:18;;23187:37;;;;31834:2;31819:18;;23187:37;;;;31917:2;31902:18;;23187:37;-1:-1;;;;;40906:54;32000:3;31985:19;;21378:37;-1:-1;31571:19;;31557:458::o;32022:417::-;;23217:5;23194:3;23187:37;32195:2;32313;32302:9;32298:18;32291:48;32353:76;32195:2;32184:9;32180:18;32415:6;32353:76;:::i;32446:363::-;23187:37;;;-1:-1;;;;;40906:54;32795:2;32780:18;;24332:70;32616:2;32601:18;;32587:222::o;32816:548::-;23187:37;;;41122:4;41111:16;;;;33184:2;33169:18;;26158:35;33267:2;33252:18;;23187:37;33350:2;33335:18;;23187:37;33023:3;33008:19;;32994:370::o;34190:310::-;;34337:2;34358:17;34351:47;34412:78;34337:2;34326:9;34322:18;34476:6;34412:78;:::i;34736:481::-;;23217:5;23194:3;23187:37;34941:2;35059;35048:9;35044:18;35037:48;35099:108;34941:2;34930:9;34926:18;35193:6;35099:108;:::i;35224:432::-;23187:37;;;40357:13;;40350:21;35559:2;35544:18;;23070:34;35642:2;35627:18;;23187:37;35401:2;35386:18;;35372:284::o;35663:333::-;23187:37;;;35982:2;35967:18;;23187:37;35818:2;35803:18;;35789:207::o;36003:556::-;23187:37;;;36379:2;36364:18;;23187:37;;;;36462:2;36447:18;;23187:37;36545:2;36530:18;;23187:37;36214:3;36199:19;;36185:374::o;36566:214::-;41122:4;41111:16;;;;26158:35;;36689:2;36674:18;;36660:120::o;36787:256::-;36849:2;36843:9;36875:17;;;36950:18;36935:34;;36971:22;;;36932:62;36929:2;;;37007:1;;36997:12;36929:2;36849;37016:22;36827:216;;-1:-1;36827:216::o;37050:319::-;;37224:18;37216:6;37213:30;37210:2;;;-1:-1;;37246:12;37210:2;-1:-1;37291:4;37279:17;;;37344:15;;37147:222::o;43357:117::-;-1:-1;;;;;40906:54;;43416:35;;43406:2;;43465:1;;43455:12;44625:113;41122:4;44708:5;41111:16;44685:5;44682:33;44672:2;;44729:1;;44719:12" + }, + "methodIdentifiers": { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": "ddf4627b", + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getActualSupply()": "876f303b", + "getAmplificationParameter()": "6daccffa", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getLastJoinExitData()": "3c975d51", + "getMinimumBpt()": "04842d4c", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeePercentageCache(uint256)": "70464016", + "getProtocolFeesCollector()": "d2946c2b", + "getProtocolSwapFeeDelegation()": "15b0015b", + "getRate()": "679aefce", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getTokenRate(address)": "54dea00a", + "getTokenRateCache(address)": "7f1260d1", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": "01ec954a", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "setTokenRateCacheDuration(address,uint256)": "f4b7964d", + "startAmplificationParameterUpdate(uint256,uint256)": "2f1a0bc9", + "stopAmplificationParameterUpdate()": "eb0f24d6", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a", + "updateProtocolFeePercentageCache()": "0da0669c", + "updateTokenRateCache(address)": "2df2c7c0", + "version()": "54fd4d50" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeePercentagesProvider\",\"name\":\"protocolFeeProvider\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRateCacheDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"exemptFromYieldProtocolFeeFlags\",\"type\":\"bool[]\"},{\"internalType\":\"uint256\",\"name\":\"amplificationParameter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"internalType\":\"struct ComposableStablePool.NewPoolParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentValue\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeePercentageCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"TokenRateCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRateProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cacheDuration\",\"type\":\"uint256\"}],\"name\":\"TokenRateProviderSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActualSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmplificationParameter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isUpdating\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"precision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastJoinExitData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastJoinExitAmplification\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitInvariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBpt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getProtocolFeePercentageCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolSwapFeeDelegation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRateCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expires\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IPoolSwapStructs.SwapRequest\",\"name\":\"swapRequest\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setTokenRateCacheDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rawEndValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"startAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateProtocolFeePercentageCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateTokenRateCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"StablePool with preminted BPT and rate providers for each token, allowing for e.g. wrapped tokens with a known price ratio, such as Compound's cTokens. BPT is preminted on Pool initialization and registered as one of the Pool's tokens, allowing for swaps to behave as single-token joins or exits (by swapping a token for BPT). We also support regular joins and exits, which can mint and burn BPT. Preminted BPT is deposited in the Vault as the initial balance of the Pool, and doesn't belong to any entity until transferred out of the Pool. The Pool's arithmetic behaves as if it didn't exist, and the BPT total supply is not a useful value: we rely on the 'virtual supply' (how much BPT is actually owned outside the Vault) instead.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getActualSupply()\":{\"details\":\"Returns the effective BPT supply. In other pools, this would be the same as `totalSupply`, but there are two key differences here: - this pool pre-mints BPT and holds it in the Vault as a token, and as such we need to subtract the Vault's balance to get the total \\\"circulating supply\\\". This is called the 'virtualSupply'. - the Pool owes debt to the Protocol in the form of unminted BPT, which will be minted immediately before the next join or exit. We need to take these into account since, even if they don't yet exist, they will effectively be included in any Pool operation that involves BPT. In the vast majority of cases, this function should be used instead of `totalSupply()`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getMinimumBpt()\":{\"details\":\"This amount is minted and immediately burned on pool initialization, so that the total supply (and therefore post-exit token balances), can never be zero. This keeps the math well-behaved when liquidity is low. (It also provides an easy way to check whether a pool has been initialized, to ensure this is only done once.)\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeePercentageCache(uint256)\":{\"details\":\"Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the ProtocolFeePercentagesProvider.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getProtocolSwapFeeDelegation()\":{\"details\":\"Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider.\"},\"getRate()\":{\"details\":\"This function returns the appreciation of BPT relative to the underlying tokens, as an 18 decimal fixed point number. It is simply the ratio of the invariant to the BPT supply. The total supply is initialized to equal the invariant, so this value starts at one. During Pool operation the invariant always grows and shrinks either proportionally to the total supply (in scenarios with no price impact, e.g. proportional joins), or grows faster and shrinks more slowly than it (whenever swap fees are collected or the token rates increase). Therefore, the rate is a monotonically increasing function. WARNING: since this function reads balances directly from the Vault, it is potentially subject to manipulation via reentrancy. However, this can only happen if one of the tokens in the Pool contains some form of callback behavior in the `transferFrom` function (like ERC777 tokens do). These tokens are strictly incompatible with the Vault and Pool design, and are not safe to be used.\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"getTokenRate(address)\":{\"details\":\"Returns the rate for a given token. All token rates are fixed-point values with 18 decimals. If there is no rate provider for the provided token, it returns FixedPoint.ONE.\"},\"getTokenRateCache(address)\":{\"details\":\"Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate provider.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"setTokenRateCacheDuration(address,uint256)\":{\"details\":\"Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. Note this function also updates the current cached value.\",\"params\":{\"duration\":\"Number of seconds until the current token rate is fetched again.\"}},\"startAmplificationParameterUpdate(uint256,uint256)\":{\"details\":\"Begin changing the amplification parameter to `rawEndValue` over time. The value will change linearly until `endTime` is reached, when it will be `rawEndValue`. NOTE: Internally, the amplification parameter is represented using higher precision. The values returned by `getAmplificationParameter` have to be corrected to account for this when comparing to `rawEndValue`.\"},\"stopAmplificationParameterUpdate()\":{\"details\":\"Stops the amplification parameter change process, keeping the current value.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"},\"updateProtocolFeePercentageCache()\":{\"details\":\"Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated). Updates the cache to the latest value set by governance.\"},\"updateTokenRateCache(address)\":{\"details\":\"Forces a rate cache hit for a token. It will revert if the requested token does not have an associated rate provider.\"},\"version()\":{\"details\":\"Returns a JSON representation of the contract version containing name, version number and task ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getLastJoinExitData()\":{\"notice\":\"Return the amplification factor and invariant as of the most recent join or exit (including BPT swaps)\"},\"getMinimumBpt()\":{\"notice\":\"Return the minimum BPT balance, required to avoid minimum token balances.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ComposableStablePool.sol\":\"ComposableStablePool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol\":{\"keccak256\":\"0x809d1ab36b1c4190aeffd3bad9c8a54880a9524c679e770ef185323dafaf6833\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a7d7e901eafecae0f4a8829bbb952cda0928f55290d368ab1370c92284d1469\",\"dweb:/ipfs/QmWDpNu8sZEwK3nmetwoaXrASta5RWqGZb7Z4TqHnMu7a1\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\":{\"keccak256\":\"0x19103ec3d00cbdbe25ef95721ba669cfcfaf046a60447a1b49986026e61fc57c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6765d86f532928df96af43990b5bccd20a0d2965707cb5e9d5afda9580be3fe4\",\"dweb:/ipfs/QmZmhVpWcGpFk9u4iy4srKs248c9FdAzjjmdMATexpqa6j\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\":{\"keccak256\":\"0x7f11733a5cd8f81c123c02f79d94ead7b65217021ebddafda10e796a25e1ef41\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7333060b9ff67e1fe734903d45b0c69ff8308b744f7c2fb8fbf630ae9d589bd6\",\"dweb:/ipfs/Qmf4rZHqsjfKDk5cSp38fv24SS8bAYJxYYQzn63TV6aPCo\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol\":{\"keccak256\":\"0xcd8cfa91f7e0c2bdbe1dceb37caddf211ce411e51de567594434da9ad2edc5e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58db2ea702a5eb370172402784e7e260337b61d1f8d5338142a1bde1b6718c4d\",\"dweb:/ipfs/QmZBogEchmaq3CEadrFidyWczyyuLT987wjZRHwAb6nPWg\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":{\"keccak256\":\"0x65f93b8bac780e69e0ec41db98645323401686649dc61f9fa24d015d11084dfe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46b2c14982f82375159bb984548fd3bf4764972dd5cc0b2d40de82d0f3ccd28f\",\"dweb:/ipfs/QmPYfeoLCDwwDE6TDNRrnSQWniMgwuZSNJQ2Ycm3uRuBPs\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":{\"keccak256\":\"0x81972e1a01bb50f6ebed2d0aaeea8044f59adfd3b08dc17233919b28c41e838b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://385cc839791c8db486aa8b53cd0791f98786e88379f981b898b163f0f4a68e37\",\"dweb:/ipfs/QmP6SNqUMKtwgQUXuZzQAmUjxVKvojudz7fRFBzhcXqGdp\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePool.sol\":{\"keccak256\":\"0x33631e52895167c71319b8f2590a1255db7001d76357b5f653369ae03a139789\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9ec51134aa4526891bb985d13f6291aa77f6ff5a87b877ece740fff4236790f2\",\"dweb:/ipfs/QmWZvDES1o9jJmbb7REBigcnCJk7N9MvEnw7KEH1BaSRCD\"]},\"contracts/ComposableStablePoolProtocolFees.sol\":{\"keccak256\":\"0x71f593c69691edcea6b6debecc9c0629676033f4eadb3a059b1f7286cacf812e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f4952f66e9a2e1c60573e3cef1e340ee067aa28fae2be88f39ef1f48afc96c8e\",\"dweb:/ipfs/QmP6sKJV93SQYoPuxJRAhasxMPzuXz2G2PeA6DRhuThLFE\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/StablePoolAmplification.sol\":{\"keccak256\":\"0x35131a0fda0168332354ea2da753a595cedcdbc2663b83281fb86adbd10e2b15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c4a52f1ed61716bf879e3d232c47060196602de456fced19722bd38e2c967dc\",\"dweb:/ipfs/QmStzAS76tvSSvbofjV8EB9VrbcF7h8DwygTZGpuqzAavm\"]}},\"version\":1}" + } + }, + "contracts/ComposableStablePoolFactory.sol": { + "ComposableStablePoolFactory": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "protocolFeeProvider", + "type": "address" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "poolVersion", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + }, + { + "internalType": "contract IRateProvider[]", + "name": "rateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "contract ComposableStablePool", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCreationCodeContracts", + "outputs": [ + { + "internalType": "address", + "name": "contractA", + "type": "address" + }, + { + "internalType": "address", + "name": "contractB", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseConfiguration", + "outputs": [ + { + "internalType": "uint256", + "name": "pauseWindowDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodDuration", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolVersion", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeePercentagesProvider", + "outputs": [ + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6101806040523480156200001257600080fd5b50604051620097243803806200972483398101604081905262000035916200036d565b83836040518060200162000049906200021c565b601f1982820381018352601f90910116604052805183903090839060006002820460a081905280830360e08190528185529091508362000095816200013d602090811b6200067c17901c565b60601b6001600160601b0319166080528285018051838252620000c4826200013d602090811b6200067c17901c565b6001600160601b0319606091821b811660c05296909352905261010095909552505092821b831661012052509290921b909116610140525050426276a700016101605281516200011c9060029060208501906200022a565b508051620001329060039060208401906200022a565b505050505062000415565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506200018b6001600160a01b03831615156101ac62000191565b50919050565b81620001a257620001a281620001a6565b5050565b620001b8816210905360ea1b620001bb565b50565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b617ff3806200173183390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029d57825182559160200191906001019062000280565b50620002ab929150620002af565b5090565b5b80821115620002ab5760008155600101620002b0565b600082601f830112620002d7578081fd5b81516001600160401b0380821115620002ee578283fd5b6040516020601f8401601f191682018101838111838210171562000310578586fd5b806040525081945083825286818588010111156200032d57600080fd5b600092505b8383101562000351578583018101518284018201529182019162000332565b83831115620003635760008185840101525b5050505092915050565b6000806000806080858703121562000383578384fd5b84516200039081620003ff565b6020860151909450620003a381620003ff565b60408601519093506001600160401b0380821115620003c0578384fd5b620003ce88838901620002c6565b93506060870151915080821115620003e4578283fd5b50620003f387828801620002c6565b91505092959194509250565b6001600160a01b0381168114620001b857600080fd5b60805160601c60a05160c05160601c60e051610100516101205160601c6101405160601c610160516112a36200048e60003980610232528061025b52508061055d5250806105d35250806105835250806106e3525080610209528061075f5250806107045250806101e8528061073b52506112a36000f3fe608060405234801561001057600080fd5b50600436106100de5760003560e01c80636634b7531161008c578063739238d611610066578063739238d61461018f578063851c1bb3146101975780638d928af8146101b7578063aaabadc5146101bf576100de565b80636634b7531461014757806366b59f6c146101675780636c57f5a914610187576100de565b80632f2770db116100bd5780632f2770db1461012d5780633f819b6f1461013757806354fd4d501461013f576100de565b8062c194db146100e3578063174481fa146101015780632da47c4014610117575b600080fd5b6100eb6101c7565b6040516100f89190611050565b60405180910390f35b6101096101e6565b6040516100f8929190610fe9565b61011f61022c565b6040516100f89291906111e8565b610135610296565b005b6100eb6102fb565b6100eb6103af565b61015a610155366004610cdd565b61042b565b6040516100f89190611010565b61017a610175366004610d71565b610456565b6040516100f89190611063565b61015a610552565b61017a61055b565b6101aa6101a5366004610d15565b61057f565b6040516100f8919061101b565b61017a6105d1565b61017a6105f5565b60606101e1604051806020016040528060008152506106db565b905090565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009091565b600080427f000000000000000000000000000000000000000000000000000000000000000081101561028857807f000000000000000000000000000000000000000000000000000000000000000003925062278d009150610291565b60009250600091505b509091565b61029e6107b4565b6102a66107fd565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790556040517f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d5090600090a1565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b5050505050905090565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600080600061046361022c565b91509150610542604051806101c0016040528061047e6105d1565b73ffffffffffffffffffffffffffffffffffffffff1681526020016104a161055b565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018a81526020018981526020018881526020018b81526020018781526020018481526020018381526020018673ffffffffffffffffffffffffffffffffffffffff16815260200161051c6102fb565b905260405161052e9190602001611084565b604051602081830303815290604052610812565b9c9b505050505050505050505050565b60015460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016105b4929190610fb9565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105ff6105d1565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e19190610d55565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506106d573ffffffffffffffffffffffffffffffffffffffff831615156101ac6108a6565b50919050565b8051604080517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000818101858101848101602090810190965280855293957f00000000000000000000000000000000000000000000000000000000000000009592947f000000000000000000000000000000000000000000000000000000000000000094938801866000828a3c846000888301883c50602089810190898501016107a68183866108b8565b505050505050505050919050565b60006107e36000357fffffffff000000000000000000000000000000000000000000000000000000001661057f565b90506107fa6107f28233610932565b6101916108a6565b50565b610810610808610552565b1560d36108a6565b565b600061081c6107fd565b6000610827836109d1565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555192935090917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a292915050565b816108b4576108b481610a19565b5050565b5b602081106108f65781518352602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016108b9565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b600061093c6105f5565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161097893929190611024565b60206040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190610cf9565b90505b92915050565b600060606109de836106db565b905060008151602083016000f0905073ffffffffffffffffffffffffffffffffffffffff8116610a12573d6000803e3d6000fd5b9392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818106603090810160081b83860601918390049283060160101b016642414c230000300160c81b6044526107fa917f42414c0000000000000000000000000000000000000000000000000000000000906242414c90606490fd5b80356109cb8161123d565b600082601f830112610ac3578081fd5b8135610ad6610ad18261121d565b6111f6565b818152915060208083019084810181840286018201871015610af757600080fd5b60005b84811015610b1f578135610b0d8161125f565b84529282019290820190600101610afa565b505050505092915050565b600082601f830112610b3a578081fd5b8135610b48610ad18261121d565b818152915060208083019084810181840286018201871015610b6957600080fd5b60005b84811015610b1f578135610b7f8161123d565b84529282019290820190600101610b6c565b600082601f830112610ba1578081fd5b8135610baf610ad18261121d565b818152915060208083019084810181840286018201871015610bd057600080fd5b60005b84811015610b1f578135610be68161123d565b84529282019290820190600101610bd3565b600082601f830112610c08578081fd5b8135610c16610ad18261121d565b818152915060208083019084810181840286018201871015610c3757600080fd5b60005b84811015610b1f57813584529282019290820190600101610c3a565b600082601f830112610c66578081fd5b813567ffffffffffffffff811115610c7c578182fd5b610cad60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016111f6565b9150808252836020828501011115610cc457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610cee578081fd5b8135610a128161123d565b600060208284031215610d0a578081fd5b8151610a128161125f565b600060208284031215610d26578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a12578182fd5b600060208284031215610d66578081fd5b8151610a128161123d565b60008060008060008060008060006101208a8c031215610d8f578485fd5b893567ffffffffffffffff80821115610da6578687fd5b610db28d838e01610c56565b9a5060208c0135915080821115610dc7578687fd5b610dd38d838e01610c56565b995060408c0135915080821115610de8578687fd5b610df48d838e01610b2a565b985060608c0135975060808c0135915080821115610e10578687fd5b610e1c8d838e01610b91565b965060a08c0135915080821115610e31578586fd5b610e3d8d838e01610bf8565b955060c08c0135915080821115610e52578485fd5b50610e5f8c828d01610ab3565b93505060e08a01359150610e778b6101008c01610aa8565b90509295985092959850929598565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208085019450808401835b83811015610ed1578151151587529582019590820190600101610eb3565b509495945050505050565b6000815180845260208085019450808401835b83811015610ed157815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610eef565b6000815180845260208085019450808401835b83811015610ed157815187529582019590820190600101610f34565b60008151808452815b81811015610f7557602081850181015186830182015201610f59565b81811115610f865782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b6000602082526109c86020830184610f50565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060208252611098602083018451610e86565b60208301516110aa6040840182610e86565b5060408301516101c08060608501526110c76101e0850183610f50565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030160808701526111038483610f50565b935060808701519150808685030160a08701526111208483610edc565b935060a08701519150808685030160c087015261113d8483610edc565b935060c08701519150808685030160e087015261115a8483610f21565b935060e087015191506101008187860301818801526111798584610ea0565b908801516101208881019190915288015161014080890191909152880151610160808901919091528801516101808089019190915288015190945091506101a06111c581880184610e86565b8701518685039091018387015290506111de8382610f50565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561121557600080fd5b604052919050565b600067ffffffffffffffff821115611233578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff811681146107fa57600080fd5b80151581146107fa57600080fdfea2646970667358221220139c11f5919330a49b431e9ec65da6abcaecfa2895b17cea9c855010670ff62c64736f6c634300070100336105006040523480156200001257600080fd5b5060405162007ff338038062007ff3833981016040819052620000359162001b55565b6020810151600019620000488362000d93565b620000538462000dcc565b8461010001518560000151600087604001518860600151620000808a608001513062000e1560201b60201c565b8a60800151516001016001600160401b03811180156200009f57600080fd5b50604051908082528060200260200182016040528015620000ca578160200160208202803683370190505b508b61012001518c61014001518d61016001518e6101800151828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200012c929190620017f2565b50805162000142906004906020840190620017f2565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001c090506276a70083111561019462000faf565b620001d462278d0082111561019562000faf565b4290910161014081905201610160528551620001f6906002111560c862000faf565b620002106200020462000fc4565b8751111560c962000faf565b620002268662000fc960201b6200154e1760201c565b620002318462000fd5565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f9062000262908d9060040162001ddb565b602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062001b1d565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002ed9084908b908b9060040162001d3f565b600060405180830381600087803b1580156200030857600080fd5b505af11580156200031d573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036457600080fd5b505afa15801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f919062001b36565b60601b6001600160601b0319166101a05250620003d1995050506001891015965061012c955062000faf945050505050565b620003e461138882111561012d62000faf565b6000620003ff826103e86200106960201b620015581760201c565b90506200040c8162001098565b5050805151620004216002821160c862000faf565b6200044660018203836020015151846040015151620010d760201b620015831760201c565b6101c0819052815180516000906200045a57fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200049157fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004c857fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620004fe57600062000517565b8151805160039081106200050e57fe5b60200260200101515b60601b6001600160601b03191661026052600481116200053957600062000552565b8151805160049081106200054957fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005745760006200058d565b8151805160059081106200058457fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005c69190600090620005b257fe5b6020026020010151620010f760201b60201c565b6102c05281518051620005e091906001908110620005b257fe5b6102e05281518051620005fa91906002908110620005b257fe5b61030052600381116200060f57600062000625565b620006258260000151600381518110620005b257fe5b61032052600481116200063a57600062000650565b620006508260000151600481518110620005b257fe5b6103405260058111620006655760006200067b565b6200067b8260000151600581518110620005b257fe5b61036052815151600019015b600081118015620006b857508251805130919083908110620006a557fe5b60200260200101516001600160a01b0316115b15620006c8576000190162000687565b6101e08190528251516060906001600160401b0381118015620006ea57600080fd5b5060405190808252806020026020018201604052801562000715578160200160208202803683370190505b50905060008080805b8751518110156200093857858110156200085457876020015181815181106200074357fe5b60200260200101518582815181106200075857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007c160006001600160a01b03168683815181106200079457fe5b60200260200101516001600160a01b031614158260060186620011c660201b620015a0179092919060201c565b935087604001518181518110620007d457fe5b60200260200101511562000849576200082060006001600160a01b0316868381518110620007fe57fe5b60200260200101516001600160a01b0316141561015562000faf60201b60201c565b6200083d60018286620011c660201b620015a0179092919060201c565b9350600192506200084e565b600191505b6200092f565b8581146200092f57876020015160018203815181106200087057fe5b60200260200101518582815181106200088557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008c160006001600160a01b03168683815181106200079457fe5b935087604001516001820381518110620008d757fe5b6020026020010151156200092a576200090160006001600160a01b0316868381518110620007fe57fe5b6200091e60018286620011c660201b620015a0179092919060201c565b9350600192506200092f565b600191505b6001016200071e565b50811560f890811b610460528115901b61048052835184906000906200095a57fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200098d57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009c057fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003845111620009f757600062000a0e565b8360038151811062000a0557fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a3157600062000a48565b8360048151811062000a3f57fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a6b57600062000a82565b8360058151811062000a7957fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000ac595509293509190620010d7811b6200158317901c565b805160609062000ad6903062000e15565b8051909150600019015b60008111801562000b165750306001600160a01b031682828151811062000b0357fe5b60200260200101516001600160a01b0316115b1562000b26576000190162000ae0565b6000805b84515181101562000c3f578281141562000b4357600191505b60208501518051828401916000918490811062000b5c57fe5b60200260200101516001600160a01b03161462000c355762000bb6818760200151848151811062000b8957fe5b60200260200101518860400151858151811062000ba257fe5b6020026020010151620011ef60201b60201c565b8560200151828151811062000bc757fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000c0b57fe5b602002602001015160405162000c22919062001df0565b60405180910390a362000c3581620012ea565b5060010162000b2a565b5050505050600019811460f881901b6104c0526001600160601b0319606084901b166104a05262000c7283600262001329565b62000c7f83600362001329565b801562000c995762000c9383600062001329565b62000d58565b60405163178b2b9360e21b815262000d2d906001600160a01b03851690635e2cae4c9062000ccd9060009060040162001df0565b60206040518083038186803b15801562000ce657600080fd5b505afa15801562000cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d21919062001b1d565b83111561025862000faf565b600060008051602062007fd38339815191528360405162000d4f919062001df0565b60405180910390a25b8062000d65578162000d68565b60005b6104e0525050506101a0810151805162000d8b91600d91602090910190620017f2565b505062001e62565b62000d9d62001873565b6040518060600160405280836080015181526020018360a0015181526020018360c0015181525090505b919050565b62000dd662001873565b604051806060016040528062000df784608001513062000e1560201b60201c565b81526020018360a0015181526020018360e001518152509050919050565b606082516001016001600160401b038111801562000e3257600080fd5b5060405190808252806020026020018201604052801562000e5d578160200160208202803683370190505b50905082516000141562000ea057818160008151811062000e7a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000fa9565b82515b60008111801562000edc5750826001600160a01b031684600183038151811062000ec957fe5b60200260200101516001600160a01b0316115b1562000f295783600182038151811062000ef257fe5b602002602001015182828151811062000f0757fe5b6001600160a01b03909216602092830291909101909101526000190162000ea3565b60005b8181101562000f785784818151811062000f4257fe5b602002602001015183828151811062000f5757fe5b6001600160a01b039092166020928302919091019091015260010162000f2c565b508282828151811062000f8757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000fc05762000fc081620014d4565b5050565b600690565b8062000fc081620014e9565b62000fee62000fe362001570565b82101560cb62000faf565b6200100762000ffc62001579565b82111560ca62000faf565b620010298160c0603f6008546200158560201b620015c717909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200105e90839062001df0565b60405180910390a150565b600082820262001091841580620010895750838583816200108657fe5b04145b600362000faf565b9392505050565b620010a681804280620015aa565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516200105e919062001df0565b620010f28284148015620010ea57508183145b606762000faf565b505050565b60006001600160a01b0382163014156200111b5750670de0b6b3a764000062000dc7565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200115757600080fd5b505afa1580156200116c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001192919062001d1c565b60ff1690506000620011b16012836200161d60201b620015ef1760201c565b600a0a670de0b6b3a764000002949350505050565b60006001821b1984168284620011de576000620011e1565b60015b60ff16901b17949350505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200122b57600080fd5b505afa15801562001240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001266919062001b1d565b6000858152600a602090815260409091205491925062001295908290849086906200160562001635821b17901c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620012db90859062001df0565b60405180910390a25050505050565b6000818152600a602090815260409091205490620013139082906200163d62001691821b17901c565b6000928352600a60205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200135a90859060040162001df0565b60206040518083038186803b1580156200137357600080fd5b505afa15801562001388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ae919062001b1d565b905081620013f257620013cc81620016bc60201b620016551760201c565b600b80546001600160401b0319166001600160401b0392909216919091179055620014a6565b600282141562001448576200141281620016bc60201b620016551760201c565b600b80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620014a6565b600382141562001499576200146881620016bc60201b620016551760201c565b600b80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620014a6565b620014a66101bb620014d4565b8160008051602062007fd383398151915282604051620014c7919062001df0565b60405180910390a2505050565b620014e6816210905360ea1b620016da565b50565b600281511015620014fa57620014e6565b6000816000815181106200150a57fe5b602002602001015190506000600190505b8251811015620010f25760008382815181106200153457fe5b6020026020010151905062001565816001600160a01b0316846001600160a01b031610606562000faf60201b60201c565b91506001016200151b565b64e8d4a5100090565b67016345785d8a000090565b6000620015948484846200173b565b506001901b60001901811b1992909216911b1790565b620015c48160c060406200179660201b620016721760201c565b620015de83608060406200179660201b620016721760201c565b620015f7856040806200179660201b620016721760201c565b6200161187600060406200179660201b620016721760201c565b17171760095550505050565b60006200162f83831115600162000faf565b50900390565b60006200164a606084901c1561014962000faf565b6200168942830160e06020620016738660c083838c8c60006060620015c762001585871b17861c565b6200158560201b620015c717909392919060201c565b949350505050565b600062000fa9620016a283620017ab565b606080856200158560201b620015c717909392919060201c565b6000620016d66001600160401b038311156101ba62000faf565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6200174c6101008310606462000faf565b62001785600182101580156200177d57506200177960ff8461010003620017cb60201b620016851760201c565b8211155b606462000faf565b620010f283821c156101b462000faf565b6000620017a58484846200173b565b50501b90565b600062000fa96000606084620017e360201b6200169b179092919060201c565b6000818310620017dc578162001091565b5090919050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200183557805160ff191683800117855562001865565b8280016001018555821562001865579182015b828111156200186557825182559160200191906001019062001848565b50620016d692915062001894565b60405180606001604052806060815260200160608152602001606081525090565b5b80821115620016d6576000815560010162001895565b805162000fa98162001e4c565b600082601f830112620018c9578081fd5b8151620018e0620018da8262001e20565b62001df9565b8181529150602080830190848101818402860182018710156200190257600080fd5b6000805b858110156200193257825180151581146200191f578283fd5b8552938301939183019160010162001906565b50505050505092915050565b600082601f8301126200194f578081fd5b815162001960620018da8262001e20565b8181529150602080830190848101818402860182018710156200198257600080fd5b60005b84811015620019ae5781516200199b8162001e4c565b8452928201929082019060010162001985565b505050505092915050565b600082601f830112620019ca578081fd5b8151620019db620018da8262001e20565b818152915060208083019084810181840286018201871015620019fd57600080fd5b60005b84811015620019ae57815162001a168162001e4c565b8452928201929082019060010162001a00565b600082601f83011262001a3a578081fd5b815162001a4b620018da8262001e20565b81815291506020808301908481018184028601820187101562001a6d57600080fd5b60005b84811015620019ae5781518452928201929082019060010162001a70565b600082601f83011262001a9f578081fd5b81516001600160401b0381111562001ab5578182fd5b602062001acb601f8301601f1916820162001df9565b9250818352848183860101111562001ae257600080fd5b60005b8281101562001b0257848101820151848201830152810162001ae5565b8281111562001b145760008284860101525b50505092915050565b60006020828403121562001b2f578081fd5b5051919050565b60006020828403121562001b48578081fd5b8151620010918162001e4c565b60006020828403121562001b67578081fd5b81516001600160401b038082111562001b7e578283fd5b81840191506101c080838703121562001b95578384fd5b62001ba08162001df9565b905062001bae8684620018ab565b815262001bbf8660208501620018ab565b602082015260408301518281111562001bd6578485fd5b62001be48782860162001a8e565b60408301525060608301518281111562001bfc578485fd5b62001c0a8782860162001a8e565b60608301525060808301518281111562001c22578485fd5b62001c30878286016200193e565b60808301525060a08301518281111562001c48578485fd5b62001c5687828601620019b9565b60a08301525060c08301518281111562001c6e578485fd5b62001c7c8782860162001a29565b60c08301525060e08301518281111562001c94578485fd5b62001ca287828601620018b8565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018062001ce587828601620018ab565b908201526101a0838101518381111562001cfd578586fd5b62001d0b8882870162001a8e565b918301919091525095945050505050565b60006020828403121562001d2e578081fd5b815160ff8116811462001091578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001d8b5762001d78855162001e40565b8352938301939183019160010162001d63565b505084810360408601528551808252908201925081860190845b8181101562001dcd5762001dba835162001e40565b8552938301939183019160010162001da5565b509298975050505050505050565b602081016003831062001dea57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001e1857600080fd5b604052919050565b60006001600160401b0382111562001e36578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620014e657600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6104a05160601c6104c05160f81c6104e051615fb36200202060003980610e2552508061090a52508061088a52806108b552806108e05250806147a9525080614785525080612b3c52806143fe525080611c5c525080611c2c525080611bfc525080611bcc525080611b9c525080611b6c525080612fcc525080612f9c525080612f6c525080612f3c525080612f0c525080612edc525080611eb9525080611e77525080611e35525080611df3525080611db1525080611d6f52508061104e5250806116ca525080611279525080610be4525080611b40525080611b1c52508061114e52508061112a525080611086525080612d4a525080612d8c525080612d6b5250615fb36000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806370464016116101d3578063a457c2d711610104578063d505accf116100a2578063ddf4627b1161007c578063ddf4627b146106e3578063eb0f24d6146106eb578063ed24911d146106f3578063f4b7964d146106fb57610378565b8063d505accf146106aa578063d5c096c4146106bd578063dd62ed3e146106d057610378565b8063ab7759f1116100de578063ab7759f11461067f578063b35056b814610692578063b7b814fc1461069a578063d2946c2b146106a257610378565b8063a457c2d714610651578063a9059cbb14610664578063aaabadc51461067757610378565b8063851c1bb311610171578063893d20e81161014b578063893d20e8146106195780638d928af81461062e57806390193b7c1461063657806395d89b411461064957610378565b8063851c1bb3146105eb578063876f303b146105fe57806387ec68171461060657610378565b80637ecebe00116101ad5780637ecebe00146105a55780637f1260d1146105b857806382687a56146105db5780638456cb59146105e357610378565b8063704640161461055e57806370a082311461057157806374f3b0091461058457610378565b80633644e515116102ad57806354a844ba1161024b57806355c676281161022557806355c67628146105165780636028bfd41461051e578063679aefce1461053f5780636daccffa1461054757610378565b806354a844ba146104f357806354dea00a146104fb57806354fd4d501461050e57610378565b8063395093511161028757806339509351146104af5780633c975d51146104c25780633f4ba83a146104d857806350dd6ed9146104e057610378565b80633644e5151461048c57806338e9922e1461049457806338fff2d0146104a757610378565b80631c0de0511161031a57806323b872dd116102f457806323b872dd1461043e5780632df2c7c0146104515780632f1a0bc914610464578063313ce5671461047757610378565b80631c0de051146103fd5780631dd746ea14610414578063238a2d591461042957610378565b8063095ea7b311610356578063095ea7b3146103c35780630da0669c146103e357806315b0015b146103ed57806318160ddd146103f557610378565b806301ec954a1461037d57806304842d4c146103a657806306fdde03146103ae575b600080fd5b61039061038b366004615a13565b61070e565b60405161039d9190615dc3565b60405180910390f35b6103906107b4565b6103b66107c3565b60405161039d9190615e99565b6103d66103d1366004615638565b610859565b60405161039d9190615da0565b6103eb610870565b005b6103d6610908565b61039061092c565b610405610932565b60405161039d93929190615dab565b61041c61095b565b60405161039d9190615d68565b610431610965565b60405161039d9190615d1b565b6103d661044c366004615588565b610a00565b6103eb61045f366004615534565b610a74565b6103eb610472366004615b62565b610ad0565b61047f610bb3565b60405161039d9190615f04565b610390610bbc565b6103eb6104a2366004615b32565b610bc6565b610390610be2565b6103d66104bd366004615638565b610c06565b6104ca610c41565b60405161039d929190615edb565b6103eb610c6c565b6103eb6104ee36600461584e565b610c7e565b6103eb610c9c565b610390610509366004615534565b610cae565b6103b6610cc9565b610390610d2a565b61053161052c36600461574f565b610d3d565b60405161039d929190615eac565b610390610d74565b61054f610de0565b60405161039d93929190615ec5565b61039061056c366004615b32565b610dfb565b61039061057f366004615534565b610ec1565b61059761059236600461574f565b610edc565b60405161039d929190615d7b565b6103906105b3366004615534565b610fdf565b6105cb6105c6366004615534565b610fea565b60405161039d9493929190615ee9565b61039061104c565b6103eb611070565b6103906105f93660046157f2565b611082565b6103906110d4565b61053161061436600461574f565b611102565b610621611128565b60405161039d9190615d07565b61062161114c565b610390610644366004615534565b611170565b6103b661118b565b6103d661065f366004615638565b6111ec565b6103d6610672366004615638565b61122a565b610621611237565b6103d661068d366004615534565b611241565b6103d6611254565b6103eb611265565b610621611277565b6103eb6106b83660046155c8565b61129b565b6105976106cb36600461574f565b611326565b6103906106de366004615550565b611449565b610390611486565b6103eb61148c565b6103906114b8565b6103eb610709366004615638565b6114c2565b6000846080015161073b61072061114c565b6001600160a01b0316336001600160a01b03161460cd6116aa565b610750610746610be2565b82146101f46116aa565b6107586116b8565b61076a84846107656116c8565b6116ec565b6060610774611704565b905060008751600181111561078557fe5b1461079c57610797878787878561179d565b6107a9565b6107a987878787856117f6565b979650505050505050565b60006107be611831565b905090565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b6000610866338484611838565b5060015b92915050565b6108786118a0565b610880610908565b156108b0576108b07f0000000000000000000000000000000000000000000000000000000000000000600061190d565b6108db7f0000000000000000000000000000000000000000000000000000000000000000600261190d565b6109067f0000000000000000000000000000000000000000000000000000000000000000600361190d565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b600080600061093f611afd565b15925061094a611b1a565b9150610954611b3e565b9050909192565b60606107be611704565b606060006109716116c8565b905060608167ffffffffffffffff8111801561098c57600080fd5b506040519080825280602002602001820160405280156109b6578160200160208202803683370190505b50905060005b828110156109f9576109cd81611b62565b8282815181106109d957fe5b6001600160a01b03909216602092830291909101909101526001016109bc565b5091505090565b600080610a0d8533611449565b9050610a31336001600160a01b0387161480610a295750838210155b61019e6116aa565b610a3c858585611c8b565b336001600160a01b03861614801590610a5757506000198114155b15610a6957610a698533858403611838565b506001949350505050565b6000610a7f82611d6b565b90506000610a8c82611b62565b9050610aa56001600160a01b03821615156101556116aa565b6000828152600a6020526040812054610abd90611ef9565b9050610aca838383611f08565b50505050565b610ad8611feb565b610ae8600183101561012c6116aa565b610af961138883111561012d6116aa565b6000610b0582426115ef565b9050610b196201518082101561013d6116aa565b600080610b24612031565b91509150610b35811561013e6116aa565b6000610b43866103e8611558565b90506000838211610b7257610b6d610b5e6201518086611558565b610b688488611558565b6120a5565b610b8c565b610b8c610b826201518084611558565b610b688688611558565b9050610b9e600282111561013f6116aa565b610baa848342896120d8565b50505050505050565b60055460ff1690565b60006107be6114b8565b610bce611feb565b610bd6612127565b610bdf8161213a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610866918590610c3c90866121b3565b611838565b600c546000908190610c568160e9601761169b565b9250610c6581600060e961169b565b9150509091565b610c74611feb565b61090660006121c5565b610c86611feb565b610c8e612127565b610c988282612256565b5050565b610ca4611feb565b6109066001612364565b6000610cc1610cbc83611d6b565b6123bb565b90505b919050565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6008546000906107be9060c0603f61169b565b60006060610d538651610d4e6116c8565b61240e565b610d688989898989898961241b61243d6124a6565b97509795505050505050565b60006060600080600080610d8661263d565b9398509196509450925090506000610d9e85856121b3565b90506000610daa612031565b5090506000848214610dc557610dc0828961272d565b610dc7565b835b9050610dd3818461288f565b9850505050505050505090565b6000806000610ded612031565b90949093506103e892509050565b6000610e05611254565b15610e1257506000610cc4565b81610e5e57610e1f610908565b610e49577f0000000000000000000000000000000000000000000000000000000000000000610e57565b600b5467ffffffffffffffff165b9050610cc4565b6002821415610e865750600b5468010000000000000000900467ffffffffffffffff16610cc4565b6003821415610eb65750600b54700100000000000000000000000000000000900467ffffffffffffffff16610cc4565b610cc46101bb6128e0565b6001600160a01b031660009081526020819052604090205490565b60608088610eeb61072061114c565b610ef6610746610be2565b60606000610f038661290a565b15610f2b57610f10612939565b610f2289610f1c61092c565b8861294c565b92509050610f7d565b610f336116b8565b6060610f3d611704565b9050610f498a82612990565b610f6d8d8d8d8d8d610f59611254565b610f63578d610f66565b60005b878e61241b565b93509150610f7b838261243d565b505b610f878b826129f9565b81895167ffffffffffffffff81118015610fa057600080fd5b50604051908082528060200260200182016040528015610fca578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610cc182611170565b6000806000806000600a6000610fff88611d6b565b815260208101919091526040016000205490506110208115156101556116aa565b61102981612a03565b945061103481612a11565b935061103f81612a1f565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611078611feb565b61090660016121c5565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016110b7929190615c91565b604051602081830303815290604052805190602001209050919050565b60008060006110e161263d565b505092509250506110fb81836121b390919063ffffffff16565b9250505090565b600060606111138651610d4e6116c8565b610d6889898989898989612a41612a526124a6565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6000806111f93385611449565b90508083106112135761120e33856000611838565b611220565b6112203385858403611838565b5060019392505050565b6000610866338484611c8b565b60006107be612abb565b6000610cc161124f83611d6b565b612b35565b6008546000906107be9060ff612b5d565b61126d611feb565b6109066000612364565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112ca8c611170565b896040516020016112e096959493929190615deb565b6040516020818303038152906040528051906020012090506113118882611308878787612b67565b886101f8612ba6565b61131c888888611838565b5050505050505050565b6060808861133561072061114c565b611340610746610be2565b6113486116b8565b6060611352611704565b905061135c61092c565b61140957600060606113718d8d8d868b612bfd565b9150915061138a611380611831565b83101560cc6116aa565b61139c6000611397611831565b612cd6565b6113af8b6113a8611831565b8403612cd6565b6113b98184612a52565b808a5167ffffffffffffffff811180156113d257600080fd5b506040519080825280602002602001820160405280156113fc578160200160208202803683370190505b5095509550505050610fd2565b6114138882612990565b6000606061143b8d8d8d8d8d611427611254565b611431578d611434565b60005b898e612a41565b915091506113af8b83612cd6565b600061145361114c565b6001600160a01b0316826001600160a01b03161415611475575060001961086a565b61147f8383612ce0565b905061086a565b60001981565b611494611feb565b60008061149f612031565b915091506114af816101406116aa565b610c9882612d0b565b60006107be612d46565b6114ca611feb565b60006114d583611d6b565b905060006114e282611b62565b90506114fb6001600160a01b03821615156101556116aa565b611506828285611f08565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516115409190615dc3565b60405180910390a350505050565b80610c9881612de3565b600082820261157c84158061157557508385838161157257fe5b04145b60036116aa565b9392505050565b61159b828414801561159457508183145b60676116aa565b505050565b60006001821b19841682846115b65760006115b9565b60015b60ff16901b17949350505050565b60006115d4848484612e5c565b5082821b6000196001831b01831b198516175b949350505050565b60006115ff8383111560016116aa565b50900390565b6000611618606084901c156101496116aa565b6115e742830160e060206116358660c083838c8c600060606115c7565b9291906115c7565b6000610cc161164b83612a03565b83906060806115c7565b600061166e67ffffffffffffffff8311156101ba6116aa565b5090565b600061167f848484612e5c565b50501b90565b6000818310611694578161157c565b5090919050565b6001901b6000190191901c1690565b81610c9857610c98816128e0565b6116c0612ea2565b610906612eaa565b7f000000000000000000000000000000000000000000000000000000000000000090565b61159b81841080156116fd57508183105b60646116aa565b606060006117106116c8565b905060608167ffffffffffffffff8111801561172b57600080fd5b50604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b828110156109f95761177e61176f826123bb565b61177883612ed2565b90612ff0565b82828151811061178a57fe5b602090810291909101015260010161175b565b60208501516000906001600160a01b03163014806117c7575060408601516001600160a01b031630145b6117dd576117d8868686868661301c565b6117ea565b6117ea8686868686613086565b90505b95945050505050565b60208501516000906001600160a01b0316301480611820575060408601516001600160a01b031630145b6117dd576117d8868686868661318a565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611893908590615dc3565b60405180910390a3505050565b6118a8612127565b606060008060006118b761263d565b94509450945050935060008311156118d2576118d2836131e1565b60006118dc612031565b50905060008382146118f7576118f2828761272d565b6118f9565b825b905061190582826131f2565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611955908590600401615dc3565b60206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190615b4a565b9050816119f3576119b581611655565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611ac0565b6002821415611a5057611a0581611655565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611ac0565b6003821415611ab557611a6281611655565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611ac0565b611ac06101bb6128e0565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611af09190615dc3565b60405180910390a2505050565b6000611b07611b3e565b4211806107be57505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611b9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415611bc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415611bf057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415611c2057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415611c5057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b610cc46101356128e0565b611ca26001600160a01b03841615156101986116aa565b611cb96001600160a01b03831615156101996116aa565b611cc483838361159b565b6001600160a01b038316600090815260208190526040902054611cea90826101a0613218565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d1990826121b3565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611893908590615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611daf57506000610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611df157506001610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e3357506002610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e7557506003610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611eb757506004610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c8057506005610cc4565b6000610cc18260c0602061169b565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615b4a565b6000858152600a6020526040902054909150611f98818385611605565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611fdc908590615dc3565b60405180910390a25050505050565b600061201a6000357fffffffff0000000000000000000000000000000000000000000000000000000016611082565b9050610bdf612029823361322e565b6101916116aa565b600080600080600080612042613317565b93509350935093508042101561209557600194508383111561207957818103824203858503028161206f57fe5b0484019550612090565b818103824203848603028161208a57fe5b04840395505b61209d565b600094508295505b505050509091565b60006120b482151560046116aa565b826120c15750600061086a565b8160018403816120cd57fe5b04600101905061086a565b6120e484848484613376565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516121199493929190615ee9565b60405180910390a150505050565b610906612132611afd565b6101926116aa565b61214f6121456133b5565b82101560cb6116aa565b61216461215a6133be565b82111560ca6116aa565b600854612175908260c0603f6115c7565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906121a8908390615dc3565b60405180910390a150565b600082820161157c84821015836116aa565b80156121e5576121e06121d6611b1a565b42106101936116aa565b6121fa565b6121fa6121f0611b3e565b42106101a96116aa565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906121a8908390615da0565b6000612260610be2565b9050600061226c61114c565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401612299929190615e64565b60806040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615b83565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250612336915085908790600401615e4b565b600060405180830381600087803b15801561235057600080fd5b505af115801561131c573d6000803e3d6000fd5b600854612373908260ff6115a0565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906123a6908390615da0565b60405180910390a180610bdf57610bdf6133ca565b60006123c561104c565b8214156123db5750670de0b6b3a7640000610cc4565b6000828152600a602052604090205480156123fe576123f981612a03565b61157c565b670de0b6b3a76400009392505050565b610c9881831460676116aa565b6000606061242c600088868661349c565b915091509850989650505050505050565b8151815161244c90829061240e565b60005b81811015610aca5761248784828151811061246657fe5b602002602001015184838151811061247a57fe5b602002602001015161288f565b84828151811061249357fe5b602090810291909101015260010161244f565b333014612595576000306001600160a01b03166000366040516124ca929190615cc1565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050806000811461251b57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612577573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61259d6116b8565b60606125a7611704565b90506125b38782612990565b600060606125cb8c8c8c8c8c8c898d8d63ffffffff16565b915091506125dd81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6060600080600080606061264f61114c565b6001600160a01b031663f94d4668612665610be2565b6040518263ffffffff1660e01b81526004016126819190615dc3565b60006040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190615663565b509150506126ea816126e5611704565b612990565b6126f38161354a565b965094506000612701610c41565b90945090506000612713888684613583565b945090506127218782613610565b95505050509091929394565b80516000908190815b8181101561276e5761276485828151811061274d57fe5b6020026020010151846121b390919063ffffffff16565b9250600101612736565b508161277f5760009250505061086a565b600082868302825b60ff811015612878578260005b868110156127d5576127cb6127a98387611558565b6127c68c84815181106127b857fe5b60200260200101518a611558565b613628565b9150600101612794565b5083945061282e61280d6128076127ec848a611558565b6128016127f9888d611558565b6103e8613628565b906121b3565b86611558565b6127c661281d8960010185611558565b6128016127f96103e889038a611558565b93508484111561285657600185850311612851578397505050505050505061086a565b61286f565b60018486031161286f578397505050505050505061086a565b50600101612787565b506128846101416128e0565b505050505092915050565b600061289e82151560046116aa565b826128ab5750600061086a565b670de0b6b3a7640000838102906128ce908583816128c557fe5b041460056116aa565b8281816128d757fe5b0491505061086a565b610bdf817f42414c0000000000000000000000000000000000000000000000000000000000613648565b6000808251118015610cc1575060ff80168280602001905181019061292f9190615bc3565b60ff161492915050565b610906612944611254565b6101b66116aa565b600060606000606061295d8761354a565b91509150600060606129708385896136c3565b91509150816129808260006136ef565b9550955050505050935093915050565b8151815161299f90829061240e565b60005b81811015610aca576129da8482815181106129b957fe5b60200260200101518483815181106129cd57fe5b6020026020010151612ff0565b8482815181106129e657fe5b60209081029190910101526001016129a2565b610c9882826137ac565b6000610cc18282606061169b565b6000610cc18260608061169b565b600080612a2b83611ef9565b9150612a3a8360e0602061169b565b9050915091565b6000606061242c600188868661349c565b81518151612a6190829061240e565b60005b81811015610aca57612a9c848281518110612a7b57fe5b6020026020010151848381518110612a8f57fe5b6020026020010151613878565b848281518110612aa857fe5b6020908102919091010152600101612a64565b6000612ac561114c565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190615832565b6000610cc17f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612bb1856138c6565b9050612bc7612bc18783876138e2565b836116aa565b612bd6428410156101b86116aa565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612c0c84613991565b9050612c276000826003811115612c1f57fe5b1460ce6116aa565b6060612c32856139a7565b9050612c408151875161240e565b612c4a8187612990565b6000612c54612031565b5090506060612c62836139bd565b90506000612c70838361272d565b9050806000612c8d6d8000000000000000000000000000836115ef565b9050612c998d82612cd6565b8086612ca361104c565b81518110612cad57fe5b602002602001018181525050612cc385846131f2565b509c939b50929950505050505050505050565b610c988282613a5f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612d1781824242613376565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516121a89190615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612db3613aec565b30604051602001612dc8959493929190615e1f565b60405160208183030381529060405280519060200120905090565b600281511015612df257610bdf565b600081600081518110612e0157fe5b602002602001015190506000600190505b825181101561159b576000838281518110612e2957fe5b60200260200101519050612e52816001600160a01b0316846001600160a01b03161060656116aa565b9150600101612e12565b612e6b610100831060646116aa565b612e93600182101580156116fd5750612e8960ff8461010003611685565b82111560646116aa565b61159b83821c156101b46116aa565b610906612127565b6000612eb46116c8565b905060005b81811015610c9857612eca81613af0565b600101612eb9565b600081612f0057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415612f3057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415612f6057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415612f9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415612fc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b600082820261300a84158061157557508385838161157257fe5b670de0b6b3a764000090049392505050565b60006130288583612990565b613049866060015183858151811061303c57fe5b6020026020010151613b44565b6060870152600061305c87878787613b50565b905061307b8184878151811061306e57fe5b6020026020010151613b64565b90506107a981613b70565b600080808751600181111561309757fe5b1490506130a48684612990565b6130c4876060015184836130b857866130ba565b875b8151811061303c57fe5b876060018181525050600060606000806130dd8a613b8c565b93509350935093506000806130f061104c565b8a1461311657613111878e60600151876131098e613bf5565b888b89613c2a565b613131565b613131878e60600151876131298f613bf5565b888b89613c63565b915091506131428486858985613c87565b8661315c57613157828a8d8151811061306e57fe5b613179565b613179828a8c8151811061316c57fe5b6020026020010151613d07565b9d9c50505050505050505050505050565b60006131998660600151613d13565b60608701526131a88583612990565b6131bc866060015183868151811061303c57fe5b606087015260006131cf87878787613d34565b90506107a98184868151811061316c57fe5b610bdf6131ec611277565b82612cd6565b6131ff81600060e9611672565b61320c8360e96017611672565b17600c55610c98613d48565b600061322784841115836116aa565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61324d611128565b6001600160a01b031614158015613268575061326883613d7e565b1561329057613275611128565b6001600160a01b0316336001600160a01b031614905061086a565b613298612abb565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016132c793929190615dcc565b60206040518083038186803b1580156132df57600080fd5b505afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f919061572f565b6000806000806133366000604060095461169b9092919063ffffffff16565b6009549094506133489060408061169b565b60095490935061335b906080604061169b565b60095490925061336e9060c0604061169b565b905090919293565b6133838160c06040611672565b6133908360806040611672565b61339c85604080611672565b6133a98760006040611672565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b60606133d461114c565b6001600160a01b031663f94d46686133ea610be2565b6040518263ffffffff1660e01b81526004016134069190615dc3565b60006040518083038186803b15801561341e57600080fd5b505afa158015613432573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261345a9190810190615663565b5091505061346a816126e5611704565b6060613475826139bd565b90506000613481612031565b5090506000613490828461272d565b9050610aca82826131f2565b60006060600060606000806134b089613b8c565b93509350935093506153d08a6134c857613d896134cc565b613e1e5b9050600060606134e4868689878f8f8963ffffffff16565b915091506153d08d6134f8576115ef6134fc565b6121b35b9050613509878383613e9c565b600061351989858463ffffffff16565b90506135288789888c85613c87565b836135348460006136ef565b9a509a5050505050505050505094509492505050565b600060606135718361355a61104c565b8151811061356457fe5b6020026020010151613f10565b61357a846139bd565b91509150915091565b60008060008060006135958888613f24565b92509250925060008684116135ab5760006135af565b8684035b905060008484116135c15760006135c5565b8484035b905060006135e06135d66000610dfb565b611778858761288f565b905060006135fb6135f16002610dfb565b611778858861288f565b919091019b939a509298505050505050505050565b600061157c61361f8484611558565b6127c684613fa6565b600061363782151560046116aa565b81838161364057fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000606060006136d284613fcc565b905060606136e1878784613fe2565b919791965090945050505050565b6060825160010167ffffffffffffffff8111801561370c57600080fd5b50604051908082528060200260200182016040528015613736578160200160208202803683370190505b50905060005b81518110156137a55761374d61104c565b8114613784578361375c61104c565b821061376b576001820361376d565b815b8151811061377757fe5b6020026020010151613786565b825b82828151811061379257fe5b602090810291909101015260010161373c565b5092915050565b6137c36001600160a01b038316151561019b6116aa565b6137cf8260008361159b565b6001600160a01b0382166000908152602081905260409020546137f590826101b2613218565b6001600160a01b0383166000908152602081905260409020556138286138238261381d61092c565b90614091565b61409f565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386c9190615dc3565b60405180910390a35050565b600061388782151560046116aa565b826138945750600061086a565b670de0b6b3a7640000838102906138ae908583816128c557fe5b8260018203816138ba57fe5b0460010191505061086a565b60006138d0612d46565b826040516020016110b7929190615cd1565b60006138f482516041146101b96116aa565b60208281015160408085015160608601518251600080825295019283905292939092811a9160019061392d908990859088908890615e7b565b6020604051602081039080840390855afa15801561394f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906139855750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610cc1919061595d565b60608180602001905181019061157c9190615978565b606080600183510367ffffffffffffffff811180156139db57600080fd5b50604051908082528060200260200182016040528015613a05578160200160208202803683370190505b50905060005b81518110156137a55783613a1d61104c565b8210613a2c5781600101613a2e565b815b81518110613a3857fe5b6020026020010151828281518110613a4c57fe5b6020908102919091010152600101613a0b565b613a6b6000838361159b565b613a7a6138238261280161092c565b6001600160a01b038216600090815260208190526040902054613a9d90826121b3565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061386c908590615dc3565b4690565b613af861104c565b811415613b0457610bdf565b6000818152600a60205260409020548015610c9857600080613b2583612a1f565b9150915080421115610aca57610aca84613b3e86611b62565b84611f08565b600061157c8383612ff0565b60006117ed600086606001518686866140a4565b600061157c8383613878565b6000610cc1613b85613b80610d2a565b613fa6565b8390613878565b60006060600080600080613b9e610c41565b91509150600060606000613bb38a8686614116565b9250925092506000613bc3612031565b5090506000868214613bde57613bd9828561272d565b613be0565b825b949c939b509099509297509095505050505050565b6000613c0c613c0261104c565b83141560646116aa565b613c1461104c565b821061166e57613c258260016115ef565b610cc1565b60008088613c4557613c4088888888888861416e565b613c53565b613c53888888888888614245565b9150915097509795505050505050565b60008088613c7957613c408888888888886142a6565b613c5388888888888861430c565b6000613c93868661272d565b90506000613ca1838561288f565b90506000613caf8683612ff0565b905080831115613cfd578083036000613cd9613cd383613cce84610dfb565b611558565b86613628565b90508015613cfa576000613ced8783613610565b9050613cf8816131e1565b505b50505b61131c88846131f2565b600061157c838361288f565b600080613d28613d21610d2a565b84906143bb565b905061157c83826115ef565b60006117ed600186606001518686866140a4565b6000613d526116c8565b905060005b81811015610c9857613d68816143f7565b15613d7657613d7681614426565b600101613d57565b6000610cc182614454565b600060606000613d988461445f565b90506001816002811115613da857fe5b1415613dc657613dbc87878a8c8989614475565b9250925050613e13565b6002816002811115613dd457fe5b1415613de557613dbc878a866144d4565b6000816002811115613df357fe5b1415613e0657613dbc87878a8c886144f2565b613e116101506128e0565b505b965096945050505050565b600060606000613e2d84613991565b90506001816003811115613e3d57fe5b1415613e5157613dbc87878a8c8989614593565b6003816003811115613e5f57fe5b1415613e7057613dbc878a866145e2565b6002816003811115613e7e57fe5b1415613e9157613dbc87878a8c88614600565b613e116101366128e0565b82518251613eab90829061240e565b60005b81811015613f0957613eea858281518110613ec557fe5b6020026020010151858381518110613ed957fe5b60200260200101518563ffffffff16565b858281518110613ef657fe5b6020908102919091010152600101613eae565b5050505050565b6000610cc182613f1e61092c565b906115ef565b6000806000613f3d84613f3887600161467a565b61272d565b9250613f47614783565b15613f6057613f56848661272d565b9150819050613f9f565b613f686147a7565b15613f8157829150613f7a848661272d565b9050613f9f565b613f9084613f3887600061467a565b9150613f9c848661272d565b90505b9250925092565b6000670de0b6b3a76400008210613fbe576000610cc1565b50670de0b6b3a76400000390565b60008180602001905181019061157c9190615bdf565b60606000613ff0838561288f565b9050845167ffffffffffffffff8111801561400a57600080fd5b50604051908082528060200260200182016040528015614034578160200160208202803683370190505b50915060005b8551811015614088576140698287838151811061405357fe5b6020026020010151612ff090919063ffffffff16565b83828151811061407557fe5b602090810291909101015260010161403a565b50509392505050565b600061157c83836001613218565b600255565b600060606140b1856139bd565b905060006140be85613bf5565b905060006140cb85613bf5565b905060006140d7612031565b50905060006140e6828661272d565b90508a15614108576140fc828686868e866147cb565b955050505050506117ed565b6140fc828686868e86614856565b6000606060008060606141288861354a565b9150915060008061413a838a8a613583565b91509150600061414a8584613610565b9050801561415b5761415b816131e1565b9390930199919850919650945050505050565b6000806060875167ffffffffffffffff8111801561418b57600080fd5b506040519080825280602002602001820160405280156141b5578160200160208202803683370190505b509050888188815181106141c557fe5b60200260200101818152505060006141e8878a8489896141e3610d2a565b6148e9565b90506142108a8a8a815181106141fa57fe5b60200260200101516115ef90919063ffffffff16565b89898151811061421c57fe5b6020908102919091010152600061423387836115ef565b919b919a509098505050505050505050565b60008060006142608689898c898961425b610d2a565b614b79565b9050614272818989815181106141fa57fe5b88888151811061427e57fe5b60209081029190910101526000614295868b6115ef565b919a91995090975050505050505050565b60008060006142c18689898c89896142bc610d2a565b614c68565b90506142e9818989815181106142d357fe5b60200260200101516121b390919063ffffffff16565b8888815181106142f557fe5b60209081029190910101526000614295868b6121b3565b6000806060875167ffffffffffffffff8111801561432957600080fd5b50604051908082528060200260200182016040528015614353578160200160208202803683370190505b5090508881888151811061436357fe5b6020026020010181815250506000614386878a848989614381610d2a565b614d35565b90506143988a8a8a815181106142d357fe5b8989815181106143a457fe5b6020908102919091010152600061423387836121b3565b60008282026143d584158061157557508385838161157257fe5b806143e457600091505061086a565b670de0b6b3a764000060001982016138ba565b6000610cc17f000000000000000000000000000000000000000000000000000000000000000060068401612b5d565b6000818152600a602052604090205461443e8161163d565b6000928352600a60205260409092209190915550565b6000610cc182614fb6565b600081806020019051810190610cc1919061589c565b6000606080600061448585614ff2565b915091506144958251885161240e565b6144a2826126e5886139bd565b60006144b48989858e8e6141e3610d2a565b90506144c48282111560cf6116aa565b9a91995090975050505050505050565b6000606060006144e384615015565b905060606136e1868884613fe2565b600060606000806145028561502b565b915091506145148651821060646116aa565b6060865167ffffffffffffffff8111801561452e57600080fd5b50604051908082528060200260200182016040528015614558578160200160208202803683370190505b50905061456c888884868e8e61425b610d2a565b81838151811061457857fe5b60209081029190910101529199919850909650505050505050565b600060608060006145a385615042565b915091506145b38751835161240e565b6145c0826126e5886139bd565b60006145d28989858e8e614381610d2a565b90506144c48282101560d06116aa565b6000606060006145f18461505a565b905060606136e1868389615070565b600060606000806146108561510c565b915091506146228651821060646116aa565b6060865167ffffffffffffffff8111801561463c57600080fd5b50604051908082528060200260200182016040528015614666578160200160208202803683370190505b50905061456c888884868e8e6142bc610d2a565b8151606090818167ffffffffffffffff8111801561469757600080fd5b506040519080825280602002602001820160405280156146c1578160200160208202803683370190505b50905060005b8281101561477a5760006146d961104c565b8210156146e657816146eb565b816001015b90506146f681612b35565b8061470d575085801561470d575061470d816143f7565b61472a5786828151811061471d57fe5b602002602001015161475a565b61475a87838151811061473957fe5b6020026020010151600a600084815260200190815260200160002054615123565b83838151811061476657fe5b6020908102919091010152506001016146c7565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006147dd838787815181106142d357fe5b8686815181106147e957fe5b60200260200101818152505060006148038888858861513e565b90508387878151811061481257fe5b60200260200101510387878151811061482757fe5b6020026020010181815250506148486001613f1e838a89815181106141fa57fe5b9150505b9695505050505050565b6000614868838786815181106141fa57fe5b86858151811061487457fe5b602002602001018181525050600061488e8888858961513e565b90508387868151811061489d57fe5b6020026020010151018786815181106148b257fe5b60200260200101818152505061484860016128018989815181106148d257fe5b6020026020010151846115ef90919063ffffffff16565b600080805b87518110156149275761491d88828151811061490657fe5b6020026020010151836121b390919063ffffffff16565b91506001016148ee565b506060865167ffffffffffffffff8111801561494257600080fd5b5060405190808252806020026020018201604052801561496c578160200160208202803683370190505b5090506000805b8951811015614a395760006149a4858c848151811061498e57fe5b602002602001015161387890919063ffffffff16565b90506149e68b83815181106149b557fe5b60200260200101516149e08c85815181106149cc57fe5b60200260200101518e86815181106141fa57fe5b90613878565b8483815181106149f257fe5b602002602001018181525050614a2e614a2782868581518110614a1157fe5b60200260200101516143bb90919063ffffffff16565b84906121b3565b925050600101614973565b506060895167ffffffffffffffff81118015614a5457600080fd5b50604051908082528060200260200182016040528015614a7e578160200160208202803683370190505b50905060005b8a51811015614b49576000848281518110614a9b57fe5b6020026020010151841115614b02576000614ac4614ab886613fa6565b8e858151811061405357fe5b90506000614ad8828e86815181106141fa57fe5b9050614af9614af282670de0b6b3a76400008d9003613878565b83906121b3565b92505050614b19565b8a8281518110614b0e57fe5b602002602001015190505b614b29818d84815181106141fa57fe5b838381518110614b3557fe5b602090810291909101015250600101614a84565b506000614b568c8361272d565b90506000614b64828a61288f565b9050613179614b7282613fa6565b8b906143bb565b600080614b9484614b8e876149e0818b6115ef565b906143bb565b90506000614ba48a8a848b61513e565b90506000614bb8828b8b815181106141fa57fe5b90506000805b8b51811015614be057614bd68c828151811061490657fe5b9150600101614bbe565b506000614c09828d8d81518110614bf357fe5b602002602001015161288f90919063ffffffff16565b90506000614c1682613fa6565b90506000614c2485836143bb565b90506000614c3286836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003612ff0565b82906121b3565b98505050505050505050979650505050505050565b600080614c7d84614b8e876149e0818b6121b3565b90506000614c8d8a8a848b61513e565b90506000614cb78a8a81518110614ca057fe5b6020026020010151836115ef90919063ffffffff16565b90506000805b8b51811015614cdf57614cd58c828151811061490657fe5b9150600101614cbd565b506000614cf2828d8d81518110614bf357fe5b90506000614cff82613fa6565b90506000614d0d85836143bb565b90506000614d1b86836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003613878565b600080805b8751811015614d5c57614d5288828151811061490657fe5b9150600101614d3a565b506060865167ffffffffffffffff81118015614d7757600080fd5b50604051908082528060200260200182016040528015614da1578160200160208202803683370190505b5090506000805b8951811015614e3b576000614dc3858c8481518110614bf357fe5b9050614e058b8381518110614dd457fe5b6020026020010151614dff8c8581518110614deb57fe5b60200260200101518e86815181106142d357fe5b9061288f565b848381518110614e1157fe5b602002602001018181525050614e30614a278286858151811061405357fe5b925050600101614da8565b506060895167ffffffffffffffff81118015614e5657600080fd5b50604051908082528060200260200182016040528015614e80578160200160208202803683370190505b50905060005b8a51811015614f4157600083858381518110614e9e57fe5b60200260200101511115614efa576000614ec3614ab886670de0b6b3a76400006115ef565b90506000614ed7828e86815181106141fa57fe5b9050614ef1614af282670de0b6b3a76400008d9003612ff0565b92505050614f11565b8a8281518110614f0657fe5b602002602001015190505b614f21818d84815181106142d357fe5b838381518110614f2d57fe5b602090810291909101015250600101614e86565b506000614f4e8c8361272d565b90506000614f5c828a61288f565b9050670de0b6b3a7640000811115614fa757614f9a8a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c00008301612ff0565b965050505050505061484c565b6000965050505050505061484c565b6000614fe17ff4b7964d00000000000000000000000000000000000000000000000000000000611082565b821480610cc15750610cc1826152fb565b606060008280602001905181019061500a91906158b7565b909590945092505050565b60008180602001905181019061157c91906158fc565b6000808280602001905181019061500a9190615928565b606060008280602001905181019061500a91906159bb565b60008180602001905181019061157c91906159d9565b6060600061507e8484613878565b90506060855167ffffffffffffffff8111801561509a57600080fd5b506040519080825280602002602001820160405280156150c4578160200160208202803683370190505b50905060005b8651811015615102576150e383888381518110614a1157fe5b8282815181106150ef57fe5b60209081029190910101526001016150ca565b5095945050505050565b6000808280602001905181019061500a91906159f5565b600061157c61513584613cce85612a11565b6127c684612a03565b60008084518602905060008560008151811061515657fe5b60200260200101519050600086518760008151811061517157fe5b60200260200101510290506000600190505b87518110156151d7576151bc6151b66151af848b85815181106151a257fe5b6020026020010151611558565b8a51611558565b88613628565b91506151cd88828151811061274d57fe5b9250600101615183565b508685815181106151e457fe5b60200260200101518203915060006151fc8788611558565b9050600061522861521c61521484610b688988611558565b6103e8611558565b8a89815181106151a257fe5b9050600061524361523c6152148b89613628565b86906121b3565b905060008061525f61525586866121b3565b610b688d866121b3565b905060005b60ff8110156152df57819250615294615281866128018586611558565b610b688e613f1e88612801886002611558565b9150828211156152bd576001838303116152b8575097506115e79650505050505050565b6152d7565b6001828403116152d7575097506115e79650505050505050565b600101615264565b506152eb6101426128e0565b5050505050505050949350505050565b60006153267f2f1a0bc900000000000000000000000000000000000000000000000000000000611082565b82148061535a57506153577feb0f24d600000000000000000000000000000000000000000000000000000000611082565b82145b80610cc15750610cc182600061538f7f38e9922e00000000000000000000000000000000000000000000000000000000611082565b8214806153c357506153c07f50dd6ed900000000000000000000000000000000000000000000000000000000611082565b82145b80610cc157506000610cc1565bfe5b803561086a81615f59565b600082601f8301126153ed578081fd5b81356154006153fb82615f39565b615f12565b81815291506020808301908481018184028601820187101561542157600080fd5b60005b8481101561288457813584529282019290820190600101615424565b600082601f830112615450578081fd5b815161545e6153fb82615f39565b81815291506020808301908481018184028601820187101561547f57600080fd5b60005b8481101561288457815184529282019290820190600101615482565b600082601f8301126154ae578081fd5b813567ffffffffffffffff8111156154c4578182fd5b6154d76020601f19601f84011601615f12565b91508082528360208285010111156154ee57600080fd5b8060208401602084013760009082016020015292915050565b80516003811061086a57600080fd5b80516004811061086a57600080fd5b80356002811061086a57600080fd5b600060208284031215615545578081fd5b813561157c81615f59565b60008060408385031215615562578081fd5b823561556d81615f59565b9150602083013561557d81615f59565b809150509250929050565b60008060006060848603121561559c578081fd5b83356155a781615f59565b925060208401356155b781615f59565b929592945050506040919091013590565b600080600080600080600060e0888a0312156155e2578283fd5b87356155ed81615f59565b965060208801356155fd81615f59565b95506040880135945060608801359350608088013561561b81615f6e565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561564a578182fd5b823561565581615f59565b946020939093013593505050565b600080600060608486031215615677578081fd5b835167ffffffffffffffff8082111561568e578283fd5b818601915086601f8301126156a1578283fd5b81516156af6153fb82615f39565b80828252602080830192508086018b8283870289010111156156cf578788fd5b8796505b848710156156fa5780516156e681615f59565b8452600196909601959281019281016156d3565b508901519097509350505080821115615711578283fd5b5061571e86828701615440565b925050604084015190509250925092565b600060208284031215615740578081fd5b8151801515811461157c578182fd5b600080600080600080600060e0888a031215615769578081fd5b87359650602088013561577b81615f59565b9550604088013561578b81615f59565b9450606088013567ffffffffffffffff808211156157a7578283fd5b6157b38b838c016153dd565b955060808a0135945060a08a0135935060c08a01359150808211156157d6578283fd5b506157e38a828b0161549e565b91505092959891949750929550565b600060208284031215615803578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461157c578182fd5b600060208284031215615843578081fd5b815161157c81615f59565b60008060408385031215615860578182fd5b823561586b81615f59565b9150602083013567ffffffffffffffff811115615886578182fd5b6158928582860161549e565b9150509250929050565b6000602082840312156158ad578081fd5b61157c8383615507565b6000806000606084860312156158cb578081fd5b6158d58585615507565b9250602084015167ffffffffffffffff8111156158f0578182fd5b61571e86828701615440565b6000806040838503121561590e578182fd5b6159188484615507565b9150602083015190509250929050565b60008060006060848603121561593c578081fd5b6159468585615507565b925060208401519150604084015190509250925092565b60006020828403121561596e578081fd5b61157c8383615516565b6000806040838503121561598a578182fd5b6159948484615516565b9150602083015167ffffffffffffffff8111156159af578182fd5b61589285828601615440565b6000806000606084860312156159cf578081fd5b6158d58585615516565b600080604083850312156159eb578182fd5b6159188484615516565b600080600060608486031215615a09578081fd5b6159468585615516565b60008060008060808587031215615a28578182fd5b843567ffffffffffffffff80821115615a3f578384fd5b818701915061012080838a031215615a55578485fd5b615a5e81615f12565b9050615a6a8984615525565b8152615a7989602085016153d2565b6020820152615a8b89604085016153d2565b6040820152606083013560608201526080830135608082015260a083013560a0820152615abb8960c085016153d2565b60c0820152615acd8960e085016153d2565b60e08201526101008084013583811115615ae5578687fd5b615af18b82870161549e565b828401525050809650506020870135915080821115615b0e578384fd5b50615b1b878288016153dd565b949794965050505060408301359260600135919050565b600060208284031215615b43578081fd5b5035919050565b600060208284031215615b5b578081fd5b5051919050565b60008060408385031215615b74578182fd5b50508035926020909101359150565b60008060008060808587031215615b98578182fd5b8451935060208501519250604085015191506060850151615bb881615f59565b939692955090935050565b600060208284031215615bd4578081fd5b815161157c81615f6e565b60008060408385031215615bf1578182fd5b8251615bfc81615f6e565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615c3b57815187529582019590820190600101615c1f565b509495945050505050565b60008151808452815b81811015615c6b57602081850181015186830182015201615c4f565b81811115615c7c5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015615d5c5783516001600160a01b031683529284019291840191600101615d37565b50909695505050505050565b60006020825261157c6020830184615c0c565b600060408252615d8e6040830185615c0c565b82810360208401526117ed8185615c0c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526115e76040830184615c46565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261157c6020830184615c46565b6000838252604060208301526115e76040830184615c0c565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715615f3157600080fd5b604052919050565b600067ffffffffffffffff821115615f4f578081fd5b5060209081020190565b6001600160a01b0381168114610bdf57600080fd5b60ff81168114610bdf57600080fdfea2646970667358221220dcc30bf1aa1b16ae6ad0c83c0807514f1e6fdbe66d9e246a013ce46ba54d53bf64736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a", + "opcodes": "PUSH2 0x180 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x9724 CODESIZE SUB DUP1 PUSH3 0x9724 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x36D JUMP JUMPDEST DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH3 0x49 SWAP1 PUSH3 0x21C JUMP JUMPDEST PUSH1 0x1F NOT DUP3 DUP3 SUB DUP2 ADD DUP4 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD AND PUSH1 0x40 MSTORE DUP1 MLOAD DUP4 SWAP1 ADDRESS SWAP1 DUP4 SWAP1 PUSH1 0x0 PUSH1 0x2 DUP3 DIV PUSH1 0xA0 DUP2 SWAP1 MSTORE DUP1 DUP4 SUB PUSH1 0xE0 DUP2 SWAP1 MSTORE DUP2 DUP6 MSTORE SWAP1 SWAP2 POP DUP4 PUSH3 0x95 DUP2 PUSH3 0x13D PUSH1 0x20 SWAP1 DUP2 SHL PUSH3 0x67C OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0x80 MSTORE DUP3 DUP6 ADD DUP1 MLOAD DUP4 DUP3 MSTORE PUSH3 0xC4 DUP3 PUSH3 0x13D PUSH1 0x20 SWAP1 DUP2 SHL PUSH3 0x67C OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH1 0xC0 MSTORE SWAP7 SWAP1 SWAP4 MSTORE SWAP1 MSTORE PUSH2 0x100 SWAP6 SWAP1 SWAP6 MSTORE POP POP SWAP3 DUP3 SHL DUP4 AND PUSH2 0x120 MSTORE POP SWAP3 SWAP1 SWAP3 SHL SWAP1 SWAP2 AND PUSH2 0x140 MSTORE POP POP TIMESTAMP PUSH3 0x76A700 ADD PUSH2 0x160 MSTORE DUP2 MLOAD PUSH3 0x11C SWAP1 PUSH1 0x2 SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 PUSH3 0x22A JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x132 SWAP1 PUSH1 0x3 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x22A JUMP JUMPDEST POP POP POP POP POP PUSH3 0x415 JUMP JUMPDEST DUP1 MLOAD PUSH32 0x602038038060206000396000F3FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE DUP1 DUP4 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP2 ADD DUP5 DUP5 CREATE SWAP1 DUP5 MSTORE SWAP2 POP PUSH3 0x18B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x1AC PUSH3 0x191 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP2 PUSH3 0x1A2 JUMPI PUSH3 0x1A2 DUP2 PUSH3 0x1A6 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH3 0x1B8 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x1BB JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x7FF3 DUP1 PUSH3 0x1731 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x26D JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x29D JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x29D JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x29D JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x280 JUMP JUMPDEST POP PUSH3 0x2AB SWAP3 SWAP2 POP PUSH3 0x2AF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2AB JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2B0 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x2D7 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x2EE JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND DUP3 ADD DUP2 ADD DUP4 DUP2 GT DUP4 DUP3 LT OR ISZERO PUSH3 0x310 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP1 PUSH1 0x40 MSTORE POP DUP2 SWAP5 POP DUP4 DUP3 MSTORE DUP7 DUP2 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x32D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP4 DUP4 LT ISZERO PUSH3 0x351 JUMPI DUP6 DUP4 ADD DUP2 ADD MLOAD DUP3 DUP5 ADD DUP3 ADD MSTORE SWAP2 DUP3 ADD SWAP2 PUSH3 0x332 JUMP JUMPDEST DUP4 DUP4 GT ISZERO PUSH3 0x363 JUMPI PUSH1 0x0 DUP2 DUP6 DUP5 ADD ADD MSTORE JUMPDEST POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x383 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP5 MLOAD PUSH3 0x390 DUP2 PUSH3 0x3FF JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MLOAD SWAP1 SWAP5 POP PUSH3 0x3A3 DUP2 PUSH3 0x3FF JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x3C0 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x3CE DUP9 DUP4 DUP10 ADD PUSH3 0x2C6 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x3E4 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH3 0x3F3 DUP8 DUP3 DUP9 ADD PUSH3 0x2C6 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH1 0x60 SHR PUSH2 0x160 MLOAD PUSH2 0x12A3 PUSH3 0x48E PUSH1 0x0 CODECOPY DUP1 PUSH2 0x232 MSTORE DUP1 PUSH2 0x25B MSTORE POP DUP1 PUSH2 0x55D MSTORE POP DUP1 PUSH2 0x5D3 MSTORE POP DUP1 PUSH2 0x583 MSTORE POP DUP1 PUSH2 0x6E3 MSTORE POP DUP1 PUSH2 0x209 MSTORE DUP1 PUSH2 0x75F MSTORE POP DUP1 PUSH2 0x704 MSTORE POP DUP1 PUSH2 0x1E8 MSTORE DUP1 PUSH2 0x73B MSTORE POP PUSH2 0x12A3 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6634B753 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x739238D6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x739238D6 EQ PUSH2 0x18F JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x1BF JUMPI PUSH2 0xDE JUMP JUMPDEST DUP1 PUSH4 0x6634B753 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x66B59F6C EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0x187 JUMPI PUSH2 0xDE JUMP JUMPDEST DUP1 PUSH4 0x2F2770DB GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x2F2770DB EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x3F819B6F EQ PUSH2 0x137 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x13F JUMPI PUSH2 0xDE JUMP JUMPDEST DUP1 PUSH3 0xC194DB EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x174481FA EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x2DA47C40 EQ PUSH2 0x117 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEB PUSH2 0x1C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x1050 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x109 PUSH2 0x1E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP3 SWAP2 SWAP1 PUSH2 0xFE9 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x22C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP3 SWAP2 SWAP1 PUSH2 0x11E8 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x296 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xEB PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xEB PUSH2 0x3AF JUMP JUMPDEST PUSH2 0x15A PUSH2 0x155 CALLDATASIZE PUSH1 0x4 PUSH2 0xCDD JUMP JUMPDEST PUSH2 0x42B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x1010 JUMP JUMPDEST PUSH2 0x17A PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0xD71 JUMP JUMPDEST PUSH2 0x456 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x1063 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x552 JUMP JUMPDEST PUSH2 0x17A PUSH2 0x55B JUMP JUMPDEST PUSH2 0x1AA PUSH2 0x1A5 CALLDATASIZE PUSH1 0x4 PUSH2 0xD15 JUMP JUMPDEST PUSH2 0x57F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x101B JUMP JUMPDEST PUSH2 0x17A PUSH2 0x5D1 JUMP JUMPDEST PUSH2 0x17A PUSH2 0x5F5 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x6DB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH32 0x0 SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 TIMESTAMP PUSH32 0x0 DUP2 LT ISZERO PUSH2 0x288 JUMPI DUP1 PUSH32 0x0 SUB SWAP3 POP PUSH3 0x278D00 SWAP2 POP PUSH2 0x291 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x29E PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x2A6 PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3A5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x37A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3A5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x388 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND DUP6 SWAP1 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3A5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x37A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x463 PUSH2 0x22C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x542 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x47E PUSH2 0x5D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4A1 PUSH2 0x55B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP14 DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x51C PUSH2 0x2FB JUMP JUMPDEST SWAP1 MSTORE PUSH1 0x40 MLOAD PUSH2 0x52E SWAP2 SWAP1 PUSH1 0x20 ADD PUSH2 0x1084 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x812 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5B4 SWAP3 SWAP2 SWAP1 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FF PUSH2 0x5D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x658 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0xD55 JUMP JUMPDEST DUP1 MLOAD PUSH32 0x602038038060206000396000F3FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE DUP1 DUP4 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP2 ADD DUP5 DUP5 CREATE SWAP1 DUP5 MSTORE SWAP2 POP PUSH2 0x6D5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x1AC PUSH2 0x8A6 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH32 0x0 DUP2 DUP2 ADD DUP6 DUP2 ADD DUP5 DUP2 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP1 SWAP7 MSTORE DUP1 DUP6 MSTORE SWAP4 SWAP6 PUSH32 0x0 SWAP6 SWAP3 SWAP5 PUSH32 0x0 SWAP5 SWAP4 DUP9 ADD DUP7 PUSH1 0x0 DUP3 DUP11 EXTCODECOPY DUP5 PUSH1 0x0 DUP9 DUP4 ADD DUP9 EXTCODECOPY POP PUSH1 0x20 DUP10 DUP2 ADD SWAP1 DUP10 DUP6 ADD ADD PUSH2 0x7A6 DUP2 DUP4 DUP7 PUSH2 0x8B8 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E3 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x57F JUMP JUMPDEST SWAP1 POP PUSH2 0x7FA PUSH2 0x7F2 DUP3 CALLER PUSH2 0x932 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x8A6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x810 PUSH2 0x808 PUSH2 0x552 JUMP JUMPDEST ISZERO PUSH1 0xD3 PUSH2 0x8A6 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x81C PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x827 DUP4 PUSH2 0x9D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC SWAP2 SWAP1 LOG2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x8B4 JUMPI PUSH2 0x8B4 DUP2 PUSH2 0xA19 JUMP JUMPDEST POP POP JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP2 LT PUSH2 0x8F6 JUMPI DUP2 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD PUSH2 0x8B9 JUMP JUMPDEST SWAP1 MLOAD DUP3 MLOAD PUSH1 0x20 SWAP3 SWAP1 SWAP3 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP2 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x93C PUSH2 0x5F5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x978 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9C8 SWAP2 SWAP1 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x9DE DUP4 PUSH2 0x6DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD PUSH1 0x0 CREATE SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xA12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP4 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL DUP4 DUP7 MOD ADD SWAP2 DUP4 SWAP1 DIV SWAP3 DUP4 MOD ADD PUSH1 0x10 SHL ADD PUSH7 0x42414C23000030 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH2 0x7FA SWAP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 SWAP1 PUSH3 0x42414C SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x9CB DUP2 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAC3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xAD6 PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST PUSH2 0x11F6 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xAF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD PUSH2 0xB0D DUP2 PUSH2 0x125F JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xAFA JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB3A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB48 PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD PUSH2 0xB7F DUP2 PUSH2 0x123D JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xB6C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xBA1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBAF PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD PUSH2 0xBE6 DUP2 PUSH2 0x123D JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC08 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xC16 PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xC3A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC66 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC7C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xCAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x11F6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xCC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCEE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA12 DUP2 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD0A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA12 DUP2 PUSH2 0x125F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD26 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xA12 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD66 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA12 DUP2 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0xD8F JUMPI DUP5 DUP6 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xDA6 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xDB2 DUP14 DUP4 DUP15 ADD PUSH2 0xC56 JUMP JUMPDEST SWAP11 POP PUSH1 0x20 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xDC7 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xDD3 DUP14 DUP4 DUP15 ADD PUSH2 0xC56 JUMP JUMPDEST SWAP10 POP PUSH1 0x40 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xDE8 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xDF4 DUP14 DUP4 DUP15 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP9 POP PUSH1 0x60 DUP13 ADD CALLDATALOAD SWAP8 POP PUSH1 0x80 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xE10 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xE1C DUP14 DUP4 DUP15 ADD PUSH2 0xB91 JUMP JUMPDEST SWAP7 POP PUSH1 0xA0 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xE31 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0xE3D DUP14 DUP4 DUP15 ADD PUSH2 0xBF8 JUMP JUMPDEST SWAP6 POP PUSH1 0xC0 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xE52 JUMPI DUP5 DUP6 REVERT JUMPDEST POP PUSH2 0xE5F DUP13 DUP3 DUP14 ADD PUSH2 0xAB3 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0xE77 DUP12 PUSH2 0x100 DUP13 ADD PUSH2 0xAA8 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED1 JUMPI DUP2 MLOAD ISZERO ISZERO DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xEB3 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED1 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xF34 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF75 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xF59 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xF86 JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x9C8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xF50 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1098 PUSH1 0x20 DUP4 ADD DUP5 MLOAD PUSH2 0xE86 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x10AA PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0xE86 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x10C7 PUSH2 0x1E0 DUP6 ADD DUP4 PUSH2 0xF50 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x1103 DUP5 DUP4 PUSH2 0xF50 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x1120 DUP5 DUP4 PUSH2 0xEDC JUMP JUMPDEST SWAP4 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x113D DUP5 DUP4 PUSH2 0xEDC JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x115A DUP5 DUP4 PUSH2 0xF21 JUMP JUMPDEST SWAP4 POP PUSH1 0xE0 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x1179 DUP6 DUP5 PUSH2 0xEA0 JUMP JUMPDEST SWAP1 DUP9 ADD MLOAD PUSH2 0x120 DUP9 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD PUSH2 0x140 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD PUSH2 0x160 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD PUSH2 0x180 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD SWAP1 SWAP5 POP SWAP2 POP PUSH2 0x1A0 PUSH2 0x11C5 DUP2 DUP9 ADD DUP5 PUSH2 0xE86 JUMP JUMPDEST DUP8 ADD MLOAD DUP7 DUP6 SUB SWAP1 SWAP2 ADD DUP4 DUP8 ADD MSTORE SWAP1 POP PUSH2 0x11DE DUP4 DUP3 PUSH2 0xF50 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1233 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT SWAP13 GT CREATE2 SWAP2 SWAP4 ADDRESS LOG4 SWAP12 NUMBER 0x1E SWAP15 0xC6 0x5D 0xA6 0xAB 0xCA 0xEC STATICCALL 0x28 SWAP6 0xB1 PUSH29 0xEA9C855010670FF62C64736F6C63430007010033610500604052348015 PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x7FF3 CODESIZE SUB DUP1 PUSH3 0x7FF3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x1B55 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x0 NOT PUSH3 0x48 DUP4 PUSH3 0xD93 JUMP JUMPDEST PUSH3 0x53 DUP5 PUSH3 0xDCC JUMP JUMPDEST DUP5 PUSH2 0x100 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH3 0x80 DUP11 PUSH1 0x80 ADD MLOAD ADDRESS PUSH3 0xE15 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP11 PUSH1 0x80 ADD MLOAD MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP12 PUSH2 0x120 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x160 ADD MLOAD DUP15 PUSH2 0x180 ADD MLOAD DUP3 DUP3 DUP10 DUP10 DUP14 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SHL DUP5 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP8 DUP8 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x12C SWAP3 SWAP2 SWAP1 PUSH3 0x17F2 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x142 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x17F2 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x100 MSTORE SWAP2 SWAP1 SHL AND PUSH2 0x120 MSTORE POP PUSH3 0x1C0 SWAP1 POP PUSH3 0x76A700 DUP4 GT ISZERO PUSH2 0x194 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1D4 PUSH3 0x278D00 DUP3 GT ISZERO PUSH2 0x195 PUSH3 0xFAF JUMP JUMPDEST TIMESTAMP SWAP1 SWAP2 ADD PUSH2 0x140 DUP2 SWAP1 MSTORE ADD PUSH2 0x160 MSTORE DUP6 MLOAD PUSH3 0x1F6 SWAP1 PUSH1 0x2 GT ISZERO PUSH1 0xC8 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x210 PUSH3 0x204 PUSH3 0xFC4 JUMP JUMPDEST DUP8 MLOAD GT ISZERO PUSH1 0xC9 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x226 DUP7 PUSH3 0xFC9 PUSH1 0x20 SHL PUSH3 0x154E OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x231 DUP5 PUSH3 0xFD5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9B2760F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x9B2760F SWAP1 PUSH3 0x262 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH3 0x1DDB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x27D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x292 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x2B8 SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3354E3E9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x66A9C7D2 SWAP1 PUSH3 0x2ED SWAP1 DUP5 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH3 0x1D3F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x308 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x31D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x180 DUP2 DUP2 MSTORE POP POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD2946C2B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x379 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x39F SWAP2 SWAP1 PUSH3 0x1B36 JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x1A0 MSTORE POP PUSH3 0x3D1 SWAP10 POP POP POP PUSH1 0x1 DUP10 LT ISZERO SWAP7 POP PUSH2 0x12C SWAP6 POP PUSH3 0xFAF SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH3 0x3E4 PUSH2 0x1388 DUP3 GT ISZERO PUSH2 0x12D PUSH3 0xFAF JUMP JUMPDEST PUSH1 0x0 PUSH3 0x3FF DUP3 PUSH2 0x3E8 PUSH3 0x1069 PUSH1 0x20 SHL PUSH3 0x1558 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH3 0x40C DUP2 PUSH3 0x1098 JUMP JUMPDEST POP POP DUP1 MLOAD MLOAD PUSH3 0x421 PUSH1 0x2 DUP3 GT PUSH1 0xC8 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x446 PUSH1 0x1 DUP3 SUB DUP4 PUSH1 0x20 ADD MLOAD MLOAD DUP5 PUSH1 0x40 ADD MLOAD MLOAD PUSH3 0x10D7 PUSH1 0x20 SHL PUSH3 0x1583 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH3 0x45A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x200 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x491 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x4C8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x240 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP2 GT PUSH3 0x4FE JUMPI PUSH1 0x0 PUSH3 0x517 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x3 SWAP1 DUP2 LT PUSH3 0x50E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x260 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x539 JUMPI PUSH1 0x0 PUSH3 0x552 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x4 SWAP1 DUP2 LT PUSH3 0x549 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x280 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x574 JUMPI PUSH1 0x0 PUSH3 0x58D JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x5 SWAP1 DUP2 LT PUSH3 0x584 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x2A0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5C6 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x10F7 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2C0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5E0 SWAP2 SWAP1 PUSH1 0x1 SWAP1 DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x2E0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5FA SWAP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x300 MSTORE PUSH1 0x3 DUP2 GT PUSH3 0x60F JUMPI PUSH1 0x0 PUSH3 0x625 JUMP JUMPDEST PUSH3 0x625 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x320 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x63A JUMPI PUSH1 0x0 PUSH3 0x650 JUMP JUMPDEST PUSH3 0x650 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x340 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x665 JUMPI PUSH1 0x0 PUSH3 0x67B JUMP JUMPDEST PUSH3 0x67B DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0x5B2 JUMPI INVALID JUMPDEST PUSH2 0x360 MSTORE DUP2 MLOAD MLOAD PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0x6B8 JUMPI POP DUP3 MLOAD DUP1 MLOAD ADDRESS SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH3 0x6A5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x6C8 JUMPI PUSH1 0x0 NOT ADD PUSH3 0x687 JUMP JUMPDEST PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP3 MLOAD MLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x6EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x715 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0x938 JUMPI DUP6 DUP2 LT ISZERO PUSH3 0x854 JUMPI DUP8 PUSH1 0x20 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x743 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x758 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x7C1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x794 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP3 PUSH1 0x6 ADD DUP7 PUSH3 0x11C6 PUSH1 0x20 SHL PUSH3 0x15A0 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x7D4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x849 JUMPI PUSH3 0x820 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7FE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x155 PUSH3 0xFAF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x83D PUSH1 0x1 DUP3 DUP7 PUSH3 0x11C6 PUSH1 0x20 SHL PUSH3 0x15A0 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x84E JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH3 0x92F JUMP JUMPDEST DUP6 DUP2 EQ PUSH3 0x92F JUMPI DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x870 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x885 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x8C1 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x794 JUMPI INVALID JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x8D7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x92A JUMPI PUSH3 0x901 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7FE JUMPI INVALID JUMPDEST PUSH3 0x91E PUSH1 0x1 DUP3 DUP7 PUSH3 0x11C6 PUSH1 0x20 SHL PUSH3 0x15A0 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x92F JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH3 0x71E JUMP JUMPDEST POP DUP2 ISZERO PUSH1 0xF8 SWAP1 DUP2 SHL PUSH2 0x460 MSTORE DUP2 ISZERO SWAP1 SHL PUSH2 0x480 MSTORE DUP4 MLOAD DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x95A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x380 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x98D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x9C0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3C0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP5 MLOAD GT PUSH3 0x9F7 JUMPI PUSH1 0x0 PUSH3 0xA0E JUMP JUMPDEST DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0xA05 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x3E0 MSTORE DUP4 MLOAD PUSH1 0x4 LT PUSH3 0xA31 JUMPI PUSH1 0x0 PUSH3 0xA48 JUMP JUMPDEST DUP4 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0xA3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x400 MSTORE DUP4 MLOAD PUSH1 0x5 LT PUSH3 0xA6B JUMPI PUSH1 0x0 PUSH3 0xA82 JUMP JUMPDEST DUP4 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0xA79 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x420 MSTORE POP POP PUSH2 0x440 MSTORE POP POP DUP3 MLOAD MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD MLOAD PUSH1 0x40 DUP7 ADD MLOAD MLOAD PUSH3 0xAC5 SWAP6 POP SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH3 0x10D7 DUP2 SHL PUSH3 0x1583 OR SWAP1 SHR JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH3 0xAD6 SWAP1 ADDRESS PUSH3 0xE15 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xB16 JUMPI POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xB03 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xB26 JUMPI PUSH1 0x0 NOT ADD PUSH3 0xAE0 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0xC3F JUMPI DUP3 DUP2 EQ ISZERO PUSH3 0xB43 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP1 MLOAD DUP3 DUP5 ADD SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0xB5C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH3 0xC35 JUMPI PUSH3 0xBB6 DUP2 DUP8 PUSH1 0x20 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH3 0xB89 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xBA2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x11EF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xBC7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xC0B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH3 0xC22 SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH3 0xC35 DUP2 PUSH3 0x12EA JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH3 0xB2A JUMP JUMPDEST POP POP POP POP POP PUSH1 0x0 NOT DUP2 EQ PUSH1 0xF8 DUP2 SWAP1 SHL PUSH2 0x4C0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH2 0x4A0 MSTORE PUSH3 0xC72 DUP4 PUSH1 0x2 PUSH3 0x1329 JUMP JUMPDEST PUSH3 0xC7F DUP4 PUSH1 0x3 PUSH3 0x1329 JUMP JUMPDEST DUP1 ISZERO PUSH3 0xC99 JUMPI PUSH3 0xC93 DUP4 PUSH1 0x0 PUSH3 0x1329 JUMP JUMPDEST PUSH3 0xD58 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x178B2B93 PUSH1 0xE2 SHL DUP2 MSTORE PUSH3 0xD2D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x5E2CAE4C SWAP1 PUSH3 0xCCD SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xCE6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCFB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xD21 SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x258 PUSH3 0xFAF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x7FD3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH3 0xD4F SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP1 PUSH3 0xD65 JUMPI DUP2 PUSH3 0xD68 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x4E0 MSTORE POP POP POP PUSH2 0x1A0 DUP2 ADD MLOAD DUP1 MLOAD PUSH3 0xD8B SWAP2 PUSH1 0xD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x17F2 JUMP JUMPDEST POP POP PUSH3 0x1E62 JUMP JUMPDEST PUSH3 0xD9D PUSH3 0x1873 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0xDD6 PUSH3 0x1873 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0xDF7 DUP5 PUSH1 0x80 ADD MLOAD ADDRESS PUSH3 0xE15 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xE32 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xE5D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 MLOAD PUSH1 0x0 EQ ISZERO PUSH3 0xEA0 JUMPI DUP2 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xE7A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xFA9 JUMP JUMPDEST DUP3 MLOAD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xEDC JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH3 0xEC9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xF29 JUMPI DUP4 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xEF2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF07 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x0 NOT ADD PUSH3 0xEA3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xF78 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xF42 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF57 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH3 0xF2C JUMP JUMPDEST POP DUP3 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF87 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH3 0xFC0 JUMPI PUSH3 0xFC0 DUP2 PUSH3 0x14D4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST DUP1 PUSH3 0xFC0 DUP2 PUSH3 0x14E9 JUMP JUMPDEST PUSH3 0xFEE PUSH3 0xFE3 PUSH3 0x1570 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1007 PUSH3 0xFFC PUSH3 0x1579 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1029 DUP2 PUSH1 0xC0 PUSH1 0x3F PUSH1 0x8 SLOAD PUSH3 0x1585 PUSH1 0x20 SHL PUSH3 0x15C7 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH3 0x105E SWAP1 DUP4 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH3 0x1091 DUP5 ISZERO DUP1 PUSH3 0x1089 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH3 0x1086 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH3 0xFAF JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x10A6 DUP2 DUP1 TIMESTAMP DUP1 PUSH3 0x15AA JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH3 0x105E SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH3 0x10F2 DUP3 DUP5 EQ DUP1 ISZERO PUSH3 0x10EA JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH3 0xFAF JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0x111B JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH3 0xDC7 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1157 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x116C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1192 SWAP2 SWAP1 PUSH3 0x1D1C JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH3 0x11B1 PUSH1 0x12 DUP4 PUSH3 0x161D PUSH1 0x20 SHL PUSH3 0x15EF OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xA EXP PUSH8 0xDE0B6B3A7640000 MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH3 0x11DE JUMPI PUSH1 0x0 PUSH3 0x11E1 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x122B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1240 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1266 SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH3 0x1295 SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH3 0x1605 PUSH3 0x1635 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH3 0x12DB SWAP1 DUP6 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 PUSH3 0x1313 SWAP1 DUP3 SWAP1 PUSH3 0x163D PUSH3 0x1691 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1A7C3263 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH3 0x135A SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1388 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x13AE SWAP2 SWAP1 PUSH3 0x1B1D JUMP JUMPDEST SWAP1 POP DUP2 PUSH3 0x13F2 JUMPI PUSH3 0x13CC DUP2 PUSH3 0x16BC PUSH1 0x20 SHL PUSH3 0x1655 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x14A6 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH3 0x1448 JUMPI PUSH3 0x1412 DUP2 PUSH3 0x16BC PUSH1 0x20 SHL PUSH3 0x1655 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH1 0x1 PUSH1 0x40 SHL PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x14A6 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH3 0x1499 JUMPI PUSH3 0x1468 DUP2 PUSH3 0x16BC PUSH1 0x20 SHL PUSH3 0x1655 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x14A6 JUMP JUMPDEST PUSH3 0x14A6 PUSH2 0x1BB PUSH3 0x14D4 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x7FD3 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 PUSH1 0x40 MLOAD PUSH3 0x14C7 SWAP2 SWAP1 PUSH3 0x1DF0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH3 0x14E6 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x16DA JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH3 0x14FA JUMPI PUSH3 0x14E6 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x150A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x10F2 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x1534 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH3 0x1565 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH3 0xFAF PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH3 0x151B JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1594 DUP5 DUP5 DUP5 PUSH3 0x173B JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH3 0x15C4 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x15DE DUP4 PUSH1 0x80 PUSH1 0x40 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x15F7 DUP6 PUSH1 0x40 DUP1 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1611 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH3 0x1796 PUSH1 0x20 SHL PUSH3 0x1672 OR PUSH1 0x20 SHR JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x162F DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH3 0xFAF JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x164A PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1689 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH3 0x1673 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH3 0x15C7 PUSH3 0x1585 DUP8 SHL OR DUP7 SHR JUMP JUMPDEST PUSH3 0x1585 PUSH1 0x20 SHL PUSH3 0x15C7 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFA9 PUSH3 0x16A2 DUP4 PUSH3 0x17AB JUMP JUMPDEST PUSH1 0x60 DUP1 DUP6 PUSH3 0x1585 PUSH1 0x20 SHL PUSH3 0x15C7 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 PUSH3 0x16D6 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT ISZERO PUSH2 0x1BA PUSH3 0xFAF JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH3 0x174C PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x1785 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0x177D JUMPI POP PUSH3 0x1779 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0x17CB PUSH1 0x20 SHL PUSH3 0x1685 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0xFAF JUMP JUMPDEST PUSH3 0x10F2 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0xFAF JUMP JUMPDEST PUSH1 0x0 PUSH3 0x17A5 DUP5 DUP5 DUP5 PUSH3 0x173B JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFA9 PUSH1 0x0 PUSH1 0x60 DUP5 PUSH3 0x17E3 PUSH1 0x20 SHL PUSH3 0x169B OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0x17DC JUMPI DUP2 PUSH3 0x1091 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x1835 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1865 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1865 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1865 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1848 JUMP JUMPDEST POP PUSH3 0x16D6 SWAP3 SWAP2 POP PUSH3 0x1894 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x16D6 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1895 JUMP JUMPDEST DUP1 MLOAD PUSH3 0xFA9 DUP2 PUSH3 0x1E4C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x18C9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x18E0 PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST PUSH3 0x1DF9 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1902 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH3 0x1932 JUMPI DUP3 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x191F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1906 JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x194F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1960 PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1982 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x19AE JUMPI DUP2 MLOAD PUSH3 0x199B DUP2 PUSH3 0x1E4C JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1985 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x19CA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x19DB PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x19FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x19AE JUMPI DUP2 MLOAD PUSH3 0x1A16 DUP2 PUSH3 0x1E4C JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1A00 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A3A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1A4B PUSH3 0x18DA DUP3 PUSH3 0x1E20 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1A6D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x19AE JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1A70 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A9F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x1AB5 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 PUSH3 0x1ACB PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH3 0x1DF9 JUMP JUMPDEST SWAP3 POP DUP2 DUP4 MSTORE DUP5 DUP2 DUP4 DUP7 ADD ADD GT ISZERO PUSH3 0x1AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x1B02 JUMPI DUP5 DUP2 ADD DUP3 ADD MLOAD DUP5 DUP3 ADD DUP4 ADD MSTORE DUP2 ADD PUSH3 0x1AE5 JUMP JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1B14 JUMPI PUSH1 0x0 DUP3 DUP5 DUP7 ADD ADD MSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B2F JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B48 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1091 DUP2 PUSH3 0x1E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1B67 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1B7E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP PUSH2 0x1C0 DUP1 DUP4 DUP8 SUB SLT ISZERO PUSH3 0x1B95 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x1BA0 DUP2 PUSH3 0x1DF9 JUMP JUMPDEST SWAP1 POP PUSH3 0x1BAE DUP7 DUP5 PUSH3 0x18AB JUMP JUMPDEST DUP2 MSTORE PUSH3 0x1BBF DUP7 PUSH1 0x20 DUP6 ADD PUSH3 0x18AB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1BD6 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1BE4 DUP8 DUP3 DUP7 ADD PUSH3 0x1A8E JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1BFC JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C0A DUP8 DUP3 DUP7 ADD PUSH3 0x1A8E JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C22 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C30 DUP8 DUP3 DUP7 ADD PUSH3 0x193E JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C48 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C56 DUP8 DUP3 DUP7 ADD PUSH3 0x19B9 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C6E JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1C7C DUP8 DUP3 DUP7 ADD PUSH3 0x1A29 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1C94 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1CA2 DUP8 DUP3 DUP7 ADD PUSH3 0x18B8 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH3 0x1CE5 DUP8 DUP3 DUP7 ADD PUSH3 0x18AB JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 DUP4 DUP2 ADD MLOAD DUP4 DUP2 GT ISZERO PUSH3 0x1CFD JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH3 0x1D0B DUP9 DUP3 DUP8 ADD PUSH3 0x1A8E JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1D2E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1091 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP9 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1D8B JUMPI PUSH3 0x1D78 DUP6 MLOAD PUSH3 0x1E40 JUMP JUMPDEST DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1D63 JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1DCD JUMPI PUSH3 0x1DBA DUP4 MLOAD PUSH3 0x1E40 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1DA5 JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH3 0x1DEA JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1E18 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x1E36 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x14E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH1 0x60 SHR PUSH2 0x220 MLOAD PUSH1 0x60 SHR PUSH2 0x240 MLOAD PUSH1 0x60 SHR PUSH2 0x260 MLOAD PUSH1 0x60 SHR PUSH2 0x280 MLOAD PUSH1 0x60 SHR PUSH2 0x2A0 MLOAD PUSH1 0x60 SHR PUSH2 0x2C0 MLOAD PUSH2 0x2E0 MLOAD PUSH2 0x300 MLOAD PUSH2 0x320 MLOAD PUSH2 0x340 MLOAD PUSH2 0x360 MLOAD PUSH2 0x380 MLOAD PUSH1 0x60 SHR PUSH2 0x3A0 MLOAD PUSH1 0x60 SHR PUSH2 0x3C0 MLOAD PUSH1 0x60 SHR PUSH2 0x3E0 MLOAD PUSH1 0x60 SHR PUSH2 0x400 MLOAD PUSH1 0x60 SHR PUSH2 0x420 MLOAD PUSH1 0x60 SHR PUSH2 0x440 MLOAD PUSH2 0x460 MLOAD PUSH1 0xF8 SHR PUSH2 0x480 MLOAD PUSH1 0xF8 SHR PUSH2 0x4A0 MLOAD PUSH1 0x60 SHR PUSH2 0x4C0 MLOAD PUSH1 0xF8 SHR PUSH2 0x4E0 MLOAD PUSH2 0x5FB3 PUSH3 0x2020 PUSH1 0x0 CODECOPY DUP1 PUSH2 0xE25 MSTORE POP DUP1 PUSH2 0x90A MSTORE POP DUP1 PUSH2 0x88A MSTORE DUP1 PUSH2 0x8B5 MSTORE DUP1 PUSH2 0x8E0 MSTORE POP DUP1 PUSH2 0x47A9 MSTORE POP DUP1 PUSH2 0x4785 MSTORE POP DUP1 PUSH2 0x2B3C MSTORE DUP1 PUSH2 0x43FE MSTORE POP DUP1 PUSH2 0x1C5C MSTORE POP DUP1 PUSH2 0x1C2C MSTORE POP DUP1 PUSH2 0x1BFC MSTORE POP DUP1 PUSH2 0x1BCC MSTORE POP DUP1 PUSH2 0x1B9C MSTORE POP DUP1 PUSH2 0x1B6C MSTORE POP DUP1 PUSH2 0x2FCC MSTORE POP DUP1 PUSH2 0x2F9C MSTORE POP DUP1 PUSH2 0x2F6C MSTORE POP DUP1 PUSH2 0x2F3C MSTORE POP DUP1 PUSH2 0x2F0C MSTORE POP DUP1 PUSH2 0x2EDC MSTORE POP DUP1 PUSH2 0x1EB9 MSTORE POP DUP1 PUSH2 0x1E77 MSTORE POP DUP1 PUSH2 0x1E35 MSTORE POP DUP1 PUSH2 0x1DF3 MSTORE POP DUP1 PUSH2 0x1DB1 MSTORE POP DUP1 PUSH2 0x1D6F MSTORE POP DUP1 PUSH2 0x104E MSTORE POP DUP1 PUSH2 0x16CA MSTORE POP DUP1 PUSH2 0x1279 MSTORE POP DUP1 PUSH2 0xBE4 MSTORE POP DUP1 PUSH2 0x1B40 MSTORE POP DUP1 PUSH2 0x1B1C MSTORE POP DUP1 PUSH2 0x114E MSTORE POP DUP1 PUSH2 0x112A MSTORE POP DUP1 PUSH2 0x1086 MSTORE POP DUP1 PUSH2 0x2D4A MSTORE POP DUP1 PUSH2 0x2D8C MSTORE POP DUP1 PUSH2 0x2D6B MSTORE POP PUSH2 0x5FB3 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x378 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70464016 GT PUSH2 0x1D3 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xDDF4627B GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x6E3 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6F3 JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x6FB JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x6AA JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6D0 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xAB7759F1 GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x69A JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x6A2 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x651 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x664 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x677 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0x893D20E8 GT PUSH2 0x14B JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x619 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x62E JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x636 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x649 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x5EB JUMPI DUP1 PUSH4 0x876F303B EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x606 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x7ECEBE00 GT PUSH2 0x1AD JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5E3 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x70464016 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x571 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x584 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2AD JUMPI DUP1 PUSH4 0x54A844BA GT PUSH2 0x24B JUMPI DUP1 PUSH4 0x55C67628 GT PUSH2 0x225 JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x516 JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x51E JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x53F JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x547 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x54A844BA EQ PUSH2 0x4F3 JUMPI DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x4FB JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x50E JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x287 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x4C2 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4D8 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x4E0 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4A7 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x31A JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x2F4 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x43E JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x451 JUMPI DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x464 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x477 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x429 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x356 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3C3 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x3ED JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3F5 JUMPI PUSH2 0x378 JUMP JUMPDEST DUP1 PUSH4 0x1EC954A EQ PUSH2 0x37D JUMPI DUP1 PUSH4 0x4842D4C EQ PUSH2 0x3A6 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3AE JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x390 PUSH2 0x38B CALLDATASIZE PUSH1 0x4 PUSH2 0x5A13 JUMP JUMPDEST PUSH2 0x70E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x390 PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x7C3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5E99 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x3D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x870 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3D6 PUSH2 0x908 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x92C JUMP JUMPDEST PUSH2 0x405 PUSH2 0x932 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DAB JUMP JUMPDEST PUSH2 0x41C PUSH2 0x95B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D68 JUMP JUMPDEST PUSH2 0x431 PUSH2 0x965 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D1B JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x44C CALLDATASIZE PUSH1 0x4 PUSH2 0x5588 JUMP JUMPDEST PUSH2 0xA00 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x45F CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xA74 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x472 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B62 JUMP JUMPDEST PUSH2 0xAD0 JUMP JUMPDEST PUSH2 0x47F PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5F04 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBBC JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x4A2 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B32 JUMP JUMPDEST PUSH2 0xBC6 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x4BD CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0xC06 JUMP JUMPDEST PUSH2 0x4CA PUSH2 0xC41 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5EDB JUMP JUMPDEST PUSH2 0x3EB PUSH2 0xC6C JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x4EE CALLDATASIZE PUSH1 0x4 PUSH2 0x584E JUMP JUMPDEST PUSH2 0xC7E JUMP JUMPDEST PUSH2 0x3EB PUSH2 0xC9C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x509 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xCAE JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0xCC9 JUMP JUMPDEST PUSH2 0x390 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x531 PUSH2 0x52C CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0xD3D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5EAC JUMP JUMPDEST PUSH2 0x390 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x54F PUSH2 0xDE0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EC5 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x56C CALLDATASIZE PUSH1 0x4 PUSH2 0x5B32 JUMP JUMPDEST PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x390 PUSH2 0x57F CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xEC1 JUMP JUMPDEST PUSH2 0x597 PUSH2 0x592 CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0xEDC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP3 SWAP2 SWAP1 PUSH2 0x5D7B JUMP JUMPDEST PUSH2 0x390 PUSH2 0x5B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xFDF JUMP JUMPDEST PUSH2 0x5CB PUSH2 0x5C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0xFEA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EE9 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x104C JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x1070 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x5F9 CALLDATASIZE PUSH1 0x4 PUSH2 0x57F2 JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x10D4 JUMP JUMPDEST PUSH2 0x531 PUSH2 0x614 CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0x1102 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x39D SWAP2 SWAP1 PUSH2 0x5D07 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x114C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x644 CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0x1170 JUMP JUMPDEST PUSH2 0x3B6 PUSH2 0x118B JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x65F CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x11EC JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x672 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x122A JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1237 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x68D CALLDATASIZE PUSH1 0x4 PUSH2 0x5534 JUMP JUMPDEST PUSH2 0x1241 JUMP JUMPDEST PUSH2 0x3D6 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x1265 JUMP JUMPDEST PUSH2 0x621 PUSH2 0x1277 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x6B8 CALLDATASIZE PUSH1 0x4 PUSH2 0x55C8 JUMP JUMPDEST PUSH2 0x129B JUMP JUMPDEST PUSH2 0x597 PUSH2 0x6CB CALLDATASIZE PUSH1 0x4 PUSH2 0x574F JUMP JUMPDEST PUSH2 0x1326 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x6DE CALLDATASIZE PUSH1 0x4 PUSH2 0x5550 JUMP JUMPDEST PUSH2 0x1449 JUMP JUMPDEST PUSH2 0x390 PUSH2 0x1486 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x148C JUMP JUMPDEST PUSH2 0x390 PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x709 CALLDATASIZE PUSH1 0x4 PUSH2 0x5638 JUMP JUMPDEST PUSH2 0x14C2 JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x73B PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x750 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x758 PUSH2 0x16B8 JUMP JUMPDEST PUSH2 0x76A DUP5 DUP5 PUSH2 0x765 PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0x16EC JUMP JUMPDEST PUSH1 0x60 PUSH2 0x774 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x785 JUMPI INVALID JUMPDEST EQ PUSH2 0x79C JUMPI PUSH2 0x797 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x179D JUMP JUMPDEST PUSH2 0x7A9 JUMP JUMPDEST PUSH2 0x7A9 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x17F6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x1831 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x832 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 CALLER DUP5 DUP5 PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x878 PUSH2 0x18A0 JUMP JUMPDEST PUSH2 0x880 PUSH2 0x908 JUMP JUMPDEST ISZERO PUSH2 0x8B0 JUMPI PUSH2 0x8B0 PUSH32 0x0 PUSH1 0x0 PUSH2 0x190D JUMP JUMPDEST PUSH2 0x8DB PUSH32 0x0 PUSH1 0x2 PUSH2 0x190D JUMP JUMPDEST PUSH2 0x906 PUSH32 0x0 PUSH1 0x3 PUSH2 0x190D JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x93F PUSH2 0x1AFD JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x94A PUSH2 0x1B1A JUMP JUMPDEST SWAP2 POP PUSH2 0x954 PUSH2 0x1B3E JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7BE PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x971 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x98C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x9B6 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9F9 JUMPI PUSH2 0x9CD DUP2 PUSH2 0x1B62 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9D9 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x9BC JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xA0D DUP6 CALLER PUSH2 0x1449 JUMP JUMPDEST SWAP1 POP PUSH2 0xA31 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0xA29 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xA3C DUP6 DUP6 DUP6 PUSH2 0x1C8B JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0xA57 JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xA69 JUMPI PUSH2 0xA69 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA7F DUP3 PUSH2 0x1D6B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA8C DUP3 PUSH2 0x1B62 JUMP JUMPDEST SWAP1 POP PUSH2 0xAA5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xABD SWAP1 PUSH2 0x1EF9 JUMP JUMPDEST SWAP1 POP PUSH2 0xACA DUP4 DUP4 DUP4 PUSH2 0x1F08 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xAD8 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xAE8 PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xAF9 PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB05 DUP3 TIMESTAMP PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0xB19 PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB24 PUSH2 0x2031 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xB35 DUP2 ISZERO PUSH2 0x13E PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB43 DUP7 PUSH2 0x3E8 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0xB72 JUMPI PUSH2 0xB6D PUSH2 0xB5E PUSH3 0x15180 DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP5 DUP9 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x20A5 JUMP JUMPDEST PUSH2 0xB8C JUMP JUMPDEST PUSH2 0xB8C PUSH2 0xB82 PUSH3 0x15180 DUP5 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP7 DUP9 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH2 0xB9E PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xBAA DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x20D8 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x14B8 JUMP JUMPDEST PUSH2 0xBCE PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xBD6 PUSH2 0x2127 JUMP JUMPDEST PUSH2 0xBDF DUP2 PUSH2 0x213A JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x866 SWAP2 DUP6 SWAP1 PUSH2 0xC3C SWAP1 DUP7 PUSH2 0x21B3 JUMP JUMPDEST PUSH2 0x1838 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xC56 DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x169B JUMP JUMPDEST SWAP3 POP PUSH2 0xC65 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x169B JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xC74 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x0 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0xC86 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0xC8E PUSH2 0x2127 JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x2256 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xCA4 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x1 PUSH2 0x2364 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0xCBC DUP4 PUSH2 0x1D6B JUMP JUMPDEST PUSH2 0x23BB JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7BE SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xD53 DUP7 MLOAD PUSH2 0xD4E PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0x240E JUMP JUMPDEST PUSH2 0xD68 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x241B PUSH2 0x243D PUSH2 0x24A6 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xD86 PUSH2 0x263D JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xD9E DUP6 DUP6 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDAA PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 DUP3 EQ PUSH2 0xDC5 JUMPI PUSH2 0xDC0 DUP3 DUP10 PUSH2 0x272D JUMP JUMPDEST PUSH2 0xDC7 JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH2 0xDD3 DUP2 DUP5 PUSH2 0x288F JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xDED PUSH2 0x2031 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xE05 PUSH2 0x1254 JUMP JUMPDEST ISZERO PUSH2 0xE12 JUMPI POP PUSH1 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH2 0xE5E JUMPI PUSH2 0xE1F PUSH2 0x908 JUMP JUMPDEST PUSH2 0xE49 JUMPI PUSH32 0x0 PUSH2 0xE57 JUMP JUMPDEST PUSH1 0xB SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xE86 JUMPI POP PUSH1 0xB SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xEB6 JUMPI POP PUSH1 0xB SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xCC4 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x1BB PUSH2 0x28E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xEEB PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH2 0xEF6 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xF03 DUP7 PUSH2 0x290A JUMP JUMPDEST ISZERO PUSH2 0xF2B JUMPI PUSH2 0xF10 PUSH2 0x2939 JUMP JUMPDEST PUSH2 0xF22 DUP10 PUSH2 0xF1C PUSH2 0x92C JUMP JUMPDEST DUP9 PUSH2 0x294C JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xF7D JUMP JUMPDEST PUSH2 0xF33 PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0xF3D PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0xF49 DUP11 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0xF6D DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xF59 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0xF63 JUMPI DUP14 PUSH2 0xF66 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x241B JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xF7B DUP4 DUP3 PUSH2 0x243D JUMP JUMPDEST POP JUMPDEST PUSH2 0xF87 DUP12 DUP3 PUSH2 0x29F9 JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xFA0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xFCA JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 PUSH2 0xFFF DUP9 PUSH2 0x1D6B JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x1020 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1029 DUP2 PUSH2 0x2A03 JUMP JUMPDEST SWAP5 POP PUSH2 0x1034 DUP2 PUSH2 0x2A11 JUMP JUMPDEST SWAP4 POP PUSH2 0x103F DUP2 PUSH2 0x2A1F JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1078 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x1 PUSH2 0x21C5 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10B7 SWAP3 SWAP2 SWAP1 PUSH2 0x5C91 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x10E1 PUSH2 0x263D JUMP JUMPDEST POP POP SWAP3 POP SWAP3 POP POP PUSH2 0x10FB DUP2 DUP4 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1113 DUP7 MLOAD PUSH2 0xD4E PUSH2 0x16C8 JUMP JUMPDEST PUSH2 0xD68 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x2A41 PUSH2 0x2A52 PUSH2 0x24A6 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x84F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x824 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x84F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x11F9 CALLER DUP6 PUSH2 0x1449 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x1213 JUMPI PUSH2 0x120E CALLER DUP6 PUSH1 0x0 PUSH2 0x1838 JUMP JUMPDEST PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x1220 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1838 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x866 CALLER DUP5 DUP5 PUSH2 0x1C8B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x124F DUP4 PUSH2 0x1D6B JUMP JUMPDEST PUSH2 0x2B35 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x7BE SWAP1 PUSH1 0xFF PUSH2 0x2B5D JUMP JUMPDEST PUSH2 0x126D PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x906 PUSH1 0x0 PUSH2 0x2364 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x12CA DUP13 PUSH2 0x1170 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x12E0 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DEB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1311 DUP9 DUP3 PUSH2 0x1308 DUP8 DUP8 DUP8 PUSH2 0x2B67 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2BA6 JUMP JUMPDEST PUSH2 0x131C DUP9 DUP9 DUP9 PUSH2 0x1838 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1335 PUSH2 0x720 PUSH2 0x114C JUMP JUMPDEST PUSH2 0x1340 PUSH2 0x746 PUSH2 0xBE2 JUMP JUMPDEST PUSH2 0x1348 PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1352 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0x135C PUSH2 0x92C JUMP JUMPDEST PUSH2 0x1409 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1371 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x2BFD JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x138A PUSH2 0x1380 PUSH2 0x1831 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x139C PUSH1 0x0 PUSH2 0x1397 PUSH2 0x1831 JUMP JUMPDEST PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x13AF DUP12 PUSH2 0x13A8 PUSH2 0x1831 JUMP JUMPDEST DUP5 SUB PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x13B9 DUP2 DUP5 PUSH2 0x2A52 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x13D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x13FC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x1413 DUP9 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x143B DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1427 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x1431 JUMPI DUP14 PUSH2 0x1434 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x2A41 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x13AF DUP12 DUP4 PUSH2 0x2CD6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1453 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1475 JUMPI POP PUSH1 0x0 NOT PUSH2 0x86A JUMP JUMPDEST PUSH2 0x147F DUP4 DUP4 PUSH2 0x2CE0 JUMP JUMPDEST SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH2 0x1494 PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x149F PUSH2 0x2031 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14AF DUP2 PUSH2 0x140 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0xC98 DUP3 PUSH2 0x2D0B JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7BE PUSH2 0x2D46 JUMP JUMPDEST PUSH2 0x14CA PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14D5 DUP4 PUSH2 0x1D6B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x14E2 DUP3 PUSH2 0x1B62 JUMP JUMPDEST SWAP1 POP PUSH2 0x14FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1506 DUP3 DUP3 DUP6 PUSH2 0x1F08 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1540 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xC98 DUP2 PUSH2 0x2DE3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x157C DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x16AA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x159B DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1594 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x16AA JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x15B6 JUMPI PUSH1 0x0 PUSH2 0x15B9 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15D4 DUP5 DUP5 DUP5 PUSH2 0x2E5C JUMP JUMPDEST POP DUP3 DUP3 SHL PUSH1 0x0 NOT PUSH1 0x1 DUP4 SHL ADD DUP4 SHL NOT DUP6 AND OR JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15FF DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x16AA JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1618 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x15E7 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1635 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x15C7 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x164B DUP4 PUSH2 0x2A03 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x166E PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x16AA JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x167F DUP5 DUP5 DUP5 PUSH2 0x2E5C JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1694 JUMPI DUP2 PUSH2 0x157C JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xC98 JUMPI PUSH2 0xC98 DUP2 PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x16C0 PUSH2 0x2EA2 JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2EAA JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x159B DUP2 DUP5 LT DUP1 ISZERO PUSH2 0x16FD JUMPI POP DUP2 DUP4 LT JUMPDEST PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1710 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x172B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1755 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x9F9 JUMPI PUSH2 0x177E PUSH2 0x176F DUP3 PUSH2 0x23BB JUMP JUMPDEST PUSH2 0x1778 DUP4 PUSH2 0x2ED2 JUMP JUMPDEST SWAP1 PUSH2 0x2FF0 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x178A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x175B JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x17C7 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x17DD JUMPI PUSH2 0x17D8 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x301C JUMP JUMPDEST PUSH2 0x17EA JUMP JUMPDEST PUSH2 0x17EA DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3086 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1820 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x17DD JUMPI PUSH2 0x17D8 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x318A JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1893 SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x18A8 PUSH2 0x2127 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x18B7 PUSH2 0x263D JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP4 POP PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x18D2 JUMPI PUSH2 0x18D2 DUP4 PUSH2 0x31E1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x18DC PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP4 DUP3 EQ PUSH2 0x18F7 JUMPI PUSH2 0x18F2 DUP3 DUP8 PUSH2 0x272D JUMP JUMPDEST PUSH2 0x18F9 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH2 0x1905 DUP3 DUP3 PUSH2 0x31F2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x1955 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x196D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1981 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x19A5 SWAP2 SWAP1 PUSH2 0x5B4A JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x19F3 JUMPI PUSH2 0x19B5 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x1A50 JUMPI PUSH2 0x1A05 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x1AB5 JUMPI PUSH2 0x1A62 DUP2 PUSH2 0x1655 JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1AC0 JUMP JUMPDEST PUSH2 0x1AC0 PUSH2 0x1BB PUSH2 0x28E0 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x1AF0 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B07 PUSH2 0x1B3E JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x7BE JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1B90 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1BC0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1BF0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1C20 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1C50 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH2 0xCC4 PUSH2 0x135 PUSH2 0x28E0 JUMP JUMPDEST PUSH2 0x1CA2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1CB9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x1CC4 DUP4 DUP4 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1CEA SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x1D19 SWAP1 DUP3 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1893 SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DAF JUMPI POP PUSH1 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1DF1 JUMPI POP PUSH1 0x1 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E33 JUMPI POP PUSH1 0x2 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E75 JUMPI POP PUSH1 0x3 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EB7 JUMPI POP PUSH1 0x4 PUSH2 0xCC4 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH1 0x5 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1F43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F57 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F7B SWAP2 SWAP1 PUSH2 0x5B4A JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1F98 DUP2 DUP4 DUP6 PUSH2 0x1605 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x1FDC SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x201A PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x1082 JUMP JUMPDEST SWAP1 POP PUSH2 0xBDF PUSH2 0x2029 DUP3 CALLER PUSH2 0x322E JUMP JUMPDEST PUSH2 0x191 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2042 PUSH2 0x3317 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x2095 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x2079 JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x206F JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x2090 JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x208A JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x209D JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20B4 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x20C1 JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x20CD JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x20E4 DUP5 DUP5 DUP5 DUP5 PUSH2 0x3376 JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x2119 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2132 PUSH2 0x1AFD JUMP JUMPDEST PUSH2 0x192 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x214F PUSH2 0x2145 PUSH2 0x33B5 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2164 PUSH2 0x215A PUSH2 0x33BE JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2175 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x15C7 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x21A8 SWAP1 DUP4 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x157C DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x16AA JUMP JUMPDEST DUP1 ISZERO PUSH2 0x21E5 JUMPI PUSH2 0x21E0 PUSH2 0x21D6 PUSH2 0x1B1A JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x21FA JUMP JUMPDEST PUSH2 0x21FA PUSH2 0x21F0 PUSH2 0x1B3E JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x21A8 SWAP1 DUP4 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2260 PUSH2 0xBE2 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x226C PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2299 SWAP3 SWAP2 SWAP1 PUSH2 0x5E64 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x22C5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x22E9 SWAP2 SWAP1 PUSH2 0x5B83 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x2336 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x5E4B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2350 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x131C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2373 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x15A0 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x23A6 SWAP1 DUP4 SWAP1 PUSH2 0x5DA0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xBDF JUMPI PUSH2 0xBDF PUSH2 0x33CA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23C5 PUSH2 0x104C JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x23DB JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x23FE JUMPI PUSH2 0x23F9 DUP2 PUSH2 0x2A03 JUMP JUMPDEST PUSH2 0x157C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xC98 DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x242C PUSH1 0x0 DUP9 DUP7 DUP7 PUSH2 0x349C JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP9 POP SWAP9 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x244C SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x2487 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2466 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x247A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x288F JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2493 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x244F JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x2595 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x24CA SWAP3 SWAP2 SWAP1 PUSH2 0x5CC1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2507 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x250C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x251B JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x2577 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x259D PUSH2 0x16B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x25A7 PUSH2 0x1704 JUMP JUMPDEST SWAP1 POP PUSH2 0x25B3 DUP8 DUP3 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x25CB DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x25DD DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1F NOT DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x264F PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x2665 PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2681 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2699 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x26D5 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5663 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x26EA DUP2 PUSH2 0x26E5 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x26F3 DUP2 PUSH2 0x354A JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 PUSH2 0x2701 PUSH2 0xC41 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x0 PUSH2 0x2713 DUP9 DUP7 DUP5 PUSH2 0x3583 JUMP JUMPDEST SWAP5 POP SWAP1 POP PUSH2 0x2721 DUP8 DUP3 PUSH2 0x3610 JUMP JUMPDEST SWAP6 POP POP POP POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x276E JUMPI PUSH2 0x2764 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x274D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2736 JUMP JUMPDEST POP DUP2 PUSH2 0x277F JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2878 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x27D5 JUMPI PUSH2 0x27CB PUSH2 0x27A9 DUP4 DUP8 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x27B8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3628 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2794 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x282E PUSH2 0x280D PUSH2 0x2807 PUSH2 0x27EC DUP5 DUP11 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x2801 PUSH2 0x27F9 DUP9 DUP14 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x3628 JUMP JUMPDEST SWAP1 PUSH2 0x21B3 JUMP JUMPDEST DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 PUSH2 0x281D DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x2801 PUSH2 0x27F9 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1558 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2856 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2851 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x286F JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x286F JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x86A JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x2787 JUMP JUMPDEST POP PUSH2 0x2884 PUSH2 0x141 PUSH2 0x28E0 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x289E DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x28AB JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x28CE SWAP1 DUP6 DUP4 DUP2 PUSH2 0x28C5 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x16AA JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x28D7 JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0xBDF DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x3648 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xCC1 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x292F SWAP2 SWAP1 PUSH2 0x5BC3 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2944 PUSH2 0x1254 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH2 0x295D DUP8 PUSH2 0x354A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x2970 DUP4 DUP6 DUP10 PUSH2 0x36C3 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2980 DUP3 PUSH1 0x0 PUSH2 0x36EF JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x299F SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x29DA DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29B9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x29CD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FF0 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x29E6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x29A2 JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x37AC JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 DUP3 PUSH1 0x60 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH1 0x60 DUP1 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2A2B DUP4 PUSH2 0x1EF9 JUMP JUMPDEST SWAP2 POP PUSH2 0x2A3A DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x169B JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x242C PUSH1 0x1 DUP9 DUP7 DUP7 PUSH2 0x349C JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2A61 SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xACA JUMPI PUSH2 0x2A9C DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2A7B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2A8F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3878 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2AA8 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2A64 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2AC5 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2AFD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2B11 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x7BE SWAP2 SWAP1 PUSH2 0x5832 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BB1 DUP6 PUSH2 0x38C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x2BC7 PUSH2 0x2BC1 DUP8 DUP4 DUP8 PUSH2 0x38E2 JUMP JUMPDEST DUP4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2BD6 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x16AA JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C0C DUP5 PUSH2 0x3991 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C27 PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2C1F JUMPI INVALID JUMPDEST EQ PUSH1 0xCE PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2C32 DUP6 PUSH2 0x39A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x2C40 DUP2 MLOAD DUP8 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x2C4A DUP2 DUP8 PUSH2 0x2990 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2C54 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x60 PUSH2 0x2C62 DUP4 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2C70 DUP4 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 PUSH2 0x2C8D PUSH14 0x8000000000000000000000000000 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x2C99 DUP14 DUP3 PUSH2 0x2CD6 JUMP JUMPDEST DUP1 DUP7 PUSH2 0x2CA3 PUSH2 0x104C JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2CAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2CC3 DUP6 DUP5 PUSH2 0x31F2 JUMP JUMPDEST POP SWAP13 SWAP4 SWAP12 POP SWAP3 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC98 DUP3 DUP3 PUSH2 0x3A5F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D17 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x3376 JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x21A8 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2DB3 PUSH2 0x3AEC JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2DC8 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5E1F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2DF2 JUMPI PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2E01 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x159B JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E29 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2E52 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x16AA JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2E12 JUMP JUMPDEST PUSH2 0x2E6B PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x2E93 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x16FD JUMPI POP PUSH2 0x2E89 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1685 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x159B DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x906 PUSH2 0x2127 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EB4 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC98 JUMPI PUSH2 0x2ECA DUP2 PUSH2 0x3AF0 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2EB9 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2F00 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2F30 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x2F60 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x2F90 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x2FC0 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1C80 JUMPI POP PUSH32 0x0 PUSH2 0xCC4 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x300A DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3028 DUP6 DUP4 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x3049 DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B44 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x305C DUP8 DUP8 DUP8 DUP8 PUSH2 0x3B50 JUMP JUMPDEST SWAP1 POP PUSH2 0x307B DUP2 DUP5 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x306E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B64 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A9 DUP2 PUSH2 0x3B70 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3097 JUMPI INVALID JUMPDEST EQ SWAP1 POP PUSH2 0x30A4 DUP7 DUP5 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x30C4 DUP8 PUSH1 0x60 ADD MLOAD DUP5 DUP4 PUSH2 0x30B8 JUMPI DUP7 PUSH2 0x30BA JUMP JUMPDEST DUP8 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST DUP8 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x30DD DUP11 PUSH2 0x3B8C JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x30F0 PUSH2 0x104C JUMP JUMPDEST DUP11 EQ PUSH2 0x3116 JUMPI PUSH2 0x3111 DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3109 DUP15 PUSH2 0x3BF5 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3C2A JUMP JUMPDEST PUSH2 0x3131 JUMP JUMPDEST PUSH2 0x3131 DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3129 DUP16 PUSH2 0x3BF5 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3C63 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3142 DUP5 DUP7 DUP6 DUP10 DUP6 PUSH2 0x3C87 JUMP JUMPDEST DUP7 PUSH2 0x315C JUMPI PUSH2 0x3157 DUP3 DUP11 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x306E JUMPI INVALID JUMPDEST PUSH2 0x3179 JUMP JUMPDEST PUSH2 0x3179 DUP3 DUP11 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x316C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3D07 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3199 DUP7 PUSH1 0x60 ADD MLOAD PUSH2 0x3D13 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x31A8 DUP6 DUP4 PUSH2 0x2990 JUMP JUMPDEST PUSH2 0x31BC DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x303C JUMPI INVALID JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x31CF DUP8 DUP8 DUP8 DUP8 PUSH2 0x3D34 JUMP JUMPDEST SWAP1 POP PUSH2 0x7A9 DUP2 DUP5 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x316C JUMPI INVALID JUMPDEST PUSH2 0xBDF PUSH2 0x31EC PUSH2 0x1277 JUMP JUMPDEST DUP3 PUSH2 0x2CD6 JUMP JUMPDEST PUSH2 0x31FF DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x320C DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1672 JUMP JUMPDEST OR PUSH1 0xC SSTORE PUSH2 0xC98 PUSH2 0x3D48 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3227 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x16AA JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x324D PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3268 JUMPI POP PUSH2 0x3268 DUP4 PUSH2 0x3D7E JUMP JUMPDEST ISZERO PUSH2 0x3290 JUMPI PUSH2 0x3275 PUSH2 0x1128 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x86A JUMP JUMPDEST PUSH2 0x3298 PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x32C7 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x32DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x32F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x147F SWAP2 SWAP1 PUSH2 0x572F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3336 PUSH1 0x0 PUSH1 0x40 PUSH1 0x9 SLOAD PUSH2 0x169B SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP5 POP PUSH2 0x3348 SWAP1 PUSH1 0x40 DUP1 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP4 POP PUSH2 0x335B SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x169B JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP3 POP PUSH2 0x336E SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x169B JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x3383 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x3390 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x339C DUP6 PUSH1 0x40 DUP1 PUSH2 0x1672 JUMP JUMPDEST PUSH2 0x33A9 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x1672 JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x33D4 PUSH2 0x114C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x33EA PUSH2 0xBE2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3406 SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x341E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3432 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x345A SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x5663 JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x346A DUP2 PUSH2 0x26E5 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3475 DUP3 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3481 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x3490 DUP3 DUP5 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH2 0xACA DUP3 DUP3 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x34B0 DUP10 PUSH2 0x3B8C JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x53D0 DUP11 PUSH2 0x34C8 JUMPI PUSH2 0x3D89 PUSH2 0x34CC JUMP JUMPDEST PUSH2 0x3E1E JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x34E4 DUP7 DUP7 DUP10 DUP8 DUP16 DUP16 DUP10 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x53D0 DUP14 PUSH2 0x34F8 JUMPI PUSH2 0x15EF PUSH2 0x34FC JUMP JUMPDEST PUSH2 0x21B3 JUMPDEST SWAP1 POP PUSH2 0x3509 DUP8 DUP4 DUP4 PUSH2 0x3E9C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3519 DUP10 DUP6 DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x3528 DUP8 DUP10 DUP9 DUP13 DUP6 PUSH2 0x3C87 JUMP JUMPDEST DUP4 PUSH2 0x3534 DUP5 PUSH1 0x0 PUSH2 0x36EF JUMP JUMPDEST SWAP11 POP SWAP11 POP POP POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x3571 DUP4 PUSH2 0x355A PUSH2 0x104C JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3564 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F10 JUMP JUMPDEST PUSH2 0x357A DUP5 PUSH2 0x39BD JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3595 DUP9 DUP9 PUSH2 0x3F24 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x35AB JUMPI PUSH1 0x0 PUSH2 0x35AF JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x35C1 JUMPI PUSH1 0x0 PUSH2 0x35C5 JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35E0 PUSH2 0x35D6 PUSH1 0x0 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1778 DUP6 DUP8 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x35FB PUSH2 0x35F1 PUSH1 0x2 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1778 DUP6 DUP9 PUSH2 0x288F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C PUSH2 0x361F DUP5 DUP5 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x27C6 DUP5 PUSH2 0x3FA6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3637 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x3640 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x36D2 DUP5 PUSH2 0x3FCC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP8 DUP8 DUP5 PUSH2 0x3FE2 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x370C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3736 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x37A5 JUMPI PUSH2 0x374D PUSH2 0x104C JUMP JUMPDEST DUP2 EQ PUSH2 0x3784 JUMPI DUP4 PUSH2 0x375C PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x376B JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x376D JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3777 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3786 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3792 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x373C JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x37C3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x37CF DUP3 PUSH1 0x0 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x37F5 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3828 PUSH2 0x3823 DUP3 PUSH2 0x381D PUSH2 0x92C JUMP JUMPDEST SWAP1 PUSH2 0x4091 JUMP JUMPDEST PUSH2 0x409F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x386C SWAP2 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3887 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x16AA JUMP JUMPDEST DUP3 PUSH2 0x3894 JUMPI POP PUSH1 0x0 PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x38AE SWAP1 DUP6 DUP4 DUP2 PUSH2 0x28C5 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x38BA JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38D0 PUSH2 0x2D46 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10B7 SWAP3 SWAP2 SWAP1 PUSH2 0x5CD1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38F4 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x392D SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x5E7B JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x394F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3985 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC1 SWAP2 SWAP1 PUSH2 0x595D JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x5978 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x39DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3A05 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x37A5 JUMPI DUP4 PUSH2 0x3A1D PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x3A2C JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3A2E JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3A38 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3A4C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3A0B JUMP JUMPDEST PUSH2 0x3A6B PUSH1 0x0 DUP4 DUP4 PUSH2 0x159B JUMP JUMPDEST PUSH2 0x3A7A PUSH2 0x3823 DUP3 PUSH2 0x2801 PUSH2 0x92C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3A9D SWAP1 DUP3 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x386C SWAP1 DUP6 SWAP1 PUSH2 0x5DC3 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH2 0x3AF8 PUSH2 0x104C JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x3B04 JUMPI PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xC98 JUMPI PUSH1 0x0 DUP1 PUSH2 0x3B25 DUP4 PUSH2 0x2A1F JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0xACA JUMPI PUSH2 0xACA DUP5 PUSH2 0x3B3E DUP7 PUSH2 0x1B62 JUMP JUMPDEST DUP5 PUSH2 0x1F08 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x2FF0 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17ED PUSH1 0x0 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x40A4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH2 0x3B85 PUSH2 0x3B80 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x3FA6 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3B9E PUSH2 0xC41 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3BB3 DUP11 DUP7 DUP7 PUSH2 0x4116 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x3BC3 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 DUP3 EQ PUSH2 0x3BDE JUMPI PUSH2 0x3BD9 DUP3 DUP6 PUSH2 0x272D JUMP JUMPDEST PUSH2 0x3BE0 JUMP JUMPDEST DUP3 JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP1 SWAP10 POP SWAP3 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C0C PUSH2 0x3C02 PUSH2 0x104C JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH2 0x3C14 PUSH2 0x104C JUMP JUMPDEST DUP3 LT PUSH2 0x166E JUMPI PUSH2 0x3C25 DUP3 PUSH1 0x1 PUSH2 0x15EF JUMP JUMPDEST PUSH2 0xCC1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3C45 JUMPI PUSH2 0x3C40 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x416E JUMP JUMPDEST PUSH2 0x3C53 JUMP JUMPDEST PUSH2 0x3C53 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4245 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3C79 JUMPI PUSH2 0x3C40 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x42A6 JUMP JUMPDEST PUSH2 0x3C53 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x430C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C93 DUP7 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CA1 DUP4 DUP6 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x3CAF DUP7 DUP4 PUSH2 0x2FF0 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x3CFD JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x3CD9 PUSH2 0x3CD3 DUP4 PUSH2 0x3CCE DUP5 PUSH2 0xDFB JUMP JUMPDEST PUSH2 0x1558 JUMP JUMPDEST DUP7 PUSH2 0x3628 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3CFA JUMPI PUSH1 0x0 PUSH2 0x3CED DUP8 DUP4 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP PUSH2 0x3CF8 DUP2 PUSH2 0x31E1 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x131C DUP9 DUP5 PUSH2 0x31F2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH2 0x288F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3D28 PUSH2 0x3D21 PUSH2 0xD2A JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH2 0x157C DUP4 DUP3 PUSH2 0x15EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17ED PUSH1 0x1 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x40A4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3D52 PUSH2 0x16C8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC98 JUMPI PUSH2 0x3D68 DUP2 PUSH2 0x43F7 JUMP JUMPDEST ISZERO PUSH2 0x3D76 JUMPI PUSH2 0x3D76 DUP2 PUSH2 0x4426 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x3D57 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x4454 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3D98 DUP5 PUSH2 0x445F JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DA8 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3DC6 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4475 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x3E13 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DD4 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3DE5 JUMPI PUSH2 0x3DBC DUP8 DUP11 DUP7 PUSH2 0x44D4 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3DF3 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E06 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x44F2 JUMP JUMPDEST PUSH2 0x3E11 PUSH2 0x150 PUSH2 0x28E0 JUMP JUMPDEST POP JUMPDEST SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3E2D DUP5 PUSH2 0x3991 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E3D JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E51 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4593 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E5F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E70 JUMPI PUSH2 0x3DBC DUP8 DUP11 DUP7 PUSH2 0x45E2 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x3E7E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x3E91 JUMPI PUSH2 0x3DBC DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x4600 JUMP JUMPDEST PUSH2 0x3E11 PUSH2 0x136 PUSH2 0x28E0 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD PUSH2 0x3EAB SWAP1 DUP3 SWAP1 PUSH2 0x240E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x3F09 JUMPI PUSH2 0x3EEA DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3EC5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x3ED9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3EF6 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3EAE JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x3F1E PUSH2 0x92C JUMP JUMPDEST SWAP1 PUSH2 0x15EF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3F3D DUP5 PUSH2 0x3F38 DUP8 PUSH1 0x1 PUSH2 0x467A JUMP JUMPDEST PUSH2 0x272D JUMP JUMPDEST SWAP3 POP PUSH2 0x3F47 PUSH2 0x4783 JUMP JUMPDEST ISZERO PUSH2 0x3F60 JUMPI PUSH2 0x3F56 DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x3F9F JUMP JUMPDEST PUSH2 0x3F68 PUSH2 0x47A7 JUMP JUMPDEST ISZERO PUSH2 0x3F81 JUMPI DUP3 SWAP2 POP PUSH2 0x3F7A DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH2 0x3F9F JUMP JUMPDEST PUSH2 0x3F90 DUP5 PUSH2 0x3F38 DUP8 PUSH1 0x0 PUSH2 0x467A JUMP JUMPDEST SWAP2 POP PUSH2 0x3F9C DUP5 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x3FBE JUMPI PUSH1 0x0 PUSH2 0xCC1 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x5BDF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3FF0 DUP4 DUP6 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x400A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4034 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x4088 JUMPI PUSH2 0x4069 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FF0 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4075 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x403A JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C DUP4 DUP4 PUSH1 0x1 PUSH2 0x3218 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x40B1 DUP6 PUSH2 0x39BD JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40BE DUP6 PUSH2 0x3BF5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40CB DUP6 PUSH2 0x3BF5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x40D7 PUSH2 0x2031 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x40E6 DUP3 DUP7 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP DUP11 ISZERO PUSH2 0x4108 JUMPI PUSH2 0x40FC DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x47CB JUMP JUMPDEST SWAP6 POP POP POP POP POP POP PUSH2 0x17ED JUMP JUMPDEST PUSH2 0x40FC DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x4856 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x4128 DUP9 PUSH2 0x354A JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x413A DUP4 DUP11 DUP11 PUSH2 0x3583 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x414A DUP6 DUP5 PUSH2 0x3610 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x415B JUMPI PUSH2 0x415B DUP2 PUSH2 0x31E1 JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x418B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x41B5 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x41C5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x41E8 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x41E3 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x48E9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4210 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x421C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4233 DUP8 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4260 DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x425B PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4B79 JUMP JUMPDEST SWAP1 POP PUSH2 0x4272 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x427E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4295 DUP7 DUP12 PUSH2 0x15EF JUMP JUMPDEST SWAP2 SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x42C1 DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x42BC PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4C68 JUMP JUMPDEST SWAP1 POP PUSH2 0x42E9 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x42F5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4295 DUP7 DUP12 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4329 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4353 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4363 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4386 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x4381 PUSH2 0xD2A JUMP JUMPDEST PUSH2 0x4D35 JUMP JUMPDEST SWAP1 POP PUSH2 0x4398 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x43A4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4233 DUP8 DUP4 PUSH2 0x21B3 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x43D5 DUP5 ISZERO DUP1 PUSH2 0x1575 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x1572 JUMPI INVALID JUMPDEST DUP1 PUSH2 0x43E4 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x86A JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x0 NOT DUP3 ADD PUSH2 0x38BA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2B5D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x443E DUP2 PUSH2 0x163D JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xCC1 DUP3 PUSH2 0x4FB6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xCC1 SWAP2 SWAP1 PUSH2 0x589C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x4485 DUP6 PUSH2 0x4FF2 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4495 DUP3 MLOAD DUP9 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x44A2 DUP3 PUSH2 0x26E5 DUP9 PUSH2 0x39BD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x44B4 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x41E3 PUSH2 0xD2A JUMP JUMPDEST SWAP1 POP PUSH2 0x44C4 DUP3 DUP3 GT ISZERO PUSH1 0xCF PUSH2 0x16AA JUMP JUMPDEST SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x44E3 DUP5 PUSH2 0x5015 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP7 DUP9 DUP5 PUSH2 0x3FE2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x4502 DUP6 PUSH2 0x502B JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4514 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x452E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4558 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x456C DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x425B PUSH2 0xD2A JUMP JUMPDEST DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4578 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP2 SWAP10 SWAP2 SWAP9 POP SWAP1 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x45A3 DUP6 PUSH2 0x5042 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x45B3 DUP8 MLOAD DUP4 MLOAD PUSH2 0x240E JUMP JUMPDEST PUSH2 0x45C0 DUP3 PUSH2 0x26E5 DUP9 PUSH2 0x39BD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x45D2 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x4381 PUSH2 0xD2A JUMP JUMPDEST SWAP1 POP PUSH2 0x44C4 DUP3 DUP3 LT ISZERO PUSH1 0xD0 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x45F1 DUP5 PUSH2 0x505A JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x36E1 DUP7 DUP4 DUP10 PUSH2 0x5070 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x4610 DUP6 PUSH2 0x510C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4622 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x16AA JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x463C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4666 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x456C DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x42BC PUSH2 0xD2A JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4697 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x46C1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x477A JUMPI PUSH1 0x0 PUSH2 0x46D9 PUSH2 0x104C JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x46E6 JUMPI DUP2 PUSH2 0x46EB JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x46F6 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP1 PUSH2 0x470D JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x470D JUMPI POP PUSH2 0x470D DUP2 PUSH2 0x43F7 JUMP JUMPDEST PUSH2 0x472A JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x471D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x475A JUMP JUMPDEST PUSH2 0x475A DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4739 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x5123 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4766 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x46C7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x47DD DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x47E9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4803 DUP9 DUP9 DUP6 DUP9 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x4812 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x4827 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4848 PUSH1 0x1 PUSH2 0x3F1E DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP2 POP POP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4868 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4874 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x488E DUP9 DUP9 DUP6 DUP10 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x489D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x48B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4848 PUSH1 0x1 PUSH2 0x2801 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x48D2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4927 JUMPI PUSH2 0x491D DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x21B3 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x48EE JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4942 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x496C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4A39 JUMPI PUSH1 0x0 PUSH2 0x49A4 DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x498E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3878 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x49E6 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x49B5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x49E0 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x49CC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x3878 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x49F2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4A2E PUSH2 0x4A27 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4A11 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x43BB SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4973 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4A54 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4A7E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4B49 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4A9B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x4B02 JUMPI PUSH1 0x0 PUSH2 0x4AC4 PUSH2 0x4AB8 DUP7 PUSH2 0x3FA6 JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4AD8 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4AF9 PUSH2 0x4AF2 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3878 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4B19 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B0E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4B29 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4B35 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4A84 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4B56 DUP13 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B64 DUP3 DUP11 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH2 0x3179 PUSH2 0x4B72 DUP3 PUSH2 0x3FA6 JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x43BB JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4B94 DUP5 PUSH2 0x4B8E DUP8 PUSH2 0x49E0 DUP2 DUP12 PUSH2 0x15EF JUMP JUMPDEST SWAP1 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4BA4 DUP11 DUP11 DUP5 DUP12 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4BB8 DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4BE0 JUMPI PUSH2 0x4BD6 DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4BBE JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4C09 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x288F SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C16 DUP3 PUSH2 0x3FA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C24 DUP6 DUP4 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C32 DUP7 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x4C53 PUSH2 0x4C4C DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x2FF0 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4C7D DUP5 PUSH2 0x4B8E DUP8 PUSH2 0x49E0 DUP2 DUP12 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4C8D DUP11 DUP11 DUP5 DUP12 PUSH2 0x513E JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4CB7 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x4CA0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x15EF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4CDF JUMPI PUSH2 0x4CD5 DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4CBD JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4CF2 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4CFF DUP3 PUSH2 0x3FA6 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D0D DUP6 DUP4 PUSH2 0x43BB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D1B DUP7 DUP4 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH2 0x4C53 PUSH2 0x4C4C DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3878 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4D5C JUMPI PUSH2 0x4D52 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4906 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4D3A JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4D77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4DA1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4E3B JUMPI PUSH1 0x0 PUSH2 0x4DC3 DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4BF3 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4E05 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4DD4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4DFF DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4DEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x288F JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4E11 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4E30 PUSH2 0x4A27 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4053 JUMPI INVALID JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4DA8 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4E56 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4E80 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4F41 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4E9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x4EFA JUMPI PUSH1 0x0 PUSH2 0x4EC3 PUSH2 0x4AB8 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x15EF JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4ED7 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x41FA JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4EF1 PUSH2 0x4AF2 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x2FF0 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4F11 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4F06 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4F21 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x42D3 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4F2D JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4E86 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4F4E DUP13 DUP4 PUSH2 0x272D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F5C DUP3 DUP11 PUSH2 0x288F JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x4FA7 JUMPI PUSH2 0x4F9A DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x2FF0 JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x484C JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x484C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4FE1 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xCC1 JUMPI POP PUSH2 0xCC1 DUP3 PUSH2 0x52FB JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x58B7 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x58FC JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x5928 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x59BB JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x157C SWAP2 SWAP1 PUSH2 0x59D9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x507E DUP5 DUP5 PUSH2 0x3878 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x509A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x50C4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x5102 JUMPI PUSH2 0x50E3 DUP4 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A11 JUMPI INVALID JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x50EF JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x50CA JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x500A SWAP2 SWAP1 PUSH2 0x59F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x157C PUSH2 0x5135 DUP5 PUSH2 0x3CCE DUP6 PUSH2 0x2A11 JUMP JUMPDEST PUSH2 0x27C6 DUP5 PUSH2 0x2A03 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5156 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5171 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x51D7 JUMPI PUSH2 0x51BC PUSH2 0x51B6 PUSH2 0x51AF DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x51A2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1558 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1558 JUMP JUMPDEST DUP9 PUSH2 0x3628 JUMP JUMPDEST SWAP2 POP PUSH2 0x51CD DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x274D JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x5183 JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x51E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0x51FC DUP8 DUP9 PUSH2 0x1558 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5228 PUSH2 0x521C PUSH2 0x5214 DUP5 PUSH2 0xB68 DUP10 DUP9 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1558 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x51A2 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5243 PUSH2 0x523C PUSH2 0x5214 DUP12 DUP10 PUSH2 0x3628 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x525F PUSH2 0x5255 DUP7 DUP7 PUSH2 0x21B3 JUMP JUMPDEST PUSH2 0xB68 DUP14 DUP7 PUSH2 0x21B3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x52DF JUMPI DUP2 SWAP3 POP PUSH2 0x5294 PUSH2 0x5281 DUP7 PUSH2 0x2801 DUP6 DUP7 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0xB68 DUP15 PUSH2 0x3F1E DUP9 PUSH2 0x2801 DUP9 PUSH1 0x2 PUSH2 0x1558 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x52BD JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x52B8 JUMPI POP SWAP8 POP PUSH2 0x15E7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x52D7 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x52D7 JUMPI POP SWAP8 POP PUSH2 0x15E7 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x5264 JUMP JUMPDEST POP PUSH2 0x52EB PUSH2 0x142 PUSH2 0x28E0 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5326 PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x535A JUMPI POP PUSH2 0x5357 PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xCC1 JUMPI POP PUSH2 0xCC1 DUP3 PUSH1 0x0 PUSH2 0x538F PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x53C3 JUMPI POP PUSH2 0x53C0 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x1082 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xCC1 JUMPI POP PUSH1 0x0 PUSH2 0xCC1 JUMP JUMPDEST INVALID JUMPDEST DUP1 CALLDATALOAD PUSH2 0x86A DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x53ED JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5400 PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST PUSH2 0x5F12 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x5421 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2884 JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5424 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5450 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x545E PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x547F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2884 JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5482 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x54AE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x54C4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x54D7 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x5F12 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x54EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x4 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH1 0x2 DUP2 LT PUSH2 0x86A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5545 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x157C DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5562 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x556D DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x557D DUP2 PUSH2 0x5F59 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x559C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x55A7 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x55B7 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x55E2 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x55ED DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x55FD DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x561B DUP2 PUSH2 0x5F6E JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x564A JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5655 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5677 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x568E JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56A1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x56AF PUSH2 0x53FB DUP3 PUSH2 0x5F39 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP7 ADD DUP12 DUP3 DUP4 DUP8 MUL DUP10 ADD ADD GT ISZERO PUSH2 0x56CF JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x56FA JUMPI DUP1 MLOAD PUSH2 0x56E6 DUP2 PUSH2 0x5F59 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP3 DUP2 ADD SWAP3 DUP2 ADD PUSH2 0x56D3 JUMP JUMPDEST POP DUP10 ADD MLOAD SWAP1 SWAP8 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5711 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x571E DUP7 DUP3 DUP8 ADD PUSH2 0x5440 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5740 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x157C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5769 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x577B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x578B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x57A7 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x57B3 DUP12 DUP4 DUP13 ADD PUSH2 0x53DD JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x57D6 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x57E3 DUP11 DUP3 DUP12 ADD PUSH2 0x549E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5803 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x157C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5843 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x157C DUP2 PUSH2 0x5F59 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5860 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x586B DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5886 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5892 DUP6 DUP3 DUP7 ADD PUSH2 0x549E JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x58AD JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x157C DUP4 DUP4 PUSH2 0x5507 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58CB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x58D5 DUP6 DUP6 PUSH2 0x5507 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x58F0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x571E DUP7 DUP3 DUP8 ADD PUSH2 0x5440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x590E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5918 DUP5 DUP5 PUSH2 0x5507 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x593C JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5946 DUP6 DUP6 PUSH2 0x5507 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x596E JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x157C DUP4 DUP4 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x598A JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5994 DUP5 DUP5 PUSH2 0x5516 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x59AF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5892 DUP6 DUP3 DUP7 ADD PUSH2 0x5440 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x59CF JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x58D5 DUP6 DUP6 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x59EB JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5918 DUP5 DUP5 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5A09 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5946 DUP6 DUP6 PUSH2 0x5516 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5A28 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5A3F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP PUSH2 0x120 DUP1 DUP4 DUP11 SUB SLT ISZERO PUSH2 0x5A55 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5A5E DUP2 PUSH2 0x5F12 JUMP JUMPDEST SWAP1 POP PUSH2 0x5A6A DUP10 DUP5 PUSH2 0x5525 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5A79 DUP10 PUSH1 0x20 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5A8B DUP10 PUSH1 0x40 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5ABB DUP10 PUSH1 0xC0 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5ACD DUP10 PUSH1 0xE0 DUP6 ADD PUSH2 0x53D2 JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x5AE5 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x5AF1 DUP12 DUP3 DUP8 ADD PUSH2 0x549E JUMP JUMPDEST DUP3 DUP5 ADD MSTORE POP POP DUP1 SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5B0E JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x5B1B DUP8 DUP3 DUP9 ADD PUSH2 0x53DD JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B43 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B5B JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5B74 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5B98 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x5BB8 DUP2 PUSH2 0x5F59 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BD4 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x157C DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BF1 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5BFC DUP2 PUSH2 0x5F6E JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5C3B JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5C1F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5C6B JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x5C4F JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5C7C JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5D5C JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x5D37 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x157C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C0C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x5D8E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5C0C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x17ED DUP2 DUP6 PUSH2 0x5C0C JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x15E7 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C46 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x157C PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5C46 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x15E7 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5C0C JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x5F31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x5F4F JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xBDF JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDC 0xC3 SIGNEXTEND CALL 0xAA SHL AND 0xAE PUSH11 0xD0C83C0807514F1E6FDBE6 PUSH14 0x9E246A013CE46BA54D53BF64736F PUSH13 0x634300070100336BFB689528FA SWAP7 0xEC BYTE 0xD6 PUSH17 0xAD6D6064BE1AE96BFD5D2EE35C837FD0FE 0xC GT SWAP6 SWAP11 ", + "sourceMap": "1168:2424:56:-:0;;;1341:337;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1531:5;1538:19;1559:39;;;;;;;;:::i;:::-;-1:-1:-1;;1559:39:56;;;;;;;;;;;;;;1942:19:39;;2492:5:31;;1143:4:44;;1559:39:56;;1119:31:44;2336:1:39;1942:19;2317:20;2347:38;;;;2424:36;;;2470:38;;;;3172:40;;;2317:20;;-1:-1:-1;3172:40:39;3347:34;3172:40;3347:19;;;;;;;:34;;:::i;:::-;3322:59;;-1:-1:-1;;;;;;3322:59:39;;;3920:36;;;3982:20;;4015:40;;;4240:34;3920:36;4240:19;;;;;;;:34;;:::i;:::-;-1:-1:-1;;;;;;4215:59:39;;;;;;;;4429:39;;;;4481:32;;2049:46:38;;;;;-1:-1:-1;;1162:14:44;;;;;::::1;::::0;-1:-1:-1;2509:42:31;;;;;;;::::2;::::0;-1:-1:-1;;1652:15:32;1337:7;1652:48;1625:75;;1610:25:56;;::::1;::::0;:8:::1;::::0;:25:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;1645:26:56;;::::1;::::0;:12:::1;::::0;:26:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1341:337:::0;;;;1168:2424;;2737:1366:40;3232:11;;2514:66;3465:34;;;2790:19;;3768:2;3752:19;;3238:4;2790:19;3736:36;3872:24;;;3721:51;-1:-1:-1;4030:66:40;-1:-1:-1;;;;;4039:25:40;;;;11595:3:10;4030:8:40;:66::i;:::-;2737:1366;;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;1437:126::-;1484:28;1492:9;-1:-1:-1;;;1484:7:10;:28::i;:::-;1437:126;:::o;1670:3378::-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;1168:2424:56;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1168:2424:56;;;-1:-1:-1;1168:2424:56;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;398:444:-1;;511:3;504:4;496:6;492:17;488:27;478:2;;-1:-1;;519:12;478:2;553:13;;-1:-1;;;;;2233:30;;;2230:2;;;-1:-1;;2266:12;2230:2;1899;1893:9;2407:4;2339:9;2320:17;;-1:-1;;2316:33;1925:17;;;;1985:34;;;2021:22;;;1982:62;1979:2;;;-1:-1;;2047:12;1979:2;2077:10;1899:2;2066:22;;572:74;;;666:6;659:5;652:21;770:3;2407:4;761:6;694;752:16;;749:25;746:2;;;787:1;;777:12;746:2;2972:1;2963:10;;2979:101;2993:6;2990:1;2987:13;2979:101;;;3060:11;;;;;3054:18;3041:11;;;;;3034:39;3008:10;;;;2979:101;;;3095:6;3092:1;3089:13;3086:2;;;2972:1;2407:4;3151:6;728:5;3142:16;;3135:27;3086:2;;;;;471:371;;;;:::o;850:980::-;;;;;1091:3;1079:9;1070:7;1066:23;1062:33;1059:2;;;-1:-1;;1098:12;1059:2;325:6;319:13;337:48;379:5;337:48;:::i;:::-;1276:2;1366:22;;123:13;1150:89;;-1:-1;141:73;123:13;141:73;:::i;:::-;1456:2;1441:18;;1435:25;1284:114;;-1:-1;;;;;;1469:30;;;1466:2;;;-1:-1;;1502:12;1466:2;1532:74;1598:7;1589:6;1578:9;1574:22;1532:74;:::i;:::-;1522:84;;1664:2;1653:9;1649:18;1643:25;1629:39;;1480:18;1680:6;1677:30;1674:2;;;-1:-1;;1710:12;1674:2;;1740:74;1806:7;1797:6;1786:9;1782:22;1740:74;:::i;:::-;1730:84;;;1053:777;;;;;;;:::o;3183:197::-;-1:-1;;;;;2840:54;;3282:75;;3272:2;;3371:1;;3361:12;3266:114;1168:2424:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "4153": [ + { + "length": 32, + "start": 1373 + } + ], + "4288": [ + { + "length": 32, + "start": 562 + }, + { + "length": 32, + "start": 603 + } + ], + "5049": [ + { + "length": 32, + "start": 1411 + } + ], + "5124": [ + { + "length": 32, + "start": 488 + }, + { + "length": 32, + "start": 1851 + } + ], + "5126": [ + { + "length": 32, + "start": 1796 + } + ], + "5128": [ + { + "length": 32, + "start": 521 + }, + { + "length": 32, + "start": 1887 + } + ], + "5130": [ + { + "length": 32, + "start": 1763 + } + ], + "6003": [ + { + "length": 32, + "start": 1491 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100de5760003560e01c80636634b7531161008c578063739238d611610066578063739238d61461018f578063851c1bb3146101975780638d928af8146101b7578063aaabadc5146101bf576100de565b80636634b7531461014757806366b59f6c146101675780636c57f5a914610187576100de565b80632f2770db116100bd5780632f2770db1461012d5780633f819b6f1461013757806354fd4d501461013f576100de565b8062c194db146100e3578063174481fa146101015780632da47c4014610117575b600080fd5b6100eb6101c7565b6040516100f89190611050565b60405180910390f35b6101096101e6565b6040516100f8929190610fe9565b61011f61022c565b6040516100f89291906111e8565b610135610296565b005b6100eb6102fb565b6100eb6103af565b61015a610155366004610cdd565b61042b565b6040516100f89190611010565b61017a610175366004610d71565b610456565b6040516100f89190611063565b61015a610552565b61017a61055b565b6101aa6101a5366004610d15565b61057f565b6040516100f8919061101b565b61017a6105d1565b61017a6105f5565b60606101e1604051806020016040528060008152506106db565b905090565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009091565b600080427f000000000000000000000000000000000000000000000000000000000000000081101561028857807f000000000000000000000000000000000000000000000000000000000000000003925062278d009150610291565b60009250600091505b509091565b61029e6107b4565b6102a66107fd565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790556040517f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d5090600090a1565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b5050505050905090565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600080600061046361022c565b91509150610542604051806101c0016040528061047e6105d1565b73ffffffffffffffffffffffffffffffffffffffff1681526020016104a161055b565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018a81526020018981526020018881526020018b81526020018781526020018481526020018381526020018673ffffffffffffffffffffffffffffffffffffffff16815260200161051c6102fb565b905260405161052e9190602001611084565b604051602081830303815290604052610812565b9c9b505050505050505050505050565b60015460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016105b4929190610fb9565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105ff6105d1565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e19190610d55565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506106d573ffffffffffffffffffffffffffffffffffffffff831615156101ac6108a6565b50919050565b8051604080517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000818101858101848101602090810190965280855293957f00000000000000000000000000000000000000000000000000000000000000009592947f000000000000000000000000000000000000000000000000000000000000000094938801866000828a3c846000888301883c50602089810190898501016107a68183866108b8565b505050505050505050919050565b60006107e36000357fffffffff000000000000000000000000000000000000000000000000000000001661057f565b90506107fa6107f28233610932565b6101916108a6565b50565b610810610808610552565b1560d36108a6565b565b600061081c6107fd565b6000610827836109d1565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555192935090917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a292915050565b816108b4576108b481610a19565b5050565b5b602081106108f65781518352602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016108b9565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b600061093c6105f5565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161097893929190611024565b60206040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190610cf9565b90505b92915050565b600060606109de836106db565b905060008151602083016000f0905073ffffffffffffffffffffffffffffffffffffffff8116610a12573d6000803e3d6000fd5b9392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818106603090810160081b83860601918390049283060160101b016642414c230000300160c81b6044526107fa917f42414c0000000000000000000000000000000000000000000000000000000000906242414c90606490fd5b80356109cb8161123d565b600082601f830112610ac3578081fd5b8135610ad6610ad18261121d565b6111f6565b818152915060208083019084810181840286018201871015610af757600080fd5b60005b84811015610b1f578135610b0d8161125f565b84529282019290820190600101610afa565b505050505092915050565b600082601f830112610b3a578081fd5b8135610b48610ad18261121d565b818152915060208083019084810181840286018201871015610b6957600080fd5b60005b84811015610b1f578135610b7f8161123d565b84529282019290820190600101610b6c565b600082601f830112610ba1578081fd5b8135610baf610ad18261121d565b818152915060208083019084810181840286018201871015610bd057600080fd5b60005b84811015610b1f578135610be68161123d565b84529282019290820190600101610bd3565b600082601f830112610c08578081fd5b8135610c16610ad18261121d565b818152915060208083019084810181840286018201871015610c3757600080fd5b60005b84811015610b1f57813584529282019290820190600101610c3a565b600082601f830112610c66578081fd5b813567ffffffffffffffff811115610c7c578182fd5b610cad60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016111f6565b9150808252836020828501011115610cc457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610cee578081fd5b8135610a128161123d565b600060208284031215610d0a578081fd5b8151610a128161125f565b600060208284031215610d26578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a12578182fd5b600060208284031215610d66578081fd5b8151610a128161123d565b60008060008060008060008060006101208a8c031215610d8f578485fd5b893567ffffffffffffffff80821115610da6578687fd5b610db28d838e01610c56565b9a5060208c0135915080821115610dc7578687fd5b610dd38d838e01610c56565b995060408c0135915080821115610de8578687fd5b610df48d838e01610b2a565b985060608c0135975060808c0135915080821115610e10578687fd5b610e1c8d838e01610b91565b965060a08c0135915080821115610e31578586fd5b610e3d8d838e01610bf8565b955060c08c0135915080821115610e52578485fd5b50610e5f8c828d01610ab3565b93505060e08a01359150610e778b6101008c01610aa8565b90509295985092959850929598565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208085019450808401835b83811015610ed1578151151587529582019590820190600101610eb3565b509495945050505050565b6000815180845260208085019450808401835b83811015610ed157815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610eef565b6000815180845260208085019450808401835b83811015610ed157815187529582019590820190600101610f34565b60008151808452815b81811015610f7557602081850181015186830182015201610f59565b81811115610f865782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b6000602082526109c86020830184610f50565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060208252611098602083018451610e86565b60208301516110aa6040840182610e86565b5060408301516101c08060608501526110c76101e0850183610f50565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030160808701526111038483610f50565b935060808701519150808685030160a08701526111208483610edc565b935060a08701519150808685030160c087015261113d8483610edc565b935060c08701519150808685030160e087015261115a8483610f21565b935060e087015191506101008187860301818801526111798584610ea0565b908801516101208881019190915288015161014080890191909152880151610160808901919091528801516101808089019190915288015190945091506101a06111c581880184610e86565b8701518685039091018387015290506111de8382610f50565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561121557600080fd5b604052919050565b600067ffffffffffffffff821115611233578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff811681146107fa57600080fd5b80151581146107fa57600080fdfea2646970667358221220139c11f5919330a49b431e9ec65da6abcaecfa2895b17cea9c855010670ff62c64736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xDE JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6634B753 GT PUSH2 0x8C JUMPI DUP1 PUSH4 0x739238D6 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x739238D6 EQ PUSH2 0x18F JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x197 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1B7 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x1BF JUMPI PUSH2 0xDE JUMP JUMPDEST DUP1 PUSH4 0x6634B753 EQ PUSH2 0x147 JUMPI DUP1 PUSH4 0x66B59F6C EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0x187 JUMPI PUSH2 0xDE JUMP JUMPDEST DUP1 PUSH4 0x2F2770DB GT PUSH2 0xBD JUMPI DUP1 PUSH4 0x2F2770DB EQ PUSH2 0x12D JUMPI DUP1 PUSH4 0x3F819B6F EQ PUSH2 0x137 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x13F JUMPI PUSH2 0xDE JUMP JUMPDEST DUP1 PUSH3 0xC194DB EQ PUSH2 0xE3 JUMPI DUP1 PUSH4 0x174481FA EQ PUSH2 0x101 JUMPI DUP1 PUSH4 0x2DA47C40 EQ PUSH2 0x117 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xEB PUSH2 0x1C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x1050 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x109 PUSH2 0x1E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP3 SWAP2 SWAP1 PUSH2 0xFE9 JUMP JUMPDEST PUSH2 0x11F PUSH2 0x22C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP3 SWAP2 SWAP1 PUSH2 0x11E8 JUMP JUMPDEST PUSH2 0x135 PUSH2 0x296 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xEB PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xEB PUSH2 0x3AF JUMP JUMPDEST PUSH2 0x15A PUSH2 0x155 CALLDATASIZE PUSH1 0x4 PUSH2 0xCDD JUMP JUMPDEST PUSH2 0x42B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x1010 JUMP JUMPDEST PUSH2 0x17A PUSH2 0x175 CALLDATASIZE PUSH1 0x4 PUSH2 0xD71 JUMP JUMPDEST PUSH2 0x456 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x1063 JUMP JUMPDEST PUSH2 0x15A PUSH2 0x552 JUMP JUMPDEST PUSH2 0x17A PUSH2 0x55B JUMP JUMPDEST PUSH2 0x1AA PUSH2 0x1A5 CALLDATASIZE PUSH1 0x4 PUSH2 0xD15 JUMP JUMPDEST PUSH2 0x57F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF8 SWAP2 SWAP1 PUSH2 0x101B JUMP JUMPDEST PUSH2 0x17A PUSH2 0x5D1 JUMP JUMPDEST PUSH2 0x17A PUSH2 0x5F5 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1E1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x20 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE POP PUSH2 0x6DB JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH32 0x0 SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 TIMESTAMP PUSH32 0x0 DUP2 LT ISZERO PUSH2 0x288 JUMPI DUP1 PUSH32 0x0 SUB SWAP3 POP PUSH3 0x278D00 SWAP2 POP PUSH2 0x291 JUMP JUMPDEST PUSH1 0x0 SWAP3 POP PUSH1 0x0 SWAP2 POP JUMPDEST POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0x29E PUSH2 0x7B4 JUMP JUMPDEST PUSH2 0x2A6 PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP2 OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3A5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x37A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3A5 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x388 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x100 PUSH1 0x1 DUP8 AND ISZERO MUL ADD SWAP1 SWAP5 AND DUP6 SWAP1 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x3A5 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x37A JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x3A5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x463 PUSH2 0x22C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x542 PUSH1 0x40 MLOAD DUP1 PUSH2 0x1C0 ADD PUSH1 0x40 MSTORE DUP1 PUSH2 0x47E PUSH2 0x5D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x4A1 PUSH2 0x55B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP15 DUP2 MSTORE PUSH1 0x20 ADD DUP14 DUP2 MSTORE PUSH1 0x20 ADD DUP13 DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD DUP9 DUP2 MSTORE PUSH1 0x20 ADD DUP12 DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x51C PUSH2 0x2FB JUMP JUMPDEST SWAP1 MSTORE PUSH1 0x40 MLOAD PUSH2 0x52E SWAP2 SWAP1 PUSH1 0x20 ADD PUSH2 0x1084 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x812 JUMP JUMPDEST SWAP13 SWAP12 POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x5B4 SWAP3 SWAP2 SWAP1 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5FF PUSH2 0x5D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x644 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x658 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1 SWAP2 SWAP1 PUSH2 0xD55 JUMP JUMPDEST DUP1 MLOAD PUSH32 0x602038038060206000396000F3FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE DUP1 DUP4 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x20 DUP2 ADD DUP5 DUP5 CREATE SWAP1 DUP5 MSTORE SWAP2 POP PUSH2 0x6D5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND ISZERO ISZERO PUSH2 0x1AC PUSH2 0x8A6 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH32 0x0 DUP2 DUP2 ADD DUP6 DUP2 ADD DUP5 DUP2 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP1 SWAP7 MSTORE DUP1 DUP6 MSTORE SWAP4 SWAP6 PUSH32 0x0 SWAP6 SWAP3 SWAP5 PUSH32 0x0 SWAP5 SWAP4 DUP9 ADD DUP7 PUSH1 0x0 DUP3 DUP11 EXTCODECOPY DUP5 PUSH1 0x0 DUP9 DUP4 ADD DUP9 EXTCODECOPY POP PUSH1 0x20 DUP10 DUP2 ADD SWAP1 DUP10 DUP6 ADD ADD PUSH2 0x7A6 DUP2 DUP4 DUP7 PUSH2 0x8B8 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E3 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x57F JUMP JUMPDEST SWAP1 POP PUSH2 0x7FA PUSH2 0x7F2 DUP3 CALLER PUSH2 0x932 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x8A6 JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x810 PUSH2 0x808 PUSH2 0x552 JUMP JUMPDEST ISZERO PUSH1 0xD3 PUSH2 0x8A6 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x81C PUSH2 0x7FD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x827 DUP4 PUSH2 0x9D1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC SWAP2 SWAP1 LOG2 SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH2 0x8B4 JUMPI PUSH2 0x8B4 DUP2 PUSH2 0xA19 JUMP JUMPDEST POP POP JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP2 LT PUSH2 0x8F6 JUMPI DUP2 MLOAD DUP4 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD PUSH2 0x8B9 JUMP JUMPDEST SWAP1 MLOAD DUP3 MLOAD PUSH1 0x20 SWAP3 SWAP1 SWAP3 SUB PUSH2 0x100 EXP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP1 NOT SWAP1 SWAP2 AND SWAP2 AND OR SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x93C PUSH2 0x5F5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x978 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x990 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x9A4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x9C8 SWAP2 SWAP1 PUSH2 0xCF9 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x9DE DUP4 PUSH2 0x6DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP2 MLOAD PUSH1 0x20 DUP4 ADD PUSH1 0x0 CREATE SWAP1 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xA12 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP4 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL DUP4 DUP7 MOD ADD SWAP2 DUP4 SWAP1 DIV SWAP3 DUP4 MOD ADD PUSH1 0x10 SHL ADD PUSH7 0x42414C23000030 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH2 0x7FA SWAP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 SWAP1 PUSH3 0x42414C SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x9CB DUP2 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xAC3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xAD6 PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST PUSH2 0x11F6 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xAF7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD PUSH2 0xB0D DUP2 PUSH2 0x125F JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xAFA JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xB3A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xB48 PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xB69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD PUSH2 0xB7F DUP2 PUSH2 0x123D JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xB6C JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xBA1 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xBAF PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD PUSH2 0xBE6 DUP2 PUSH2 0x123D JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xBD3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC08 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xC16 PUSH2 0xAD1 DUP3 PUSH2 0x121D JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0xC37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0xB1F JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xC3A JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0xC66 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC7C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0xCAD PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x11F6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xCC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCEE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA12 DUP2 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD0A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA12 DUP2 PUSH2 0x125F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD26 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0xA12 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xD66 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA12 DUP2 PUSH2 0x123D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x120 DUP11 DUP13 SUB SLT ISZERO PUSH2 0xD8F JUMPI DUP5 DUP6 REVERT JUMPDEST DUP10 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0xDA6 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xDB2 DUP14 DUP4 DUP15 ADD PUSH2 0xC56 JUMP JUMPDEST SWAP11 POP PUSH1 0x20 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xDC7 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xDD3 DUP14 DUP4 DUP15 ADD PUSH2 0xC56 JUMP JUMPDEST SWAP10 POP PUSH1 0x40 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xDE8 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xDF4 DUP14 DUP4 DUP15 ADD PUSH2 0xB2A JUMP JUMPDEST SWAP9 POP PUSH1 0x60 DUP13 ADD CALLDATALOAD SWAP8 POP PUSH1 0x80 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xE10 JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0xE1C DUP14 DUP4 DUP15 ADD PUSH2 0xB91 JUMP JUMPDEST SWAP7 POP PUSH1 0xA0 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xE31 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH2 0xE3D DUP14 DUP4 DUP15 ADD PUSH2 0xBF8 JUMP JUMPDEST SWAP6 POP PUSH1 0xC0 DUP13 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0xE52 JUMPI DUP5 DUP6 REVERT JUMPDEST POP PUSH2 0xE5F DUP13 DUP3 DUP14 ADD PUSH2 0xAB3 JUMP JUMPDEST SWAP4 POP POP PUSH1 0xE0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0xE77 DUP12 PUSH2 0x100 DUP13 ADD PUSH2 0xAA8 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 POP SWAP3 SWAP6 SWAP9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED1 JUMPI DUP2 MLOAD ISZERO ISZERO DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xEB3 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED1 JUMPI DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xED1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xF34 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF75 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0xF59 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0xF86 JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x9C8 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xF50 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1098 PUSH1 0x20 DUP4 ADD DUP5 MLOAD PUSH2 0xE86 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x10AA PUSH1 0x40 DUP5 ADD DUP3 PUSH2 0xE86 JUMP JUMPDEST POP PUSH1 0x40 DUP4 ADD MLOAD PUSH2 0x1C0 DUP1 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x10C7 PUSH2 0x1E0 DUP6 ADD DUP4 PUSH2 0xF50 JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP1 DUP7 DUP6 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x1103 DUP5 DUP4 PUSH2 0xF50 JUMP JUMPDEST SWAP4 POP PUSH1 0x80 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xA0 DUP8 ADD MSTORE PUSH2 0x1120 DUP5 DUP4 PUSH2 0xEDC JUMP JUMPDEST SWAP4 POP PUSH1 0xA0 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x113D DUP5 DUP4 PUSH2 0xEDC JUMP JUMPDEST SWAP4 POP PUSH1 0xC0 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP7 DUP6 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x115A DUP5 DUP4 PUSH2 0xF21 JUMP JUMPDEST SWAP4 POP PUSH1 0xE0 DUP8 ADD MLOAD SWAP2 POP PUSH2 0x100 DUP2 DUP8 DUP7 SUB ADD DUP2 DUP9 ADD MSTORE PUSH2 0x1179 DUP6 DUP5 PUSH2 0xEA0 JUMP JUMPDEST SWAP1 DUP9 ADD MLOAD PUSH2 0x120 DUP9 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD PUSH2 0x140 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD PUSH2 0x160 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD PUSH2 0x180 DUP1 DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP9 ADD MLOAD SWAP1 SWAP5 POP SWAP2 POP PUSH2 0x1A0 PUSH2 0x11C5 DUP2 DUP9 ADD DUP5 PUSH2 0xE86 JUMP JUMPDEST DUP8 ADD MLOAD DUP7 DUP6 SUB SWAP1 SWAP2 ADD DUP4 DUP8 ADD MSTORE SWAP1 POP PUSH2 0x11DE DUP4 DUP3 PUSH2 0xF50 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x1215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1233 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SGT SWAP13 GT CREATE2 SWAP2 SWAP4 ADDRESS LOG4 SWAP12 NUMBER 0x1E SWAP15 0xC6 0x5D 0xA6 0xAB 0xCA 0xEC STATICCALL 0x28 SWAP6 0xB1 PUSH29 0xEA9C855010670FF62C64736F6C63430007010033000000000000000000 ", + "sourceMap": "1168:2424:56:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4928:114:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4663:167;;;:::i;:::-;;;;;;;;:::i;2066:887:32:-;;;:::i;:::-;;;;;;;;:::i;2794:143:31:-;;;:::i;:::-;;1788:107:56;;;:::i;1684:98::-;;;:::i;2564:127:31:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1967:1623:56:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2697:91:31:-;;;:::i;3046:143::-;;;:::i;2607:430:38:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1247:79:44:-;;;:::i;1386:109::-;;;:::i;4928:114:39:-;4976:12;5007:28;;;;;;;;;;;;;:24;:28::i;:::-;5000:35;;4928:114;:::o;4663:167::-;4776:22;4800;4663:167;;:::o;2066:887:32:-;2120:27;;2211:15;2254:24;2240:38;;2236:711;;;2577:11;2550:24;:38;2528:60;;1401:7;2637:46;;2236:711;;;2897:1;2875:23;;2935:1;2912:24;;2236:711;2066:887;;;:::o;2794:143:31:-;2276:21:38;:19;:21::i;:::-;2854:16:31::1;:14;:16::i;:::-;2893:4;2881:16:::0;;;::::1;::::0;::::1;::::0;;2913:17:::1;::::0;::::1;::::0;2881:9:::1;::::0;2913:17:::1;2794:143::o:0;1788:107:56:-;1876:12;1869:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:13;;1869:19;;1876:12;;1869:19;;1876:12;1869:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1788:107;:::o;1684:98::-;1767:8;1760:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1735:13;;1760:15;;1767:8;;1760:15;;1767:8;1760:15;;;;;;;;;;;;;;;;;;;;;;;;2564:127:31;2660:24;;2637:4;2660:24;;;;;;;;;;;;;;2564:127::o;1967:1623:56:-;2346:20;2379:27;2408:28;2440:23;:21;:23::i;:::-;2378:85;;;;2530:1039;2595:934;;;;;;;;2667:10;:8;:10::i;:::-;2595:934;;;;;;2728:35;:33;:35::i;:::-;2595:934;;;;;;2799:4;2595:934;;;;2841:6;2595:934;;;;2885:6;2595:934;;;;2936:13;2595:934;;;;3004:23;2595:934;;;;3090:31;2595:934;;;;3175:22;2595:934;;;;3246:17;2595:934;;;;3314:19;2595:934;;;;3385:20;2595:934;;;;3442:5;2595:934;;;;;;3486:16;:14;:16::i;:::-;2595:934;;2559:992;;;;;;;;:::i;:::-;;;;;;;;;;;;;2530:7;:1039::i;:::-;2473:1110;1967:1623;-1:-1:-1;;;;;;;;;;;;1967:1623:56:o;2697:91:31:-;2772:9;;;;2697:91;:::o;3046:143::-;3162:20;3046:143;:::o;2607:430:38:-;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;1247:79:44:-;1313:6;1247:79;:::o;1386:109::-;1432:11;1462:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2737:1366:40:-;3232:11;;2514:66;3465:34;;;2790:19;;3768:2;3752:19;;3238:4;2790:19;3736:36;3872:24;;;3721:51;-1:-1:-1;4030:66:40;4039:25;;;;;11595:3:10;4030:8:40;:66::i;:::-;2737:1366;;;;:::o;5172:2692:39:-;6433:22;;6807:4;6801:11;;6300:18;6180;6356:37;;;6485:38;;;6838:28;;;6862:2;6838:28;;;6825:42;;;6960:22;;;6801:11;;6120:22;;6180:18;;6240:22;;6300:18;7086:13;;6180:18;6088:29;7086:13;6120:22;7112:67;7265:17;7262:1;7242:17;7231:9;7227:33;7204:21;7192:91;-1:-1:-1;7675:2:39;7654:24;;;;7721:36;;;;7777:80;7721:36;7654:24;7837:19;7777:7;:80::i;:::-;5172:2692;;;;;;;;;;;;:::o;2420:181:38:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;:::-;2420:181;:::o;2943:97:31:-;2993:40;3003:12;:10;:12::i;:::-;3002:13;6506:3:10;2993:8:31;:40::i;:::-;2943:97::o;3195:277::-;3277:7;3296:16;:14;:16::i;:::-;3323:12;3338:30;3352:15;3338:13;:30::i;:::-;3379:24;;;:18;:24;;;;;;;;;;;:31;;;;3406:4;3379:31;;;3426:17;3323:45;;-1:-1:-1;3379:24:31;;3426:17;;3379:18;3426:17;3461:4;3195:277;-1:-1:-1;;3195:277:31:o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;8820:590:39:-;8980:165;8994:2;8987:3;:9;8980:165;;9063:10;;9050:24;;9109:2;9101:10;;;;9125:9;;;;8998;;8980:165;;;9273:10;;9328:11;;9208:2;:8;;;;9202:3;:15;:19;;9285:9;;9269:26;;;9324:22;;9372:21;9359:35;;9240:164::o;1501:178:44:-;1589:4;1612:15;:13;:15::i;:::-;:26;;;1639:8;1649:7;1666:4;1612:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1605:67;;1501:178;;;;;:::o;8054:630:39:-;8127:7;8146:25;8174:41;8199:15;8174:24;:41::i;:::-;8146:69;;8226:19;8332:12;8326:19;8321:2;8307:12;8303:21;8300:1;8293:53;8278:68;-1:-1:-1;8370:25:39;;;8366:283;;8564:16;8561:1;;8543:38;8608:16;8561:1;8598:27;8525:114;8666:11;8054:630;-1:-1:-1;;;8054:630:39:o;1437:126:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;3827:26;2997:18;;;;3044;;;3040:29;3859:2;3855:17;3823:50;3802:72;;3797:3;3793:82;4810:4;4803:26;1484:28;;;;1761:14;;5036:3;;5026:14;5:130:-1;72:20;;97:33;72:20;97:33;:::i;157:698::-;;271:3;264:4;256:6;252:17;248:27;238:2;;-1:-1;;279:12;238:2;326:6;313:20;348:77;363:61;417:6;363:61;:::i;:::-;348:77;:::i;:::-;453:21;;;339:86;-1:-1;497:4;510:14;;;;485:17;;;599;;;590:27;;;;587:36;-1:-1;584:2;;;636:1;;626:12;584:2;661:1;646:203;671:6;668:1;665:13;646:203;;;3270:6;3257:20;3282:30;3306:5;3282:30;:::i;:::-;739:47;;800:14;;;;828;;;;693:1;686:9;646:203;;;650:14;;;;;231:624;;;;:::o;889:752::-;;1021:3;1014:4;1006:6;1002:17;998:27;988:2;;-1:-1;;1029:12;988:2;1076:6;1063:20;1098:95;1113:79;1185:6;1113:79;:::i;1098:95::-;1221:21;;;1089:104;-1:-1;1265:4;1278:14;;;;1253:17;;;1367;;;1358:27;;;;1355:36;-1:-1;1352:2;;;1404:1;;1394:12;1352:2;1429:1;1414:221;1439:6;1436:1;1433:13;1414:221;;;3870:6;3857:20;3882:48;3924:5;3882:48;:::i;:::-;1507:65;;1586:14;;;;1614;;;;1461:1;1454:9;1414:221;;1682:770;;1820:3;1813:4;1805:6;1801:17;1797:27;1787:2;;-1:-1;;1828:12;1787:2;1875:6;1862:20;1897:101;1912:85;1990:6;1912:85;:::i;1897:101::-;2026:21;;;1888:110;-1:-1;2070:4;2083:14;;;;2058:17;;;2172;;;2163:27;;;;2160:36;-1:-1;2157:2;;;2209:1;;2199:12;2157:2;2234:1;2219:227;2244:6;2241:1;2238:13;2219:227;;;4043:6;4030:20;4055:54;4103:5;4055:54;:::i;:::-;2312:71;;2397:14;;;;2425;;;;2266:1;2259:9;2219:227;;2478:707;;2595:3;2588:4;2580:6;2576:17;2572:27;2562:2;;-1:-1;;2603:12;2562:2;2650:6;2637:20;2672:80;2687:64;2744:6;2687:64;:::i;2672:80::-;2780:21;;;2663:89;-1:-1;2824:4;2837:14;;;;2812:17;;;2926;;;2917:27;;;;2914:36;-1:-1;2911:2;;;2963:1;;2953:12;2911:2;2988:1;2973:206;2998:6;2995:1;2992:13;2973:206;;;4639:20;;3066:50;;3130:14;;;;3158;;;;3020:1;3013:9;2973:206;;4122:442;;4224:3;4217:4;4209:6;4205:17;4201:27;4191:2;;-1:-1;;4232:12;4191:2;4279:6;4266:20;24381:18;24373:6;24370:30;24367:2;;;-1:-1;;24403:12;24367:2;4301:65;24544:4;24476:9;4217:4;24461:6;24457:17;24453:33;24534:15;4301:65;:::i;:::-;4292:74;;4386:6;4379:5;4372:21;4490:3;24544:4;4481:6;4414;4472:16;;4469:25;4466:2;;;4507:1;;4497:12;4466:2;30563:6;24544:4;4414:6;4410:17;24544:4;4448:5;4444:16;30540:30;30619:1;30601:16;;;24544:4;30601:16;30594:27;4448:5;4184:380;-1:-1;;4184:380::o;4709:241::-;;4813:2;4801:9;4792:7;4788:23;4784:32;4781:2;;;-1:-1;;4819:12;4781:2;85:6;72:20;97:33;124:5;97:33;:::i;4957:257::-;;5069:2;5057:9;5048:7;5044:23;5040:32;5037:2;;;-1:-1;;5075:12;5037:2;3405:6;3399:13;3417:30;3441:5;3417:30;:::i;5221:239::-;;5324:2;5312:9;5303:7;5299:23;5295:32;5292:2;;;-1:-1;;5330:12;5292:2;3538:6;3525:20;27964:66;31505:5;27953:78;31481:5;31478:34;31468:2;;-1:-1;;31516:12;5467:303;;5602:2;5590:9;5581:7;5577:23;5573:32;5570:2;;;-1:-1;;5608:12;5570:2;3698:6;3692:13;3710:53;3757:5;3710:53;:::i;5777:2069::-;;;;;;;;;;6170:3;6158:9;6149:7;6145:23;6141:33;6138:2;;;-1:-1;;6177:12;6138:2;6235:17;6222:31;6273:18;;6265:6;6262:30;6259:2;;;-1:-1;;6295:12;6259:2;6325:63;6380:7;6371:6;6360:9;6356:22;6325:63;:::i;:::-;6315:73;;6453:2;6442:9;6438:18;6425:32;6411:46;;6273:18;6469:6;6466:30;6463:2;;;-1:-1;;6499:12;6463:2;6529:63;6584:7;6575:6;6564:9;6560:22;6529:63;:::i;:::-;6519:73;;6657:2;6646:9;6642:18;6629:32;6615:46;;6273:18;6673:6;6670:30;6667:2;;;-1:-1;;6703:12;6667:2;6733:93;6818:7;6809:6;6798:9;6794:22;6733:93;:::i;:::-;6723:103;;6863:2;6906:9;6902:22;4639:20;6871:63;;6999:3;6988:9;6984:19;6971:33;6957:47;;6273:18;7016:6;7013:30;7010:2;;;-1:-1;;7046:12;7010:2;7076:99;7167:7;7158:6;7147:9;7143:22;7076:99;:::i;:::-;7066:109;;7240:3;7229:9;7225:19;7212:33;7198:47;;6273:18;7257:6;7254:30;7251:2;;;-1:-1;;7287:12;7251:2;7317:78;7387:7;7378:6;7367:9;7363:22;7317:78;:::i;:::-;7307:88;;7460:3;7449:9;7445:19;7432:33;7418:47;;6273:18;7477:6;7474:30;7471:2;;;-1:-1;;7507:12;7471:2;;7537:75;7604:7;7595:6;7584:9;7580:22;7537:75;:::i;:::-;7527:85;;;7649:3;7693:9;7689:22;4639:20;7658:63;;7777:53;7822:7;7758:3;7802:9;7798:22;7777:53;:::i;:::-;7767:63;;6132:1714;;;;;;;;;;;:::o;8641:103::-;28466:42;28455:54;8702:37;;8696:48::o;8896:646::-;;9070:5;25331:12;26711:6;26706:3;26699:19;26748:4;;26743:3;26739:14;9082:80;;26748:4;9230:5;24678:14;-1:-1;9269:251;9294:6;9291:1;9288:13;9269:251;;;9355:13;;27787;27780:21;11935:34;;7995:14;;;;26183;;;;9316:1;9309:9;9269:251;;;-1:-1;9526:10;;9004:538;-1:-1;;;;;9004:538::o;9589:745::-;;9802:5;25331:12;26711:6;26706:3;26699:19;26748:4;;26743:3;26739:14;9814:83;;26748:4;9983:5;24678:14;-1:-1;10022:290;10047:6;10044:1;10041:13;10022:290;;;10108:13;;28466:42;28455:54;12977:80;;8207:14;;;;26183;;;;10069:1;10062:9;10022:290;;11202:670;;11385:5;25331:12;26711:6;26706:3;26699:19;26748:4;;26743:3;26739:14;11397:83;;26748:4;11551:5;24678:14;-1:-1;11590:260;11615:6;11612:1;11609:13;11590:260;;;11676:13;;12163:37;;8613:14;;;;26183;;;;11637:1;11630:9;11590:260;;12526:343;;12668:5;25331:12;26711:6;26706:3;26699:19;-1:-1;30708:101;30722:6;30719:1;30716:13;30708:101;;;26748:4;30789:11;;;;;30783:18;30770:11;;;;;30763:39;30737:10;30708:101;;;30824:6;30821:1;30818:13;30815:2;;;-1:-1;26748:4;30880:6;26743:3;30871:16;;30864:27;30815:2;-1:-1;31161:2;31141:14;31157:7;31137:28;12825:39;;;;26748:4;12825:39;;12616:253;-1:-1;;12616:253::o;18569:387::-;12163:37;;;27964:66;27953:78;18820:2;18811:12;;12458:56;18920:11;;;18711:245::o;18963:333::-;28466:42;28455:54;;;8702:37;;28455:54;;19282:2;19267:18;;8702:37;19118:2;19103:18;;19089:207::o;19303:210::-;27787:13;;27780:21;11935:34;;19424:2;19409:18;;19395:118::o;19520:222::-;12163:37;;;19647:2;19632:18;;19618:124::o;19749:444::-;12163:37;;;28466:42;28455:54;;;20096:2;20081:18;;8702:37;28455:54;20179:2;20164:18;;8702:37;19932:2;19917:18;;19903:290::o;20200:306::-;;20345:2;20366:17;20359:47;20420:76;20345:2;20334:9;20330:18;20482:6;20420:76;:::i;20513:282::-;28466:42;28455:54;;;;12977:80;;20670:2;20655:18;;20641:154::o;21956:394::-;;22145:2;22166:17;22159:47;15334:78;22145:2;22134:9;22130:18;15311:16;15305:23;15334:78;:::i;:::-;22145:2;15499:5;15495:16;15489:23;15518:103;15606:14;22134:9;15606:14;15592:12;15518:103;:::i;:::-;;15606:14;15693:5;15689:16;15683:23;15236:6;;15726:14;22134:9;15726:14;15719:38;15772:73;15227:16;22134:9;15227:16;15826:12;15772:73;:::i;:::-;15764:81;;15726:14;15925:5;15921:16;15915:23;15974:14;;22134:9;15978:4;15974:14;;15958;22134:9;15958:14;15951:38;16004:73;16072:4;16058:12;16004:73;:::i;:::-;15996:81;;15958:14;16157:5;16153:16;16147:23;16127:43;;15974:14;22134:9;16210:4;16206:14;;16190;22134:9;16190:14;16183:38;16236:118;16349:4;16335:12;16236:118;:::i;:::-;16228:126;;16190:14;16441:5;16437:16;16431:23;16411:43;;15974:14;22134:9;16494:4;16490:14;;16474;22134:9;16474:14;16467:38;16520:124;16639:4;16625:12;16520:124;:::i;:::-;16512:132;;16474:14;16741:5;16737:16;16731:23;16711:43;;15974:14;22134:9;16794:4;16790:14;;16774;22134:9;16774:14;16767:38;16820:103;16918:4;16904:12;16820:103;:::i;:::-;16812:111;;16774:14;17028:5;17024:16;17018:23;16998:43;;17061:14;15974;22134:9;17081:4;17077:14;;17061;22134:9;17061:14;17054:38;17107:97;17199:4;17185:12;17107:97;:::i;:::-;17296:18;;;17290:25;17369:16;;;;12163:37;;;;17467:18;;17461:25;17540:16;;;;12163:37;;;;17640:18;;17634:25;17713:16;;;;12163:37;;;;17814:18;;17808:25;17887:16;;;;12163:37;;;;17973:18;;17967:25;17099:105;;-1:-1;17967:25;-1:-1;18046:16;17998:65;18046:16;;;17967:25;17998:65;:::i;:::-;18134:18;;18128:25;18191:14;;;;;;18173:16;;;18166:40;18128:25;-1:-1;18221:73;18195:4;18128:25;18221:73;:::i;:::-;22212:128;22116:234;-1:-1;;;;;;22116:234::o;22357:333::-;12163:37;;;22676:2;22661:18;;12163:37;22512:2;22497:18;;22483:207::o;22697:256::-;22759:2;22753:9;22785:17;;;22860:18;22845:34;;22881:22;;;22842:62;22839:2;;;22917:1;;22907:12;22839:2;22759;22926:22;22737:216;;-1:-1;22737:216::o;22960:301::-;;23116:18;23108:6;23105:30;23102:2;;;-1:-1;;23138:12;23102:2;-1:-1;23183:4;23171:17;;;23236:15;;23039:222::o;31178:117::-;28466:42;31265:5;28455:54;31240:5;31237:35;31227:2;;31286:1;;31276:12;31302:111;31383:5;27787:13;27780:21;31361:5;31358:32;31348:2;;31404:1;;31394:12" + }, + "methodIdentifiers": { + "create(string,string,address[],uint256,address[],uint256[],bool[],uint256,address)": "66b59f6c", + "disable()": "2f2770db", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getCreationCode()": "00c194db", + "getCreationCodeContracts()": "174481fa", + "getPauseConfiguration()": "2da47c40", + "getPoolVersion()": "3f819b6f", + "getProtocolFeePercentagesProvider()": "739238d6", + "getVault()": "8d928af8", + "isDisabled()": "6c57f5a9", + "isPoolFromFactory(address)": "6634b753", + "version()": "54fd4d50" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeePercentagesProvider\",\"name\":\"protocolFeeProvider\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"amplificationParameter\",\"type\":\"uint256\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRateCacheDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"exemptFromYieldProtocolFeeFlags\",\"type\":\"bool[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"contract ComposableStablePool\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCreationCodeContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractB\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseConfiguration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pauseWindowDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeePercentagesProvider\",\"outputs\":[{\"internalType\":\"contract IProtocolFeePercentagesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"create(string,string,address[],uint256,address[],uint256[],bool[],uint256,address)\":{\"details\":\"Deploys a new `ComposableStablePool`.\"},\"disable()\":{\"details\":\"Disable the factory, preventing the creation of more pools. Already existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getCreationCode()\":{\"details\":\"Returns the creation code of the contract this factory creates.\"},\"getCreationCodeContracts()\":{\"details\":\"Returns the two addresses where the creation code of the contract crated by this factory is stored.\"},\"getPauseConfiguration()\":{\"details\":\"Returns the current `TemporarilyPausable` configuration that will be applied to Pools created by this factory. `pauseWindowDuration` will decrease over time until it reaches zero, at which point both it and `bufferPeriodDuration` will be zero forever, meaning deployed Pools will not be pausable.\"},\"getPoolVersion()\":{\"details\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID. This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be updated at factory creation time.\"},\"isDisabled()\":{\"details\":\"Check whether the derived factory has been disabled.\"},\"isPoolFromFactory(address)\":{\"details\":\"Returns true if `pool` was created by this factory.\"},\"version()\":{\"details\":\"Returns a JSON representation of the contract version containing name, version number and task ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer\"},\"getVault()\":{\"notice\":\"Returns the Balancer Vault\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ComposableStablePoolFactory.sol\":\"ComposableStablePoolFactory\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol\":{\"keccak256\":\"0x1e5bca6b4fb897adc2458f65aa7abed8499dcf146ac5872c62544d91516867cb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://faa81254fe029b7ccd05635d6919da30bcb2114026996d10f6b51fc0e1f5b850\",\"dweb:/ipfs/Qmax3d2kq51xjt6hjYgskuXSrsB3fBZ4LAxBPRDDzbg8XD\"]},\"@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol\":{\"keccak256\":\"0x809d1ab36b1c4190aeffd3bad9c8a54880a9524c679e770ef185323dafaf6833\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a7d7e901eafecae0f4a8829bbb952cda0928f55290d368ab1370c92284d1469\",\"dweb:/ipfs/QmWDpNu8sZEwK3nmetwoaXrASta5RWqGZb7Z4TqHnMu7a1\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol\":{\"keccak256\":\"0xf5cf4f466955514781a7a7c571b905ed20168ea5b352963bcf5dd2d8fd4fd0e9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5e0c9405a058b809ceee4d89187c67926f20e2ec5cf9f5b77d14226780674b27\",\"dweb:/ipfs/QmXCbDCthmF34C7bzHMS15x8jV7kBXgmGe2Xwoop1b9NQ4\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol\":{\"keccak256\":\"0xa4d02a91c12fb22b14ef4180dfc3909f8de5d0fc0fdbffd437dc5b5bba9b3920\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b830017902f0da9ba73219585e18d31ca226af95900724961090be9bc3627d0a\",\"dweb:/ipfs/QmUTon5DFuK81ghM1baGD1Tq8izYM5iPzvVqkmRNuESWdF\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\":{\"keccak256\":\"0x19103ec3d00cbdbe25ef95721ba669cfcfaf046a60447a1b49986026e61fc57c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6765d86f532928df96af43990b5bccd20a0d2965707cb5e9d5afda9580be3fe4\",\"dweb:/ipfs/QmZmhVpWcGpFk9u4iy4srKs248c9FdAzjjmdMATexpqa6j\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\":{\"keccak256\":\"0x7f11733a5cd8f81c123c02f79d94ead7b65217021ebddafda10e796a25e1ef41\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7333060b9ff67e1fe734903d45b0c69ff8308b744f7c2fb8fbf630ae9d589bd6\",\"dweb:/ipfs/Qmf4rZHqsjfKDk5cSp38fv24SS8bAYJxYYQzn63TV6aPCo\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol\":{\"keccak256\":\"0xcd8cfa91f7e0c2bdbe1dceb37caddf211ce411e51de567594434da9ad2edc5e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58db2ea702a5eb370172402784e7e260337b61d1f8d5338142a1bde1b6718c4d\",\"dweb:/ipfs/QmZBogEchmaq3CEadrFidyWczyyuLT987wjZRHwAb6nPWg\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol\":{\"keccak256\":\"0x89a255ca839261cb76f41000593bf370b278be0e38126bed33b99c13ef9e85ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a164fd49722a933d5e0cf5b7eb38ed1aa2368fde971398a432cb4a4b04cf052a\",\"dweb:/ipfs/Qmc5peB5CrxoBjtet1NYooGrFTZii2CerinCkuRex8HRsq\"]},\"@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x7d764b70fdb9f4d2b07f2914ff5deec66f1bc193741017afef2fa14be57dc4ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8184f7aea4afaa63bff9352da02293d8423d71a394620d561c7e861fde12f921\",\"dweb:/ipfs/QmRdokGbResxbERJ72ofPNkK2PTivkBQ6W3mJPxTJ3oqBU\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":{\"keccak256\":\"0x65f93b8bac780e69e0ec41db98645323401686649dc61f9fa24d015d11084dfe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46b2c14982f82375159bb984548fd3bf4764972dd5cc0b2d40de82d0f3ccd28f\",\"dweb:/ipfs/QmPYfeoLCDwwDE6TDNRrnSQWniMgwuZSNJQ2Ycm3uRuBPs\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":{\"keccak256\":\"0x81972e1a01bb50f6ebed2d0aaeea8044f59adfd3b08dc17233919b28c41e838b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://385cc839791c8db486aa8b53cd0791f98786e88379f981b898b163f0f4a68e37\",\"dweb:/ipfs/QmP6SNqUMKtwgQUXuZzQAmUjxVKvojudz7fRFBzhcXqGdp\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol\":{\"keccak256\":\"0xc6390b858cdf8456ad71f0c4bbd9361cb8f49f4d0917eb0f9bdf762bc04447d3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://220cd28c7f8fc4f4b1082e0f831a48b6d6f998349675728f09ba93274858aa12\",\"dweb:/ipfs/QmPwjVq2mEuhaa295DYJneyMy4HFeFbrba3A2mTr3JcnXY\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol\":{\"keccak256\":\"0x77e86d8251dfa9c442b94dde2fabbd3aab7af34e64fb9bb2c8236c74da844f1f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b1d03e9151b3c4bc46166e6c28a8ee7bac9c9681e651e01688067566af55f184\",\"dweb:/ipfs/QmZacZh87hu4SQpsZvEaaRJRfLjP9fLwP8CK6pC8TxW7pE\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol\":{\"keccak256\":\"0x6c48b193602f6d6407e8fca3389fb32264a91f1de8ec33db209694e3bf9d0d13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1fa358f1537907cdd9f6b176f5a1effbbe9925429634038e9c533493ed824cab\",\"dweb:/ipfs/QmW1EcMLkMFuDKrPwWJ2qhBkmVzAUTVEMP75kw7D8XTjJf\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePool.sol\":{\"keccak256\":\"0x33631e52895167c71319b8f2590a1255db7001d76357b5f653369ae03a139789\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9ec51134aa4526891bb985d13f6291aa77f6ff5a87b877ece740fff4236790f2\",\"dweb:/ipfs/QmWZvDES1o9jJmbb7REBigcnCJk7N9MvEnw7KEH1BaSRCD\"]},\"contracts/ComposableStablePoolFactory.sol\":{\"keccak256\":\"0xc728d102d6a8862e703a016c8feed14ca4c68b58b19e537dd8eabfa6a171eecc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://86295b55b15ea5b97e889692fea5db0ecc4d7a03256b74748e09e6ec97320280\",\"dweb:/ipfs/QmUv6Zu5d8YNX2BHaMQiPH6o3kNhUwCBBRifRK6YNtXApM\"]},\"contracts/ComposableStablePoolProtocolFees.sol\":{\"keccak256\":\"0x71f593c69691edcea6b6debecc9c0629676033f4eadb3a059b1f7286cacf812e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f4952f66e9a2e1c60573e3cef1e340ee067aa28fae2be88f39ef1f48afc96c8e\",\"dweb:/ipfs/QmP6sKJV93SQYoPuxJRAhasxMPzuXz2G2PeA6DRhuThLFE\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/StablePoolAmplification.sol\":{\"keccak256\":\"0x35131a0fda0168332354ea2da753a595cedcdbc2663b83281fb86adbd10e2b15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c4a52f1ed61716bf879e3d232c47060196602de456fced19722bd38e2c967dc\",\"dweb:/ipfs/QmStzAS76tvSSvbofjV8EB9VrbcF7h8DwygTZGpuqzAavm\"]}},\"version\":1}" + } + }, + "contracts/ComposableStablePoolProtocolFees.sol": { + "ComposableStablePoolProtocolFees": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolFeePercentageCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "TokenRateCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRateProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cacheDuration", + "type": "uint256" + } + ], + "name": "TokenRateProviderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastJoinExitData", + "outputs": [ + { + "internalType": "uint256", + "name": "lastJoinExitAmplification", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitInvariant", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getProtocolFeePercentageCache", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolSwapFeeDelegation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRateCache", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setTokenRateCacheDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateProtocolFeePercentageCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "updateTokenRateCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": "ddf4627b", + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getLastJoinExitData()": "3c975d51", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeePercentageCache(uint256)": "70464016", + "getProtocolFeesCollector()": "d2946c2b", + "getProtocolSwapFeeDelegation()": "15b0015b", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getTokenRate(address)": "54dea00a", + "getTokenRateCache(address)": "7f1260d1", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "setTokenRateCacheDuration(address,uint256)": "f4b7964d", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a", + "updateProtocolFeePercentageCache()": "0da0669c", + "updateTokenRateCache(address)": "2df2c7c0" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeePercentageCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"TokenRateCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRateProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cacheDuration\",\"type\":\"uint256\"}],\"name\":\"TokenRateProviderSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastJoinExitData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastJoinExitAmplification\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitInvariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getProtocolFeePercentageCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolSwapFeeDelegation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRateCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expires\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setTokenRateCacheDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateProtocolFeePercentageCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateTokenRateCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeePercentageCache(uint256)\":{\"details\":\"Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the ProtocolFeePercentagesProvider.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getProtocolSwapFeeDelegation()\":{\"details\":\"Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider.\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"getTokenRate(address)\":{\"details\":\"Returns the rate for a given token. All token rates are fixed-point values with 18 decimals. If there is no rate provider for the provided token, it returns FixedPoint.ONE.\"},\"getTokenRateCache(address)\":{\"details\":\"Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate provider.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"setTokenRateCacheDuration(address,uint256)\":{\"details\":\"Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. Note this function also updates the current cached value.\",\"params\":{\"duration\":\"Number of seconds until the current token rate is fetched again.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"},\"updateProtocolFeePercentageCache()\":{\"details\":\"Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated). Updates the cache to the latest value set by governance.\"},\"updateTokenRateCache(address)\":{\"details\":\"Forces a rate cache hit for a token. It will revert if the requested token does not have an associated rate provider.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getLastJoinExitData()\":{\"notice\":\"Return the amplification factor and invariant as of the most recent join or exit (including BPT swaps)\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ComposableStablePoolProtocolFees.sol\":\"ComposableStablePoolProtocolFees\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":{\"keccak256\":\"0x65f93b8bac780e69e0ec41db98645323401686649dc61f9fa24d015d11084dfe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46b2c14982f82375159bb984548fd3bf4764972dd5cc0b2d40de82d0f3ccd28f\",\"dweb:/ipfs/QmPYfeoLCDwwDE6TDNRrnSQWniMgwuZSNJQ2Ycm3uRuBPs\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":{\"keccak256\":\"0x81972e1a01bb50f6ebed2d0aaeea8044f59adfd3b08dc17233919b28c41e838b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://385cc839791c8db486aa8b53cd0791f98786e88379f981b898b163f0f4a68e37\",\"dweb:/ipfs/QmP6SNqUMKtwgQUXuZzQAmUjxVKvojudz7fRFBzhcXqGdp\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePoolProtocolFees.sol\":{\"keccak256\":\"0x71f593c69691edcea6b6debecc9c0629676033f4eadb3a059b1f7286cacf812e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f4952f66e9a2e1c60573e3cef1e340ee067aa28fae2be88f39ef1f48afc96c8e\",\"dweb:/ipfs/QmP6sKJV93SQYoPuxJRAhasxMPzuXz2G2PeA6DRhuThLFE\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]}},\"version\":1}" + } + }, + "contracts/ComposableStablePoolRates.sol": { + "ComposableStablePoolRates": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "TokenRateCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRateProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cacheDuration", + "type": "uint256" + } + ], + "name": "TokenRateProviderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRateCache", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setTokenRateCacheDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "updateTokenRateCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeesCollector()": "d2946c2b", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getTokenRate(address)": "54dea00a", + "getTokenRateCache(address)": "7f1260d1", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "setTokenRateCacheDuration(address,uint256)": "f4b7964d", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a", + "updateTokenRateCache(address)": "2df2c7c0" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"TokenRateCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRateProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cacheDuration\",\"type\":\"uint256\"}],\"name\":\"TokenRateProviderSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRateCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expires\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setTokenRateCacheDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateTokenRateCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"getTokenRate(address)\":{\"details\":\"Returns the rate for a given token. All token rates are fixed-point values with 18 decimals. If there is no rate provider for the provided token, it returns FixedPoint.ONE.\"},\"getTokenRateCache(address)\":{\"details\":\"Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate provider.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"setTokenRateCacheDuration(address,uint256)\":{\"details\":\"Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. Note this function also updates the current cached value.\",\"params\":{\"duration\":\"Number of seconds until the current token rate is fetched again.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"},\"updateTokenRateCache(address)\":{\"details\":\"Forces a rate cache hit for a token. It will revert if the requested token does not have an associated rate provider.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ComposableStablePoolRates.sol\":\"ComposableStablePoolRates\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]}},\"version\":1}" + } + }, + "contracts/ComposableStablePoolStorage.sol": { + "ComposableStablePoolStorage": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeesCollector()": "d2946c2b", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ComposableStablePoolStorage.sol\":\"ComposableStablePoolStorage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]}},\"version\":1}" + } + }, + "contracts/StableMath.sol": { + "StableMath": { + "abi": [], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2588581303d1215ec62ad0b9b09fb046111751bada39f6c69c8e8a03a1fced964736f6c63430007010033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 PC DUP6 DUP2 ADDRESS RETURNDATASIZE SLT ISZERO 0xEC PUSH3 0xAD0B9B MULMOD 0xFB DIV PUSH2 0x1175 SHL 0xAD LOG3 SWAP16 PUSH13 0x69C8E8A03A1FCED964736F6C63 NUMBER STOP SMOD ADD STOP CALLER ", + "sourceMap": "1178:22308:60:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2588581303d1215ec62ad0b9b09fb046111751bada39f6c69c8e8a03a1fced964736f6c63430007010033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD2 PC DUP6 DUP2 ADDRESS RETURNDATASIZE SLT ISZERO 0xEC PUSH3 0xAD0B9B MULMOD 0xFB DIV PUSH2 0x1175 SHL 0xAD LOG3 SWAP16 PUSH13 0x69C8E8A03A1FCED964736F6C63 NUMBER STOP SMOD ADD STOP CALLER ", + "sourceMap": "1178:22308:60:-:0;;;;;;;;" + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/StableMath.sol\":\"StableMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]}},\"version\":1}" + } + }, + "contracts/StablePoolAmplification.sol": { + "StablePoolAmplification": { + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "startValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "AmpUpdateStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "currentValue", + "type": "uint256" + } + ], + "name": "AmpUpdateStopped", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAmplificationParameter", + "outputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isUpdating", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "precision", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rawEndValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "startAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stopAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAmplificationParameter()": "6daccffa", + "getAuthorizer()": "aaabadc5", + "getOwner()": "893d20e8", + "startAmplificationParameterUpdate(uint256,uint256)": "2f1a0bc9", + "stopAmplificationParameterUpdate()": "eb0f24d6" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentValue\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStopped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmplificationParameter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isUpdating\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"precision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rawEndValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"startAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"startAmplificationParameterUpdate(uint256,uint256)\":{\"details\":\"Begin changing the amplification parameter to `rawEndValue` over time. The value will change linearly until `endTime` is reached, when it will be `rawEndValue`. NOTE: Internally, the amplification parameter is represented using higher precision. The values returned by `getAmplificationParameter` have to be corrected to account for this when comparing to `rawEndValue`.\"},\"stopAmplificationParameterUpdate()\":{\"details\":\"Stops the amplification parameter change process, keeping the current value.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/StablePoolAmplification.sol\":\"StablePoolAmplification\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/StablePoolAmplification.sol\":{\"keccak256\":\"0x35131a0fda0168332354ea2da753a595cedcdbc2663b83281fb86adbd10e2b15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c4a52f1ed61716bf879e3d232c47060196602de456fced19722bd38e2c967dc\",\"dweb:/ipfs/QmStzAS76tvSSvbofjV8EB9VrbcF7h8DwygTZGpuqzAavm\"]}},\"version\":1}" + } + }, + "contracts/test/MockComposableStablePool.sol": { + "MockComposableStablePool": { + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "protocolFeeProvider", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "contract IRateProvider[]", + "name": "rateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pauseWindowDuration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodDuration", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "internalType": "struct ComposableStablePool.NewPoolParams", + "name": "params", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "startValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "AmpUpdateStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "currentValue", + "type": "uint256" + } + ], + "name": "AmpUpdateStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolFeePercentageCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "TokenRateCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRateProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cacheDuration", + "type": "uint256" + } + ], + "name": "TokenRateProviderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "registeredBalances", + "type": "uint256[]" + } + ], + "name": "beforeJoinExit", + "outputs": [ + { + "internalType": "uint256", + "name": "preJoinExitSupply", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "currentAmp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preJoinExitInvariant", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getActualSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAmplificationParameter", + "outputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isUpdating", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "precision", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastJoinExitData", + "outputs": [ + { + "internalType": "uint256", + "name": "lastJoinExitAmplification", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitInvariant", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinimumBpt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getProtocolFeePercentageCache", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolSwapFeeDelegation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRateCache", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVirtualSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "actionId", + "type": "bytes32" + } + ], + "name": "isOwnerOnlyAction", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "mockCacheTokenRateIfNecessary", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IVault.SwapKind", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "contract IERC20", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "internalType": "struct IPoolSwapStructs.SwapRequest", + "name": "swapRequest", + "type": "tuple" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "indexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexOut", + "type": "uint256" + } + ], + "name": "onSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum MockFailureModes.FailureMode", + "name": "mode", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "errorCode", + "type": "uint256" + } + ], + "name": "setFailureCode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum MockFailureModes.FailureMode", + "name": "mode", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "failed", + "type": "bool" + } + ], + "name": "setFailureMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setTokenRateCacheDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rawEndValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "startAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stopAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateProtocolFeePercentageCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "updateTokenRateCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6105006040523480156200001257600080fd5b506040516200849338038062008493833981016040819052620000359162001c2e565b602081015181906000196200004a8362000d96565b620000558462000dcf565b8461010001518560000151600087604001518860600151620000828a608001513062000e1860201b60201c565b8a60800151516001016001600160401b0381118015620000a157600080fd5b50604051908082528060200260200182016040528015620000cc578160200160208202803683370190505b508b61012001518c61014001518d61016001518e6101800151828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200012e929190620018cb565b50805162000144906004906020840190620018cb565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001c290506276a70083111561019462000fb2565b620001d662278d0082111561019562000fb2565b4290910161014081905201610160528551620001f8906002111560c862000fb2565b620002126200020662000fc7565b8751111560c962000fb2565b620002288662000fcc60201b6200176a1760201c565b620002338462000fd8565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f9062000264908d9060040162001eb4565b602060405180830381600087803b1580156200027f57600080fd5b505af115801562000294573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ba919062001bf6565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002ef9084908b908b9060040162001e18565b600060405180830381600087803b1580156200030a57600080fd5b505af11580156200031f573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036657600080fd5b505afa1580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062001c0f565b60601b6001600160601b0319166101a05250620003d3995050506001891015965061012c955062000fb2945050505050565b620003e661138882111561012d62000fb2565b600062000401826103e86200106c60201b620017741760201c565b90506200040e816200109b565b5050805151620004236002821160c862000fb2565b6200044860018203836020015151846040015151620010da60201b6200179f1760201c565b6101c0819052815180516000906200045c57fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200049357fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004ca57fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b81525050600381116200050057600062000519565b8151805160039081106200051057fe5b60200260200101515b60601b6001600160601b03191661026052600481116200053b57600062000554565b8151805160049081106200054b57fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005765760006200058f565b8151805160059081106200058657fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005c89190600090620005b457fe5b6020026020010151620010fa60201b60201c565b6102c05281518051620005e291906001908110620005b457fe5b6102e05281518051620005fc91906002908110620005b457fe5b61030052600381116200061157600062000627565b620006278260000151600381518110620005b457fe5b61032052600481116200063c57600062000652565b620006528260000151600481518110620005b457fe5b6103405260058111620006675760006200067d565b6200067d8260000151600581518110620005b457fe5b61036052815151600019015b600081118015620006ba57508251805130919083908110620006a757fe5b60200260200101516001600160a01b0316115b15620006ca576000190162000689565b6101e08190528251516060906001600160401b0381118015620006ec57600080fd5b5060405190808252806020026020018201604052801562000717578160200160208202803683370190505b50905060008080805b8751518110156200093a57858110156200085657876020015181815181106200074557fe5b60200260200101518582815181106200075a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007c360006001600160a01b03168683815181106200079657fe5b60200260200101516001600160a01b031614158260060186620011c960201b620017bc179092919060201c565b935087604001518181518110620007d657fe5b6020026020010151156200084b576200082260006001600160a01b03168683815181106200080057fe5b60200260200101516001600160a01b0316141561015562000fb260201b60201c565b6200083f60018286620011c960201b620017bc179092919060201c565b93506001925062000850565b600191505b62000931565b8581146200093157876020015160018203815181106200087257fe5b60200260200101518582815181106200088757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008c360006001600160a01b03168683815181106200079657fe5b935087604001516001820381518110620008d957fe5b6020026020010151156200092c576200090360006001600160a01b03168683815181106200080057fe5b6200092060018286620011c960201b620017bc179092919060201c565b93506001925062000931565b600191505b60010162000720565b50811560f890811b610460528115901b61048052835184906000906200095c57fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200098f57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009c257fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003845111620009f957600062000a10565b8360038151811062000a0757fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a3357600062000a4a565b8360048151811062000a4157fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a6d57600062000a84565b8360058151811062000a7b57fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000ac795509293509190620010da811b6200179f17901c565b805160609062000ad8903062000e18565b8051909150600019015b60008111801562000b185750306001600160a01b031682828151811062000b0557fe5b60200260200101516001600160a01b0316115b1562000b28576000190162000ae2565b6000805b84515181101562000c41578281141562000b4557600191505b60208501518051828401916000918490811062000b5e57fe5b60200260200101516001600160a01b03161462000c375762000bb8818760200151848151811062000b8b57fe5b60200260200101518860400151858151811062000ba457fe5b6020026020010151620011f260201b60201c565b8560200151828151811062000bc957fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000c0d57fe5b602002602001015160405162000c24919062001ec9565b60405180910390a362000c37816200121d565b5060010162000b2c565b5050505050600019811460f881901b6104c0526001600160601b0319606084901b166104a05262000c748360026200125c565b62000c818360036200125c565b801562000c9b5762000c958360006200125c565b62000d5a565b60405163178b2b9360e21b815262000d2f906001600160a01b03851690635e2cae4c9062000ccf9060009060040162001ec9565b60206040518083038186803b15801562000ce857600080fd5b505afa15801562000cfd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d23919062001bf6565b83111561025862000fb2565b6000600080516020620084738339815191528360405162000d51919062001ec9565b60405180910390a25b8062000d67578162000d6a565b60005b6104e0525050506101a0810151805162000d8d91600d91602090910190620018cb565b50505062001f3b565b62000da06200194c565b6040518060600160405280836080015181526020018360a0015181526020018360c0015181525090505b919050565b62000dd96200194c565b604051806060016040528062000dfa84608001513062000e1860201b60201c565b81526020018360a0015181526020018360e001518152509050919050565b606082516001016001600160401b038111801562000e3557600080fd5b5060405190808252806020026020018201604052801562000e60578160200160208202803683370190505b50905082516000141562000ea357818160008151811062000e7d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000fac565b82515b60008111801562000edf5750826001600160a01b031684600183038151811062000ecc57fe5b60200260200101516001600160a01b0316115b1562000f2c5783600182038151811062000ef557fe5b602002602001015182828151811062000f0a57fe5b6001600160a01b03909216602092830291909101909101526000190162000ea6565b60005b8181101562000f7b5784818151811062000f4557fe5b602002602001015183828151811062000f5a57fe5b6001600160a01b039092166020928302919091019091015260010162000f2f565b508282828151811062000f8a57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000fc35762000fc38162001407565b5050565b600690565b8062000fc3816200141c565b62000ff162000fe6620014a3565b82101560cb62000fb2565b6200100a62000fff620014ac565b82111560ca62000fb2565b6200102c8160c0603f600854620014b860201b620017e317909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200106190839062001ec9565b60405180910390a150565b6000828202620010948415806200108c5750838583816200108957fe5b04145b600362000fb2565b9392505050565b620010a981804280620014dd565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a02338160405162001061919062001ec9565b620010f58284148015620010ed57508183145b606762000fb2565b505050565b60006001600160a01b0382163014156200111e5750670de0b6b3a764000062000dca565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200115a57600080fd5b505afa1580156200116f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001195919062001df5565b60ff1690506000620011b46012836200155060201b6200180b1760201c565b600a0a670de0b6b3a764000002949350505050565b60006001821b1984168284620011e1576000620011e4565b60015b60ff16901b17949350505050565b6001620011ff8162001568565b620012178484846200161360201b620018211760201c565b50505050565b6000818152600a60209081526040909120549062001246908290620019046200170e821b17901c565b6000928352600a60205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200128d90859060040162001ec9565b60206040518083038186803b158015620012a657600080fd5b505afa158015620012bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e1919062001bf6565b9050816200132557620012ff816200173960201b6200191c1760201c565b600b80546001600160401b0319166001600160401b0392909216919091179055620013d9565b60028214156200137b5762001345816200173960201b6200191c1760201c565b600b80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620013d9565b6003821415620013cc576200139b816200173960201b6200191c1760201c565b600b80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620013d9565b620013d96101bb62001407565b816000805160206200847383398151915282604051620013fa919062001ec9565b60405180910390a2505050565b62001419816210905360ea1b62001757565b50565b6002815110156200142d5762001419565b6000816000815181106200143d57fe5b602002602001015190506000600190505b8251811015620010f55760008382815181106200146757fe5b6020026020010151905062001498816001600160a01b0316846001600160a01b031610606562000fb260201b60201c565b91506001016200144e565b64e8d4a5100090565b67016345785d8a000090565b6000620014c7848484620017b8565b506001901b60001901811b1992909216911b1790565b620014f78160c060406200181360201b620019391760201c565b6200151183608060406200181360201b620019391760201c565b6200152a856040806200181360201b620019391760201c565b6200154487600060406200181360201b620019391760201c565b17171760095550505050565b60006200156283831115600162000fb2565b50900390565b600e60008260018111156200157957fe5b60018111156200158557fe5b815260208101919091526040016000205460ff1615620014195762001419600f6000836001811115620015b457fe5b6001811115620015c057fe5b8152602001908152602001600020546000146200160957600f6000836001811115620015e857fe5b6001811115620015f457fe5b8152602001908152602001600020546200160d565b6101b75b62001407565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200164f57600080fd5b505afa15801562001664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200168a919062001bf6565b6000858152600a6020908152604090912054919250620016b9908290849086906200194c62001828821b17901c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620016ff90859062001ec9565b60405180910390a25050505050565b600062000fac6200171f8362001884565b60608085620014b860201b620017e317909392919060201c565b6000620017536001600160401b038311156101ba62000fb2565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b620017c96101008310606462000fb2565b6200180260018210158015620017fa5750620017f660ff8461010003620018a460201b620019841760201c565b8211155b606462000fb2565b620010f583821c156101b462000fb2565b600062001822848484620017b8565b50501b90565b60006200183d606084901c1561014962000fb2565b6200187c42830160e06020620018668660c083838c8c60006060620017e3620014b8871b17861c565b620014b860201b620017e317909392919060201c565b949350505050565b600062000fac6000606084620018bc60201b6200199a179092919060201c565b6000818310620018b5578162001094565b5090919050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200190e57805160ff19168380011785556200193e565b828001600101855582156200193e579182015b828111156200193e57825182559160200191906001019062001921565b50620017539291506200196d565b60405180606001604052806060815260200160608152602001606081525090565b5b808211156200175357600081556001016200196e565b805162000fac8162001f25565b600082601f830112620019a2578081fd5b8151620019b9620019b38262001ef9565b62001ed2565b818152915060208083019084810181840286018201871015620019db57600080fd5b6000805b8581101562001a0b5782518015158114620019f8578283fd5b85529383019391830191600101620019df565b50505050505092915050565b600082601f83011262001a28578081fd5b815162001a39620019b38262001ef9565b81815291506020808301908481018184028601820187101562001a5b57600080fd5b60005b8481101562001a8757815162001a748162001f25565b8452928201929082019060010162001a5e565b505050505092915050565b600082601f83011262001aa3578081fd5b815162001ab4620019b38262001ef9565b81815291506020808301908481018184028601820187101562001ad657600080fd5b60005b8481101562001a8757815162001aef8162001f25565b8452928201929082019060010162001ad9565b600082601f83011262001b13578081fd5b815162001b24620019b38262001ef9565b81815291506020808301908481018184028601820187101562001b4657600080fd5b60005b8481101562001a875781518452928201929082019060010162001b49565b600082601f83011262001b78578081fd5b81516001600160401b0381111562001b8e578182fd5b602062001ba4601f8301601f1916820162001ed2565b9250818352848183860101111562001bbb57600080fd5b60005b8281101562001bdb57848101820151848201830152810162001bbe565b8281111562001bed5760008284860101525b50505092915050565b60006020828403121562001c08578081fd5b5051919050565b60006020828403121562001c21578081fd5b8151620010948162001f25565b60006020828403121562001c40578081fd5b81516001600160401b038082111562001c57578283fd5b81840191506101c080838703121562001c6e578384fd5b62001c798162001ed2565b905062001c87868462001984565b815262001c98866020850162001984565b602082015260408301518281111562001caf578485fd5b62001cbd8782860162001b67565b60408301525060608301518281111562001cd5578485fd5b62001ce38782860162001b67565b60608301525060808301518281111562001cfb578485fd5b62001d098782860162001a17565b60808301525060a08301518281111562001d21578485fd5b62001d2f8782860162001a92565b60a08301525060c08301518281111562001d47578485fd5b62001d558782860162001b02565b60c08301525060e08301518281111562001d6d578485fd5b62001d7b8782860162001991565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018062001dbe8782860162001984565b908201526101a0838101518381111562001dd6578586fd5b62001de48882870162001b67565b918301919091525095945050505050565b60006020828403121562001e07578081fd5b815160ff8116811462001094578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001e645762001e51855162001f19565b8352938301939183019160010162001e3c565b505084810360408601528551808252908201925081860190845b8181101562001ea65762001e93835162001f19565b8552938301939183019160010162001e7e565b509298975050505050505050565b602081016003831062001ec357fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001ef157600080fd5b604052919050565b60006001600160401b0382111562001f0f578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b03811681146200141957600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6104a05160601c6104c05160f81c6104e05161637a620020f960003980610f3b5250806109c3525080610943528061096e5280610999525080614a7f525080614a5b525080612d6e52806146df525080611f5b525080611f2b525080611efb525080611ecb525080611e9b525080611e6b5250806132da5250806132aa52508061327a52508061324a52508061321a5250806131ea5250806121b85250806121765250806121345250806120f25250806120b052508061206e5250806111955250806119c95250806113e8525080610cfa525080611e3f525080611e1b5250806112955250806112715250806111cd52508061305852508061309a525080613079525061637a6000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c806374f3b009116101f4578063aaabadc51161011a578063d5c096c4116100ad578063e78af0781161007c578063e78af07814610791578063eb0f24d6146107a4578063ed24911d146107ac578063f4b7964d146107b4576103ba565b8063d5c096c41461075b578063dd62ed3e1461076e578063ddf4627b14610781578063de82cd3414610789576103ba565b8063c6e9407e116100e9578063c6e9407e1461070a578063cd6ceda81461071d578063d2946c2b14610740578063d505accf14610748576103ba565b8063aaabadc5146106df578063ab7759f1146106e7578063b35056b8146106fa578063b7b814fc14610702576103ba565b8063876f303b1161019257806390193b7c1161016157806390193b7c1461069e57806395d89b41146106b1578063a457c2d7146106b9578063a9059cbb146106cc576103ba565b8063876f303b1461066657806387ec68171461066e578063893d20e8146106815780638d928af814610696576103ba565b80637f1260d1116101ce5780637f1260d11461062057806382687a56146106435780638456cb591461064b578063851c1bb314610653576103ba565b806374f3b009146105d95780637b549244146105fa5780637ecebe001461060d576103ba565b80633644e515116102e457806354dea00a11610277578063679aefce11610246578063679aefce146105945780636daccffa1461059c57806370464016146105b357806370a08231146105c6576103ba565b806354dea00a1461055057806354fd4d501461056357806355c676281461056b5780636028bfd414610573576103ba565b80633c975d51116102b35780633c975d51146105175780633f4ba83a1461052d57806350dd6ed91461053557806354a844ba14610548576103ba565b80633644e515146104e157806338e9922e146104e957806338fff2d0146104fc5780633950935114610504576103ba565b80631c0de0511161035c57806323b872dd1161032b57806323b872dd146104935780632df2c7c0146104a65780632f1a0bc9146104b9578063313ce567146104cc576103ba565b80631c0de0511461043f5780631dd746ea146104565780631ea046c11461046b578063238a2d591461047e576103ba565b8063095ea7b311610398578063095ea7b3146104055780630da0669c1461042557806315b0015b1461042f57806318160ddd14610437576103ba565b806301ec954a146103bf57806304842d4c146103e857806306fdde03146103f0575b600080fd5b6103d26103cd366004615dab565b6107c7565b6040516103df9190616143565b60405180910390f35b6103d261086d565b6103f861087c565b6040516103df9190616219565b61041861041336600461593f565b610912565b6040516103df9190616120565b61042d610929565b005b6104186109c1565b6103d26109e5565b6104476109eb565b6040516103df9392919061612b565b61045e610a14565b6040516103df91906160e8565b61042d610479366004615cab565b610a1e565b610486610a7b565b6040516103df919061609b565b6104186104a136600461588f565b610b16565b61042d6104b436600461583b565b610b8a565b61042d6104c7366004615ee2565b610be6565b6104d4610cc9565b6040516103df91906162b0565b6103d2610cd2565b61042d6104f7366004615a85565b610cdc565b6103d2610cf8565b61041861051236600461593f565b610d1c565b61051f610d57565b6040516103df929190616287565b61042d610d82565b61042d610543366004615b9c565b610d94565b61042d610db2565b6103d261055e36600461583b565b610dc4565b6103f8610ddf565b6103d2610e40565b610586610581366004615a9d565b610e53565b6040516103df92919061622c565b6103d2610e8a565b6105a4610ef6565b6040516103df93929190616271565b6103d26105c1366004615a85565b610f11565b6103d26105d436600461583b565b610fd7565b6105ec6105e7366004615a9d565b610ff2565b6040516103df9291906160fb565b61042d610608366004615cd8565b6110f5565b6103d261061b36600461583b565b611126565b61063361062e36600461583b565b611131565b6040516103df9493929190616295565b6103d2611193565b61042d6111b7565b6103d2610661366004615b40565b6111c9565b6103d261121b565b61058661067c366004615a9d565b611249565b61068961126f565b6040516103df9190616087565b610689611293565b6103d26106ac36600461583b565b6112b7565b6103f86112d2565b6104186106c736600461593f565b611333565b6104186106da36600461593f565b611371565b61068961137e565b6104186106f536600461583b565b611388565b61041861139b565b61042d6113ac565b61042d610718366004615a85565b6113be565b61073061072b366004615a36565b6113c7565b6040516103df9493929190616245565b6106896113e6565b61042d6107563660046158cf565b61140a565b6105ec610769366004615a9d565b611495565b6103d261077c366004615857565b6115b8565b6103d26115f5565b6103d26115fb565b61041861079f366004615a85565b61169d565b61042d6116a8565b6103d26116d4565b61042d6107c236600461593f565b6116de565b600084608001516107f46107d9611293565b6001600160a01b0316336001600160a01b03161460cd6119a9565b6108096107ff610cf8565b82146101f46119a9565b6108116119b7565b610823848461081e6119c7565b6119eb565b606061082d611a03565b905060008751600181111561083e57fe5b14610855576108508787878785611a9c565b610862565b6108628787878785611af5565b979650505050505050565b6000610877611b30565b905090565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109085780601f106108dd57610100808354040283529160200191610908565b820191906000526020600020905b8154815290600101906020018083116108eb57829003601f168201915b5050505050905090565b600061091f338484611b37565b5060015b92915050565b610931611b9f565b6109396109c1565b15610969576109697f00000000000000000000000000000000000000000000000000000000000000006000611c0c565b6109947f00000000000000000000000000000000000000000000000000000000000000006002611c0c565b6109bf7f00000000000000000000000000000000000000000000000000000000000000006003611c0c565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b60008060006109f8611dfc565b159250610a03611e19565b9150610a0d611e3d565b9050909192565b6060610877611a03565b80600e6000846001811115610a2f57fe5b6001811115610a3a57fe5b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555050565b60606000610a876119c7565b905060608167ffffffffffffffff81118015610aa257600080fd5b50604051908082528060200260200182016040528015610acc578160200160208202803683370190505b50905060005b82811015610b0f57610ae381611e61565b828281518110610aef57fe5b6001600160a01b0390921660209283029190910190910152600101610ad2565b5091505090565b600080610b2385336115b8565b9050610b47336001600160a01b0387161480610b3f5750838210155b61019e6119a9565b610b52858585611f8a565b336001600160a01b03861614801590610b6d57506000198114155b15610b7f57610b7f8533858403611b37565b506001949350505050565b6000610b958261206a565b90506000610ba282611e61565b9050610bbb6001600160a01b03821615156101556119a9565b6000828152600a6020526040812054610bd3906121f8565b9050610be0838383612207565b50505050565b610bee61221d565b610bfe600183101561012c6119a9565b610c0f61138883111561012d6119a9565b6000610c1b824261180b565b9050610c2f6201518082101561013d6119a9565b600080610c3a612263565b91509150610c4b811561013e6119a9565b6000610c59866103e8611774565b90506000838211610c8857610c83610c746201518086611774565b610c7e8488611774565b6122d7565b610ca2565b610ca2610c986201518084611774565b610c7e8688611774565b9050610cb4600282111561013f6119a9565b610cc08483428961230a565b50505050505050565b60055460ff1690565b60006108776116d4565b610ce461221d565b610cec612359565b610cf58161236c565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161091f918590610d5290866123e5565b611b37565b600c546000908190610d6c8160e9601761199a565b9250610d7b81600060e961199a565b9150509091565b610d8a61221d565b6109bf60006123f7565b610d9c61221d565b610da4612359565b610dae8282612488565b5050565b610dba61221d565b6109bf6001612596565b6000610dd7610dd28361206a565b6125ed565b90505b919050565b600d8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109085780601f106108dd57610100808354040283529160200191610908565b6008546000906108779060c0603f61199a565b60006060610e698651610e646119c7565b612640565b610e7e8989898989898961264d61266f6126d8565b97509795505050505050565b60006060600080600080610e9c61286f565b9398509196509450925090506000610eb485856123e5565b90506000610ec0612263565b5090506000848214610edb57610ed6828961295f565b610edd565b835b9050610ee98184612ac1565b9850505050505050505090565b6000806000610f03612263565b90949093506103e892509050565b6000610f1b61139b565b15610f2857506000610dda565b81610f7457610f356109c1565b610f5f577f0000000000000000000000000000000000000000000000000000000000000000610f6d565b600b5467ffffffffffffffff165b9050610dda565b6002821415610f9c5750600b5468010000000000000000900467ffffffffffffffff16610dda565b6003821415610fcc5750600b54700100000000000000000000000000000000900467ffffffffffffffff16610dda565b610dda6101bb612b12565b6001600160a01b031660009081526020819052604090205490565b606080886110016107d9611293565b61100c6107ff610cf8565b6060600061101986612b3c565b1561104157611026612b6b565b611038896110326109e5565b88612b7e565b92509050611093565b6110496119b7565b6060611053611a03565b905061105f8a82612bc2565b6110838d8d8d8d8d61106f61139b565b611079578d61107c565b60005b878e61264d565b93509150611091838261266f565b505b61109d8b82612c2b565b81895167ffffffffffffffff811180156110b657600080fd5b506040519080825280602002602001820160405280156110e0578160200160208202803683370190505b509450945050505b5097509795505050505050565b80600f600084600181111561110657fe5b600181111561111157fe5b81526020810191909152604001600020555050565b6000610dd7826112b7565b6000806000806000600a60006111468861206a565b815260208101919091526040016000205490506111678115156101556119a9565b61117081612c35565b945061117b81612c43565b935061118681612c51565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6111bf61221d565b6109bf60016123f7565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016111fe929190616011565b604051602081830303815290604052805190602001209050919050565b600080600061122861286f565b5050925092505061124281836123e590919063ffffffff16565b9250505090565b6000606061125a8651610e646119c7565b610e7e89898989898989612c73612c846126d8565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109085780601f106108dd57610100808354040283529160200191610908565b60008061134033856115b8565b905080831061135a5761135533856000611b37565b611367565b6113673385858403611b37565b5060019392505050565b600061091f338484611f8a565b6000610877612ced565b6000610dd76113968361206a565b612d67565b6008546000906108779060ff612d8f565b6113b461221d565b6109bf6000612596565b610cf581612d99565b600060606000806113d785612ded565b93509350935093509193509193565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114398c6112b7565b8960405160200161144f9695949392919061616b565b6040516020818303038152906040528051906020012090506114808882611477878787612e56565b886101f8612e95565b61148b888888611b37565b5050505050505050565b606080886114a46107d9611293565b6114af6107ff610cf8565b6114b76119b7565b60606114c1611a03565b90506114cb6109e5565b61157857600060606114e08d8d8d868b612eec565b915091506114f96114ef611b30565b83101560cc6119a9565b61150b6000611506611b30565b612fc5565b61151e8b611517611b30565b8403612fc5565b6115288184612c84565b808a5167ffffffffffffffff8111801561154157600080fd5b5060405190808252806020026020018201604052801561156b578160200160208202803683370190505b50955095505050506110e8565b6115828882612bc2565b600060606115aa8d8d8d8d8d61159661139b565b6115a0578d6115a3565b60005b898e612c73565b9150915061151e8b83612fc5565b60006115c2611293565b6001600160a01b0316826001600160a01b031614156115e45750600019610923565b6115ee8383612fcf565b9050610923565b60001981565b6000806000611608611293565b6001600160a01b031663b05f8e4861161e610cf8565b306040518363ffffffff1660e01b815260040161163c9291906161e4565b60806040518083038186803b15801561165457600080fd5b505afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c9190615f03565b505091509150611242818301612ffa565b6000610dd78261300e565b6116b061221d565b6000806116bb612263565b915091506116cb816101406119a9565b610dae82613019565b6000610877613054565b6116e661221d565b60006116f18361206a565b905060006116fe82611e61565b90506117176001600160a01b03821615156101556119a9565b611722828285612207565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48560405161175c9190616143565b60405180910390a350505050565b80610dae816130f1565b600082820261179884158061179157508385838161178e57fe5b04145b60036119a9565b9392505050565b6117b782841480156117b057508183145b60676119a9565b505050565b60006001821b19841682846117d25760006117d5565b60015b60ff16901b17949350505050565b60006117f084848461316a565b5082821b6000196001831b01831b198516175b949350505050565b600061181b8383111560016119a9565b50900390565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190615eca565b6000858152600a60205260409020549091506118b181838561194c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac906118f5908590616143565b60405180910390a25050505050565b6000610dd761191283612c35565b83906060806117e3565b600061193567ffffffffffffffff8311156101ba6119a9565b5090565b600061194684848461316a565b50501b90565b600061195f606084901c156101496119a9565b61180342830160e0602061197c8660c083838c8c600060606117e3565b9291906117e3565b60008183106119935781611798565b5090919050565b6001901b6000190191901c1690565b81610dae57610dae81612b12565b6119bf6131b0565b6109bf6131b8565b7f000000000000000000000000000000000000000000000000000000000000000090565b6117b781841080156119fc57508183105b60646119a9565b60606000611a0f6119c7565b905060608167ffffffffffffffff81118015611a2a57600080fd5b50604051908082528060200260200182016040528015611a54578160200160208202803683370190505b50905060005b82811015610b0f57611a7d611a6e826125ed565b611a77836131e0565b906132fe565b828281518110611a8957fe5b6020908102919091010152600101611a5a565b60208501516000906001600160a01b0316301480611ac6575060408601516001600160a01b031630145b611adc57611ad7868686868661332a565b611ae9565b611ae98686868686613394565b90505b95945050505050565b60208501516000906001600160a01b0316301480611b1f575060408601516001600160a01b031630145b611adc57611ad78686868686613498565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611b92908590616143565b60405180910390a3505050565b611ba7612359565b60606000806000611bb661286f565b9450945094505093506000831115611bd157611bd1836134ef565b6000611bdb612263565b5090506000838214611bf657611bf1828761295f565b611bf8565b825b9050611c048282613500565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611c54908590600401616143565b60206040518083038186803b158015611c6c57600080fd5b505afa158015611c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca49190615eca565b905081611cf257611cb48161191c565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611dbf565b6002821415611d4f57611d048161191c565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611dbf565b6003821415611db457611d618161191c565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611dbf565b611dbf6101bb612b12565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611def9190616143565b60405180910390a2505050565b6000611e06611e3d565b42118061087757505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611e8f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160011415611ebf57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160021415611eef57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160031415611f1f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160041415611f4f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160051415611f7f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b610dda610135612b12565b611fa16001600160a01b03841615156101986119a9565b611fb86001600160a01b03831615156101996119a9565b611fc38383836117b7565b6001600160a01b038316600090815260208190526040902054611fe990826101a0613526565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461201890826123e5565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b92908590616143565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156120ae57506000610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156120f057506001610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561213257506002610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561217457506003610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156121b657506004610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f7f57506005610dda565b6000610dd78260c0602061199a565b60016122128161353c565b610be0848484611821565b600061224c6000357fffffffff00000000000000000000000000000000000000000000000000000000166111c9565b9050610cf561225b82336135dc565b6101916119a9565b6000806000806000806122746136c5565b9350935093509350804210156122c75760019450838311156122ab5781810382420385850302816122a157fe5b04840195506122c2565b81810382420384860302816122bc57fe5b04840395505b6122cf565b600094508295505b505050509091565b60006122e682151560046119a9565b826122f357506000610923565b8160018403816122ff57fe5b046001019050610923565b61231684848484613724565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf28484848460405161234b9493929190616295565b60405180910390a150505050565b6109bf612364611dfc565b6101926119a9565b612381612377613763565b82101560cb6119a9565b61239661238c61376c565b82111560ca6119a9565b6008546123a7908260c0603f6117e3565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906123da908390616143565b60405180910390a150565b600082820161179884821015836119a9565b801561241757612412612408611e19565b42106101936119a9565b61242c565b61242c612422611e3d565b42106101a96119a9565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906123da908390616120565b6000612492610cf8565b9050600061249e611293565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b81526004016124cb9291906161e4565b60806040518083038186803b1580156124e357600080fd5b505afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251b9190615f03565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d492506125689150859087906004016161cb565b600060405180830381600087803b15801561258257600080fd5b505af115801561148b573d6000803e3d6000fd5b6008546125a5908260ff6117bc565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906125d8908390616120565b60405180910390a180610cf557610cf5613778565b60006125f7611193565b82141561260d5750670de0b6b3a7640000610dda565b6000828152600a602052604090205480156126305761262b81612c35565b611798565b670de0b6b3a76400009392505050565b610dae81831460676119a9565b6000606061265e600088868661384a565b915091509850989650505050505050565b8151815161267e908290612640565b60005b81811015610be0576126b984828151811061269857fe5b60200260200101518483815181106126ac57fe5b6020026020010151612ac1565b8482815181106126c557fe5b6020908102919091010152600101612681565b3330146127c7576000306001600160a01b03166000366040516126fc929190616041565b6000604051808303816000865af19150503d8060008114612739576040519150601f19603f3d011682016040523d82523d6000602084013e61273e565b606091505b50509050806000811461274d57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb0000000000000000000000000000000000000000000000000000000081146127a9573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b6127cf6119b7565b60606127d9611a03565b90506127e58782612bc2565b600060606127fd8c8c8c8c8c8c898d8d63ffffffff16565b9150915061280f81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b60606000806000806060612881611293565b6001600160a01b031663f94d4668612897610cf8565b6040518263ffffffff1660e01b81526004016128b39190616143565b60006040518083038186803b1580156128cb57600080fd5b505afa1580156128df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612907919081019061596a565b5091505061291c81612917611a03565b612bc2565b612925816138f8565b965094506000612933610d57565b90945090506000612945888684613931565b9450905061295387826139be565b95505050509091929394565b80516000908190815b818110156129a05761299685828151811061297f57fe5b6020026020010151846123e590919063ffffffff16565b9250600101612968565b50816129b157600092505050610923565b600082868302825b60ff811015612aaa578260005b86811015612a07576129fd6129db8387611774565b6129f88c84815181106129ea57fe5b60200260200101518a611774565b6139d6565b91506001016129c6565b50839450612a60612a3f612a39612a1e848a611774565b612a33612a2b888d611774565b6103e86139d6565b906123e5565b86611774565b6129f8612a4f8960010185611774565b612a33612a2b6103e889038a611774565b935084841115612a8857600185850311612a835783975050505050505050610923565b612aa1565b600184860311612aa15783975050505050505050610923565b506001016129b9565b50612ab6610141612b12565b505050505092915050565b6000612ad082151560046119a9565b82612add57506000610923565b670de0b6b3a764000083810290612b0090858381612af757fe5b041460056119a9565b828181612b0957fe5b04915050610923565b610cf5817f42414c00000000000000000000000000000000000000000000000000000000006139f6565b6000808251118015610dd7575060ff801682806020019051810190612b619190615f43565b60ff161492915050565b6109bf612b7661139b565b6101b66119a9565b6000606060006060612b8f876138f8565b9150915060006060612ba2838589613a71565b9150915081612bb2826000613a9d565b9550955050505050935093915050565b81518151612bd1908290612640565b60005b81811015610be057612c0c848281518110612beb57fe5b6020026020010151848381518110612bff57fe5b60200260200101516132fe565b848281518110612c1857fe5b6020908102919091010152600101612bd4565b610dae8282613b5a565b6000610dd78282606061199a565b6000610dd78260608061199a565b600080612c5d836121f8565b9150612c6c8360e0602061199a565b9050915091565b6000606061265e600188868661384a565b81518151612c93908290612640565b60005b81811015610be057612cce848281518110612cad57fe5b6020026020010151848381518110612cc157fe5b6020026020010151613c26565b848281518110612cda57fe5b6020908102919091010152600101612c96565b6000612cf7611293565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612d2f57600080fd5b505afa158015612d43573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190615b80565b6000610dd77f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b612da1611193565b811415612dad57610cf5565b6000818152600a60205260409020548015610dae57600080612dce83612c51565b9150915080421115610be057610be084612de786611e61565b84612207565b60006060600080600080612dff610d57565b91509150600060606000612e148a8686613c74565b9250925092506000612e24612263565b5090506000868214612e3f57612e3a828561295f565b612e41565b825b949c939b509099509297509095505050505050565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612ea085613ccc565b9050612eb6612eb0878387613ce8565b836119a9565b612ec5428410156101b86119a9565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612efb84613d97565b9050612f166000826003811115612f0e57fe5b1460ce6119a9565b6060612f2185613dad565b9050612f2f81518751612640565b612f398187612bc2565b6000612f43612263565b5090506060612f5183613dc3565b90506000612f5f838361295f565b9050806000612f7c6d80000000000000000000000000008361180b565b9050612f888d82612fc5565b8086612f92611193565b81518110612f9c57fe5b602002602001018181525050612fb28584613500565b509c939b50929950505050505050505050565b610dae8282613e65565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610dd7826130086109e5565b9061180b565b6000610dd782613ef2565b61302581824242613724565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516123da9190616143565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006130c1613efd565b306040516020016130d695949392919061619f565b60405160208183030381529060405280519060200120905090565b60028151101561310057610cf5565b60008160008151811061310f57fe5b602002602001015190506000600190505b82518110156117b757600083828151811061313757fe5b60200260200101519050613160816001600160a01b0316846001600160a01b03161060656119a9565b9150600101613120565b613179610100831060646119a9565b6131a1600182101580156119fc575061319760ff8461010003611984565b82111560646119a9565b6117b783821c156101b46119a9565b6109bf612359565b60006131c26119c7565b905060005b81811015610dae576131d881612d99565b6001016131c7565b60008161320e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b816001141561323e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b816002141561326e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b816003141561329e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b81600414156132ce57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160051415611f7f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b600082820261331884158061179157508385838161178e57fe5b670de0b6b3a764000090049392505050565b60006133368583612bc2565b613357866060015183858151811061334a57fe5b6020026020010151613f01565b6060870152600061336a87878787613f0d565b90506133898184878151811061337c57fe5b6020026020010151613f2f565b905061086281613f3b565b60008080875160018111156133a557fe5b1490506133b28684612bc2565b6133d2876060015184836133c657866133c8565b875b8151811061334a57fe5b876060018181525050600060606000806133eb8a612ded565b93509350935093506000806133fe611193565b8a146134245761341f878e60600151876134178e613f57565b888b89613f8c565b61343f565b61343f878e60600151876134378f613f57565b888b89613fc5565b915091506134508486858985613fe9565b8661346a57613465828a8d8151811061337c57fe5b613487565b613487828a8c8151811061347a57fe5b6020026020010151614069565b9d9c50505050505050505050505050565b60006134a78660600151614075565b60608701526134b68583612bc2565b6134ca866060015183868151811061334a57fe5b606087015260006134dd87878787614096565b90506108628184868151811061347a57fe5b610cf56134fa6113e6565b82612fc5565b61350d81600060e9611939565b61351a8360e96017611939565b17600c55610dae6140ae565b600061353584841115836119a9565b5050900390565b600e600082600181111561354c57fe5b600181111561355757fe5b815260208101919091526040016000205460ff1615610cf557610cf5600f600083600181111561358357fe5b600181111561358e57fe5b8152602001908152602001600020546000146135d357600f60008360018111156135b457fe5b60018111156135bf57fe5b8152602001908152602001600020546135d7565b6101b75b612b12565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b6135fb61126f565b6001600160a01b03161415801561361657506136168361300e565b1561363e5761362361126f565b6001600160a01b0316336001600160a01b0316149050610923565b613646612ced565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016136759392919061614c565b60206040518083038186803b15801561368d57600080fd5b505afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190615a69565b6000806000806136e46000604060095461199a9092919063ffffffff16565b6009549094506136f69060408061199a565b600954909350613709906080604061199a565b60095490925061371c9060c0604061199a565b905090919293565b6137318160c06040611939565b61373e8360806040611939565b61374a85604080611939565b6137578760006040611939565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b6060613782611293565b6001600160a01b031663f94d4668613798610cf8565b6040518263ffffffff1660e01b81526004016137b49190616143565b60006040518083038186803b1580156137cc57600080fd5b505afa1580156137e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613808919081019061596a565b5091505061381881612917611a03565b606061382382613dc3565b9050600061382f612263565b509050600061383e828461295f565b9050610be08282613500565b600060606000606060008061385e89612ded565b93509350935093506156db8a613876576140e461387a565b6141795b905060006060613892868689878f8f8963ffffffff16565b915091506156db8d6138a65761180b6138aa565b6123e55b90506138b78783836141f7565b60006138c789858463ffffffff16565b90506138d68789888c85613fe9565b836138e2846000613a9d565b9a509a5050505050505050505094509492505050565b6000606061391f83613908611193565b8151811061391257fe5b6020026020010151612ffa565b61392884613dc3565b91509150915091565b6000806000806000613943888861426b565b925092509250600086841161395957600061395d565b8684035b9050600084841161396f576000613973565b8484035b9050600061398e6139846000610f11565b611a778587612ac1565b905060006139a961399f6002610f11565b611a778588612ac1565b919091019b939a509298505050505050505050565b60006117986139cd8484611774565b6129f8846142ed565b60006139e582151560046119a9565b8183816139ee57fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b600060606000613a8084614313565b90506060613a8f878784614329565b919791965090945050505050565b6060825160010167ffffffffffffffff81118015613aba57600080fd5b50604051908082528060200260200182016040528015613ae4578160200160208202803683370190505b50905060005b8151811015613b5357613afb611193565b8114613b325783613b0a611193565b8210613b195760018203613b1b565b815b81518110613b2557fe5b6020026020010151613b34565b825b828281518110613b4057fe5b6020908102919091010152600101613aea565b5092915050565b613b716001600160a01b038316151561019b6119a9565b613b7d826000836117b7565b6001600160a01b038216600090815260208190526040902054613ba390826101b2613526565b6001600160a01b038316600090815260208190526040902055613bd6613bd182613bcb6109e5565b906143d8565b6143e6565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c1a9190616143565b60405180910390a35050565b6000613c3582151560046119a9565b82613c4257506000610923565b670de0b6b3a764000083810290613c5c90858381612af757fe5b826001820381613c6857fe5b04600101915050610923565b600060606000806060613c86886138f8565b91509150600080613c98838a8a613931565b915091506000613ca885846139be565b90508015613cb957613cb9816134ef565b9390930199919850919650945050505050565b6000613cd6613054565b826040516020016111fe929190616051565b6000613cfa82516041146101b96119a9565b60208281015160408085015160608601518251600080825295019283905292939092811a91600190613d339089908590889088906161fb565b6020604051602081039080840390855afa158015613d55573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590613d8b5750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610dd79190615cf5565b6060818060200190518101906117989190615d10565b606080600183510367ffffffffffffffff81118015613de157600080fd5b50604051908082528060200260200182016040528015613e0b578160200160208202803683370190505b50905060005b8151811015613b535783613e23611193565b8210613e325781600101613e34565b815b81518110613e3e57fe5b6020026020010151828281518110613e5257fe5b6020908102919091010152600101613e11565b613e71600083836117b7565b613e80613bd182612a336109e5565b6001600160a01b038216600090815260208190526040902054613ea390826123e5565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613c1a908590616143565b6000610dd7826143eb565b4690565b600061179883836132fe565b600080613f198161353c565b613f2586868686614427565b9695505050505050565b60006117988383613c26565b6000610dd7613f50613f4b610e40565b6142ed565b8390613c26565b6000613f6e613f64611193565b83141560646119a9565b613f76611193565b821061193557613f8782600161180b565b610dd7565b60008088613fa757613fa288888888888861443b565b613fb5565b613fb5888888888888614512565b9150915097509795505050505050565b60008088613fdb57613fa2888888888888614573565b613fb58888888888886145d9565b6000613ff5868661295f565b905060006140038385612ac1565b9050600061401186836132fe565b90508083111561405f57808303600061403b6140358361403084610f11565b611774565b866139d6565b9050801561405c57600061404f87836139be565b905061405a816134ef565b505b50505b61148b8884613500565b60006117988383612ac1565b60008061408a614083610e40565b8490614688565b9050611798838261180b565b6000806140a28161353c565b613f25868686866146c4565b60006140b86119c7565b905060005b81811015610dae576140ce816146d8565b156140dc576140dc81614707565b6001016140bd565b6000606060006140f384614735565b9050600181600281111561410357fe5b14156141215761411787878a8c898961474b565b925092505061416e565b600281600281111561412f57fe5b141561414057614117878a866147aa565b600081600281111561414e57fe5b14156141615761411787878a8c886147c8565b61416c610150612b12565b505b965096945050505050565b60006060600061418884613d97565b9050600181600381111561419857fe5b14156141ac5761411787878a8c8989614869565b60038160038111156141ba57fe5b14156141cb57614117878a866148b8565b60028160038111156141d957fe5b14156141ec5761411787878a8c886148d6565b61416c610136612b12565b82518251614206908290612640565b60005b818110156142645761424585828151811061422057fe5b602002602001015185838151811061423457fe5b60200260200101518563ffffffff16565b85828151811061425157fe5b6020908102919091010152600101614209565b5050505050565b60008060006142848461427f876001614950565b61295f565b925061428e614a59565b156142a75761429d848661295f565b91508190506142e6565b6142af614a7d565b156142c8578291506142c1848661295f565b90506142e6565b6142d78461427f876000614950565b91506142e3848661295f565b90505b9250925092565b6000670de0b6b3a76400008210614305576000610dd7565b50670de0b6b3a76400000390565b6000818060200190518101906117989190615f5f565b606060006143378385612ac1565b9050845167ffffffffffffffff8111801561435157600080fd5b5060405190808252806020026020018201604052801561437b578160200160208202803683370190505b50915060005b85518110156143cf576143b08287838151811061439a57fe5b60200260200101516132fe90919063ffffffff16565b8382815181106143bc57fe5b6020908102919091010152600101614381565b50509392505050565b600061179883836001613526565b600255565b60006144167ff4b7964d000000000000000000000000000000000000000000000000000000006111c9565b821480610dd75750610dd782614aa1565b6000611aec60008660600151868686614b0f565b6000806060875167ffffffffffffffff8111801561445857600080fd5b50604051908082528060200260200182016040528015614482578160200160208202803683370190505b5090508881888151811061449257fe5b60200260200101818152505060006144b5878a8489896144b0610e40565b614b81565b90506144dd8a8a8a815181106144c757fe5b602002602001015161180b90919063ffffffff16565b8989815181106144e957fe5b60209081029190910101526000614500878361180b565b919b919a509098505050505050505050565b600080600061452d8689898c8989614528610e40565b614e11565b905061453f818989815181106144c757fe5b88888151811061454b57fe5b60209081029190910101526000614562868b61180b565b919a91995090975050505050505050565b600080600061458e8689898c8989614589610e40565b614f00565b90506145b6818989815181106145a057fe5b60200260200101516123e590919063ffffffff16565b8888815181106145c257fe5b60209081029190910101526000614562868b6123e5565b6000806060875167ffffffffffffffff811180156145f657600080fd5b50604051908082528060200260200182016040528015614620578160200160208202803683370190505b5090508881888151811061463057fe5b6020026020010181815250506000614653878a84898961464e610e40565b614fcd565b90506146658a8a8a815181106145a057fe5b89898151811061467157fe5b6020908102919091010152600061450087836123e5565b60008282026146a284158061179157508385838161178e57fe5b806146b1576000915050610923565b670de0b6b3a76400006000198201613c68565b6000611aec60018660600151868686614b0f565b6000610dd77f000000000000000000000000000000000000000000000000000000000000000060068401612d8f565b6000818152600a602052604090205461471f81611904565b6000928352600a60205260409092209190915550565b600081806020019051810190610dd79190615bea565b6000606080600061475b8561524e565b9150915061476b82518851612640565b6147788261291788613dc3565b600061478a8989858e8e6144b0610e40565b905061479a8282111560cf6119a9565b9a91995090975050505050505050565b6000606060006147b984615271565b90506060613a8f868884614329565b600060606000806147d885615287565b915091506147ea8651821060646119a9565b6060865167ffffffffffffffff8111801561480457600080fd5b5060405190808252806020026020018201604052801561482e578160200160208202803683370190505b509050614842888884868e8e614528610e40565b81838151811061484e57fe5b60209081029190910101529199919850909650505050505050565b600060608060006148798561529e565b9150915061488987518351612640565b6148968261291788613dc3565b60006148a88989858e8e61464e610e40565b905061479a8282101560d06119a9565b6000606060006148c7846152b6565b90506060613a8f8683896152cc565b600060606000806148e685615368565b915091506148f88651821060646119a9565b6060865167ffffffffffffffff8111801561491257600080fd5b5060405190808252806020026020018201604052801561493c578160200160208202803683370190505b509050614842888884868e8e614589610e40565b8151606090818167ffffffffffffffff8111801561496d57600080fd5b50604051908082528060200260200182016040528015614997578160200160208202803683370190505b50905060005b82811015614a505760006149af611193565b8210156149bc57816149c1565b816001015b90506149cc81612d67565b806149e357508580156149e357506149e3816146d8565b614a00578682815181106149f357fe5b6020026020010151614a30565b614a30878381518110614a0f57fe5b6020026020010151600a60008481526020019081526020016000205461537f565b838381518110614a3c57fe5b60209081029190910101525060010161499d565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000614acc7f2f1a0bc9000000000000000000000000000000000000000000000000000000006111c9565b821480614b005750614afd7feb0f24d6000000000000000000000000000000000000000000000000000000006111c9565b82145b80610dd75750610dd78261539a565b60006060614b1c85613dc3565b90506000614b2985613f57565b90506000614b3685613f57565b90506000614b42612263565b5090506000614b51828661295f565b90508a15614b7357614b67828686868e86615408565b95505050505050611aec565b614b67828686868e86615485565b600080805b8751811015614bbf57614bb5888281518110614b9e57fe5b6020026020010151836123e590919063ffffffff16565b9150600101614b86565b506060865167ffffffffffffffff81118015614bda57600080fd5b50604051908082528060200260200182016040528015614c04578160200160208202803683370190505b5090506000805b8951811015614cd1576000614c3c858c8481518110614c2657fe5b6020026020010151613c2690919063ffffffff16565b9050614c7e8b8381518110614c4d57fe5b6020026020010151614c788c8581518110614c6457fe5b60200260200101518e86815181106144c757fe5b90613c26565b848381518110614c8a57fe5b602002602001018181525050614cc6614cbf82868581518110614ca957fe5b602002602001015161468890919063ffffffff16565b84906123e5565b925050600101614c0b565b506060895167ffffffffffffffff81118015614cec57600080fd5b50604051908082528060200260200182016040528015614d16578160200160208202803683370190505b50905060005b8a51811015614de1576000848281518110614d3357fe5b6020026020010151841115614d9a576000614d5c614d50866142ed565b8e858151811061439a57fe5b90506000614d70828e86815181106144c757fe5b9050614d91614d8a82670de0b6b3a76400008d9003613c26565b83906123e5565b92505050614db1565b8a8281518110614da657fe5b602002602001015190505b614dc1818d84815181106144c757fe5b838381518110614dcd57fe5b602090810291909101015250600101614d1c565b506000614dee8c8361295f565b90506000614dfc828a612ac1565b9050613487614e0a826142ed565b8b90614688565b600080614e2c84614e2687614c78818b61180b565b90614688565b90506000614e3c8a8a848b615518565b90506000614e50828b8b815181106144c757fe5b90506000805b8b51811015614e7857614e6e8c8281518110614b9e57fe5b9150600101614e56565b506000614ea1828d8d81518110614e8b57fe5b6020026020010151612ac190919063ffffffff16565b90506000614eae826142ed565b90506000614ebc8583614688565b90506000614eca868361180b565b9050614eeb614ee483670de0b6b3a76400008d90036132fe565b82906123e5565b98505050505050505050979650505050505050565b600080614f1584614e2687614c78818b6123e5565b90506000614f258a8a848b615518565b90506000614f4f8a8a81518110614f3857fe5b60200260200101518361180b90919063ffffffff16565b90506000805b8b51811015614f7757614f6d8c8281518110614b9e57fe5b9150600101614f55565b506000614f8a828d8d81518110614e8b57fe5b90506000614f97826142ed565b90506000614fa58583614688565b90506000614fb3868361180b565b9050614eeb614ee483670de0b6b3a76400008d9003613c26565b600080805b8751811015614ff457614fea888281518110614b9e57fe5b9150600101614fd2565b506060865167ffffffffffffffff8111801561500f57600080fd5b50604051908082528060200260200182016040528015615039578160200160208202803683370190505b5090506000805b89518110156150d357600061505b858c8481518110614e8b57fe5b905061509d8b838151811061506c57fe5b60200260200101516150978c858151811061508357fe5b60200260200101518e86815181106145a057fe5b90612ac1565b8483815181106150a957fe5b6020026020010181815250506150c8614cbf8286858151811061439a57fe5b925050600101615040565b506060895167ffffffffffffffff811180156150ee57600080fd5b50604051908082528060200260200182016040528015615118578160200160208202803683370190505b50905060005b8a518110156151d95760008385838151811061513657fe5b6020026020010151111561519257600061515b614d5086670de0b6b3a764000061180b565b9050600061516f828e86815181106144c757fe5b9050615189614d8a82670de0b6b3a76400008d90036132fe565b925050506151a9565b8a828151811061519e57fe5b602002602001015190505b6151b9818d84815181106145a057fe5b8383815181106151c557fe5b60209081029190910101525060010161511e565b5060006151e68c8361295f565b905060006151f4828a612ac1565b9050670de0b6b3a764000081111561523f576152328a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000083016132fe565b9650505050505050613f25565b60009650505050505050613f25565b60606000828060200190518101906152669190615c05565b909590945092505050565b6000818060200190518101906117989190615c4a565b600080828060200190518101906152669190615c76565b60606000828060200190518101906152669190615d53565b6000818060200190518101906117989190615d71565b606060006152da8484613c26565b90506060855167ffffffffffffffff811180156152f657600080fd5b50604051908082528060200260200182016040528015615320578160200160208202803683370190505b50905060005b865181101561535e5761533f83888381518110614ca957fe5b82828151811061534b57fe5b6020908102919091010152600101615326565b5095945050505050565b600080828060200190518101906152669190615d8d565b60006117986153918461403085612c43565b6129f884612c35565b60006153c57f38e9922e000000000000000000000000000000000000000000000000000000006111c9565b8214806153f957506153f67f50dd6ed9000000000000000000000000000000000000000000000000000000006111c9565b82145b80610dd75750610dd7826156d5565b600061541a838787815181106145a057fe5b86868151811061542657fe5b602002602001018181525050600061544088888588615518565b90508387878151811061544f57fe5b60200260200101510387878151811061546457fe5b602002602001018181525050613d8b6001613008838a89815181106144c757fe5b6000615497838786815181106144c757fe5b8685815181106154a357fe5b60200260200101818152505060006154bd88888589615518565b9050838786815181106154cc57fe5b6020026020010151018786815181106154e157fe5b602002602001018181525050613d8b6001612a3389898151811061550157fe5b60200260200101518461180b90919063ffffffff16565b60008084518602905060008560008151811061553057fe5b60200260200101519050600086518760008151811061554b57fe5b60200260200101510290506000600190505b87518110156155b157615596615590615589848b858151811061557c57fe5b6020026020010151611774565b8a51611774565b886139d6565b91506155a788828151811061297f57fe5b925060010161555d565b508685815181106155be57fe5b60200260200101518203915060006155d68788611774565b905060006156026155f66155ee84610c7e8988611774565b6103e8611774565b8a898151811061557c57fe5b9050600061561d6156166155ee8b896139d6565b86906123e5565b905060008061563961562f86866123e5565b610c7e8d866123e5565b905060005b60ff8110156156b95781925061566e61565b86612a338586611774565b610c7e8e61300888612a33886002611774565b91508282111561569757600183830311615692575097506118039650505050505050565b6156b1565b6001828403116156b1575097506118039650505050505050565b60010161563e565b506156c5610142612b12565b5050505050505050949350505050565b50600090565bfe5b803561092381616305565b600082601f8301126156f8578081fd5b813561570b615706826162e5565b6162be565b81815291506020808301908481018184028601820187101561572c57600080fd5b60005b84811015612ab65781358452928201929082019060010161572f565b600082601f83011261575b578081fd5b8151615769615706826162e5565b81815291506020808301908481018184028601820187101561578a57600080fd5b60005b84811015612ab65781518452928201929082019060010161578d565b600082601f8301126157b9578081fd5b813567ffffffffffffffff8111156157cf578182fd5b6157e26020601f19601f840116016162be565b91508082528360208285010111156157f957600080fd5b8060208401602084013760009082016020015292915050565b80516003811061092357600080fd5b803561092381616328565b80516004811061092357600080fd5b60006020828403121561584c578081fd5b813561179881616305565b60008060408385031215615869578081fd5b823561587481616305565b9150602083013561588481616305565b809150509250929050565b6000806000606084860312156158a3578081fd5b83356158ae81616305565b925060208401356158be81616305565b929592945050506040919091013590565b600080600080600080600060e0888a0312156158e9578485fd5b87356158f481616305565b9650602088013561590481616305565b95506040880135945060608801359350608088013561592281616335565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215615951578182fd5b823561595c81616305565b946020939093013593505050565b60008060006060848603121561597e578081fd5b835167ffffffffffffffff80821115615995578283fd5b818601915086601f8301126159a8578283fd5b81516159b6615706826162e5565b80828252602080830192508086018b8283870289010111156159d6578788fd5b8796505b84871015615a015780516159ed81616305565b8452600196909601959281019281016159da565b508901519097509350505080821115615a18578283fd5b50615a258682870161574b565b925050604084015190509250925092565b600060208284031215615a47578081fd5b813567ffffffffffffffff811115615a5d578182fd5b611803848285016156e8565b600060208284031215615a7a578081fd5b81516117988161631a565b600060208284031215615a96578081fd5b5035919050565b600080600080600080600060e0888a031215615ab7578081fd5b873596506020880135615ac981616305565b95506040880135615ad981616305565b9450606088013567ffffffffffffffff80821115615af5578283fd5b615b018b838c016156e8565b955060808a0135945060a08a0135935060c08a0135915080821115615b24578283fd5b50615b318a828b016157a9565b91505092959891949750929550565b600060208284031215615b51578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611798578182fd5b600060208284031215615b91578081fd5b815161179881616305565b60008060408385031215615bae578182fd5b8235615bb981616305565b9150602083013567ffffffffffffffff811115615bd4578182fd5b615be0858286016157a9565b9150509250929050565b600060208284031215615bfb578081fd5b6117988383615812565b600080600060608486031215615c19578081fd5b615c238585615812565b9250602084015167ffffffffffffffff811115615c3e578182fd5b615a258682870161574b565b60008060408385031215615c5c578182fd5b615c668484615812565b9150602083015190509250929050565b600080600060608486031215615c8a578081fd5b615c948585615812565b925060208401519150604084015190509250925092565b60008060408385031215615cbd578182fd5b8235615cc881616328565b915060208301356158848161631a565b60008060408385031215615cea578182fd5b823561595c81616328565b600060208284031215615d06578081fd5b611798838361582c565b60008060408385031215615d22578182fd5b615d2c848461582c565b9150602083015167ffffffffffffffff811115615d47578182fd5b615be08582860161574b565b600080600060608486031215615d67578081fd5b615c23858561582c565b60008060408385031215615d83578182fd5b615c66848461582c565b600080600060608486031215615da1578081fd5b615c94858561582c565b60008060008060808587031215615dc0578182fd5b843567ffffffffffffffff80821115615dd7578384fd5b818701915061012080838a031215615ded578485fd5b615df6816162be565b9050615e028984615821565b8152615e1189602085016156dd565b6020820152615e2389604085016156dd565b6040820152606083013560608201526080830135608082015260a083013560a0820152615e538960c085016156dd565b60c0820152615e658960e085016156dd565b60e08201526101008084013583811115615e7d578687fd5b615e898b8287016157a9565b828401525050809650506020870135915080821115615ea6578384fd5b50615eb3878288016156e8565b949794965050505060408301359260600135919050565b600060208284031215615edb578081fd5b5051919050565b60008060408385031215615ef4578182fd5b50508035926020909101359150565b60008060008060808587031215615f18578182fd5b8451935060208501519250604085015191506060850151615f3881616305565b939692955090935050565b600060208284031215615f54578081fd5b815161179881616335565b60008060408385031215615f71578182fd5b8251615f7c81616335565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615fbb57815187529582019590820190600101615f9f565b509495945050505050565b60008151808452815b81811015615feb57602081850181015186830182015201615fcf565b81811115615ffc5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156160dc5783516001600160a01b0316835292840192918401916001016160b7565b50909695505050505050565b6000602082526117986020830184615f8c565b60006040825261610e6040830185615f8c565b8281036020840152611aec8185615f8c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526118036040830184615fc6565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526117986020830184615fc6565b6000838252604060208301526118036040830184615f8c565b60008582526080602083015261625e6080830186615f8c565b6040830194909452506060015292915050565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156162dd57600080fd5b604052919050565b600067ffffffffffffffff8211156162fb578081fd5b5060209081020190565b6001600160a01b0381168114610cf557600080fd5b8015158114610cf557600080fd5b60028110610cf557600080fd5b60ff81168114610cf557600080fdfea2646970667358221220c08c8d64ebff85caa2243eb15df19ac53568abdbaa0443bb078a722d6eb4b51964736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a", + "opcodes": "PUSH2 0x500 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x8493 CODESIZE SUB DUP1 PUSH3 0x8493 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x1C2E JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD DUP2 SWAP1 PUSH1 0x0 NOT PUSH3 0x4A DUP4 PUSH3 0xD96 JUMP JUMPDEST PUSH3 0x55 DUP5 PUSH3 0xDCF JUMP JUMPDEST DUP5 PUSH2 0x100 ADD MLOAD DUP6 PUSH1 0x0 ADD MLOAD PUSH1 0x0 DUP8 PUSH1 0x40 ADD MLOAD DUP9 PUSH1 0x60 ADD MLOAD PUSH3 0x82 DUP11 PUSH1 0x80 ADD MLOAD ADDRESS PUSH3 0xE18 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP11 PUSH1 0x80 ADD MLOAD MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xA1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xCC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP DUP12 PUSH2 0x120 ADD MLOAD DUP13 PUSH2 0x140 ADD MLOAD DUP14 PUSH2 0x160 ADD MLOAD DUP15 PUSH2 0x180 ADD MLOAD DUP3 DUP3 DUP10 DUP10 DUP14 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SHL DUP5 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP8 DUP8 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x12E SWAP3 SWAP2 SWAP1 PUSH3 0x18CB JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x144 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x18CB JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x100 MSTORE SWAP2 SWAP1 SHL AND PUSH2 0x120 MSTORE POP PUSH3 0x1C2 SWAP1 POP PUSH3 0x76A700 DUP4 GT ISZERO PUSH2 0x194 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x1D6 PUSH3 0x278D00 DUP3 GT ISZERO PUSH2 0x195 PUSH3 0xFB2 JUMP JUMPDEST TIMESTAMP SWAP1 SWAP2 ADD PUSH2 0x140 DUP2 SWAP1 MSTORE ADD PUSH2 0x160 MSTORE DUP6 MLOAD PUSH3 0x1F8 SWAP1 PUSH1 0x2 GT ISZERO PUSH1 0xC8 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x212 PUSH3 0x206 PUSH3 0xFC7 JUMP JUMPDEST DUP8 MLOAD GT ISZERO PUSH1 0xC9 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x228 DUP7 PUSH3 0xFCC PUSH1 0x20 SHL PUSH3 0x176A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x233 DUP5 PUSH3 0xFD8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9B2760F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x9B2760F SWAP1 PUSH3 0x264 SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH3 0x1EB4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x27F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x294 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x2BA SWAP2 SWAP1 PUSH3 0x1BF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3354E3E9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x66A9C7D2 SWAP1 PUSH3 0x2EF SWAP1 DUP5 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH3 0x1E18 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x30A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x31F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x180 DUP2 DUP2 MSTORE POP POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD2946C2B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x366 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x37B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x3A1 SWAP2 SWAP1 PUSH3 0x1C0F JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x1A0 MSTORE POP PUSH3 0x3D3 SWAP10 POP POP POP PUSH1 0x1 DUP10 LT ISZERO SWAP7 POP PUSH2 0x12C SWAP6 POP PUSH3 0xFB2 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH3 0x3E6 PUSH2 0x1388 DUP3 GT ISZERO PUSH2 0x12D PUSH3 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x401 DUP3 PUSH2 0x3E8 PUSH3 0x106C PUSH1 0x20 SHL PUSH3 0x1774 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH3 0x40E DUP2 PUSH3 0x109B JUMP JUMPDEST POP POP DUP1 MLOAD MLOAD PUSH3 0x423 PUSH1 0x2 DUP3 GT PUSH1 0xC8 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x448 PUSH1 0x1 DUP3 SUB DUP4 PUSH1 0x20 ADD MLOAD MLOAD DUP5 PUSH1 0x40 ADD MLOAD MLOAD PUSH3 0x10DA PUSH1 0x20 SHL PUSH3 0x179F OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH3 0x45C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x200 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x493 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x4CA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x240 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP2 GT PUSH3 0x500 JUMPI PUSH1 0x0 PUSH3 0x519 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x3 SWAP1 DUP2 LT PUSH3 0x510 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x260 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x53B JUMPI PUSH1 0x0 PUSH3 0x554 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x4 SWAP1 DUP2 LT PUSH3 0x54B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x280 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x576 JUMPI PUSH1 0x0 PUSH3 0x58F JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x5 SWAP1 DUP2 LT PUSH3 0x586 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x2A0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5C8 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x5B4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x10FA PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2C0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5E2 SWAP2 SWAP1 PUSH1 0x1 SWAP1 DUP2 LT PUSH3 0x5B4 JUMPI INVALID JUMPDEST PUSH2 0x2E0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5FC SWAP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 LT PUSH3 0x5B4 JUMPI INVALID JUMPDEST PUSH2 0x300 MSTORE PUSH1 0x3 DUP2 GT PUSH3 0x611 JUMPI PUSH1 0x0 PUSH3 0x627 JUMP JUMPDEST PUSH3 0x627 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x5B4 JUMPI INVALID JUMPDEST PUSH2 0x320 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x63C JUMPI PUSH1 0x0 PUSH3 0x652 JUMP JUMPDEST PUSH3 0x652 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0x5B4 JUMPI INVALID JUMPDEST PUSH2 0x340 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x667 JUMPI PUSH1 0x0 PUSH3 0x67D JUMP JUMPDEST PUSH3 0x67D DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0x5B4 JUMPI INVALID JUMPDEST PUSH2 0x360 MSTORE DUP2 MLOAD MLOAD PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0x6BA JUMPI POP DUP3 MLOAD DUP1 MLOAD ADDRESS SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH3 0x6A7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x6CA JUMPI PUSH1 0x0 NOT ADD PUSH3 0x689 JUMP JUMPDEST PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP3 MLOAD MLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x6EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x717 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0x93A JUMPI DUP6 DUP2 LT ISZERO PUSH3 0x856 JUMPI DUP8 PUSH1 0x20 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x745 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x75A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x7C3 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x796 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP3 PUSH1 0x6 ADD DUP7 PUSH3 0x11C9 PUSH1 0x20 SHL PUSH3 0x17BC OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x7D6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x84B JUMPI PUSH3 0x822 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x800 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x155 PUSH3 0xFB2 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x83F PUSH1 0x1 DUP3 DUP7 PUSH3 0x11C9 PUSH1 0x20 SHL PUSH3 0x17BC OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x850 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH3 0x931 JUMP JUMPDEST DUP6 DUP2 EQ PUSH3 0x931 JUMPI DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x872 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x887 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x8C3 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x796 JUMPI INVALID JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x8D9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x92C JUMPI PUSH3 0x903 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x800 JUMPI INVALID JUMPDEST PUSH3 0x920 PUSH1 0x1 DUP3 DUP7 PUSH3 0x11C9 PUSH1 0x20 SHL PUSH3 0x17BC OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x931 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH3 0x720 JUMP JUMPDEST POP DUP2 ISZERO PUSH1 0xF8 SWAP1 DUP2 SHL PUSH2 0x460 MSTORE DUP2 ISZERO SWAP1 SHL PUSH2 0x480 MSTORE DUP4 MLOAD DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x95C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x380 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x98F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x9C2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3C0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP5 MLOAD GT PUSH3 0x9F9 JUMPI PUSH1 0x0 PUSH3 0xA10 JUMP JUMPDEST DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0xA07 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x3E0 MSTORE DUP4 MLOAD PUSH1 0x4 LT PUSH3 0xA33 JUMPI PUSH1 0x0 PUSH3 0xA4A JUMP JUMPDEST DUP4 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0xA41 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x400 MSTORE DUP4 MLOAD PUSH1 0x5 LT PUSH3 0xA6D JUMPI PUSH1 0x0 PUSH3 0xA84 JUMP JUMPDEST DUP4 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0xA7B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x420 MSTORE POP POP PUSH2 0x440 MSTORE POP POP DUP3 MLOAD MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD MLOAD PUSH1 0x40 DUP7 ADD MLOAD MLOAD PUSH3 0xAC7 SWAP6 POP SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH3 0x10DA DUP2 SHL PUSH3 0x179F OR SWAP1 SHR JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH3 0xAD8 SWAP1 ADDRESS PUSH3 0xE18 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xB18 JUMPI POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xB05 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xB28 JUMPI PUSH1 0x0 NOT ADD PUSH3 0xAE2 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0xC41 JUMPI DUP3 DUP2 EQ ISZERO PUSH3 0xB45 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP1 MLOAD DUP3 DUP5 ADD SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0xB5E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH3 0xC37 JUMPI PUSH3 0xBB8 DUP2 DUP8 PUSH1 0x20 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH3 0xB8B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xBA4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x11F2 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xBC9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xC0D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH3 0xC24 SWAP2 SWAP1 PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH3 0xC37 DUP2 PUSH3 0x121D JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH3 0xB2C JUMP JUMPDEST POP POP POP POP POP PUSH1 0x0 NOT DUP2 EQ PUSH1 0xF8 DUP2 SWAP1 SHL PUSH2 0x4C0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH2 0x4A0 MSTORE PUSH3 0xC74 DUP4 PUSH1 0x2 PUSH3 0x125C JUMP JUMPDEST PUSH3 0xC81 DUP4 PUSH1 0x3 PUSH3 0x125C JUMP JUMPDEST DUP1 ISZERO PUSH3 0xC9B JUMPI PUSH3 0xC95 DUP4 PUSH1 0x0 PUSH3 0x125C JUMP JUMPDEST PUSH3 0xD5A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x178B2B93 PUSH1 0xE2 SHL DUP2 MSTORE PUSH3 0xD2F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x5E2CAE4C SWAP1 PUSH3 0xCCF SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xCE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xCFD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xD23 SWAP2 SWAP1 PUSH3 0x1BF6 JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x258 PUSH3 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x8473 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH3 0xD51 SWAP2 SWAP1 PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP1 PUSH3 0xD67 JUMPI DUP2 PUSH3 0xD6A JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x4E0 MSTORE POP POP POP PUSH2 0x1A0 DUP2 ADD MLOAD DUP1 MLOAD PUSH3 0xD8D SWAP2 PUSH1 0xD SWAP2 PUSH1 0x20 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x18CB JUMP JUMPDEST POP POP POP PUSH3 0x1F3B JUMP JUMPDEST PUSH3 0xDA0 PUSH3 0x194C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP4 PUSH1 0x80 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xC0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0xDD9 PUSH3 0x194C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0xDFA DUP5 PUSH1 0x80 ADD MLOAD ADDRESS PUSH3 0xE18 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xA0 ADD MLOAD DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0xE0 ADD MLOAD DUP2 MSTORE POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xE35 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xE60 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 MLOAD PUSH1 0x0 EQ ISZERO PUSH3 0xEA3 JUMPI DUP2 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xE7D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xFAC JUMP JUMPDEST DUP3 MLOAD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xEDF JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH3 0xECC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xF2C JUMPI DUP4 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xEF5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF0A JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x0 NOT ADD PUSH3 0xEA6 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xF7B JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xF45 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF5A JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH3 0xF2F JUMP JUMPDEST POP DUP3 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xF8A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH3 0xFC3 JUMPI PUSH3 0xFC3 DUP2 PUSH3 0x1407 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST DUP1 PUSH3 0xFC3 DUP2 PUSH3 0x141C JUMP JUMPDEST PUSH3 0xFF1 PUSH3 0xFE6 PUSH3 0x14A3 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x100A PUSH3 0xFFF PUSH3 0x14AC JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x102C DUP2 PUSH1 0xC0 PUSH1 0x3F PUSH1 0x8 SLOAD PUSH3 0x14B8 PUSH1 0x20 SHL PUSH3 0x17E3 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH3 0x1061 SWAP1 DUP4 SWAP1 PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH3 0x1094 DUP5 ISZERO DUP1 PUSH3 0x108C JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH3 0x1089 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH3 0xFB2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x10A9 DUP2 DUP1 TIMESTAMP DUP1 PUSH3 0x14DD JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH3 0x1061 SWAP2 SWAP1 PUSH3 0x1EC9 JUMP JUMPDEST PUSH3 0x10F5 DUP3 DUP5 EQ DUP1 ISZERO PUSH3 0x10ED JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH3 0xFB2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0x111E JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH3 0xDCA JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x115A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x116F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1195 SWAP2 SWAP1 PUSH3 0x1DF5 JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH3 0x11B4 PUSH1 0x12 DUP4 PUSH3 0x1550 PUSH1 0x20 SHL PUSH3 0x180B OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xA EXP PUSH8 0xDE0B6B3A7640000 MUL SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH3 0x11E1 JUMPI PUSH1 0x0 PUSH3 0x11E4 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH3 0x11FF DUP2 PUSH3 0x1568 JUMP JUMPDEST PUSH3 0x1217 DUP5 DUP5 DUP5 PUSH3 0x1613 PUSH1 0x20 SHL PUSH3 0x1821 OR PUSH1 0x20 SHR JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 PUSH3 0x1246 SWAP1 DUP3 SWAP1 PUSH3 0x1904 PUSH3 0x170E DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1A7C3263 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH3 0x128D SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x12A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x12BB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x12E1 SWAP2 SWAP1 PUSH3 0x1BF6 JUMP JUMPDEST SWAP1 POP DUP2 PUSH3 0x1325 JUMPI PUSH3 0x12FF DUP2 PUSH3 0x1739 PUSH1 0x20 SHL PUSH3 0x191C OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x13D9 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH3 0x137B JUMPI PUSH3 0x1345 DUP2 PUSH3 0x1739 PUSH1 0x20 SHL PUSH3 0x191C OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH1 0x1 PUSH1 0x40 SHL PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x13D9 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH3 0x13CC JUMPI PUSH3 0x139B DUP2 PUSH3 0x1739 PUSH1 0x20 SHL PUSH3 0x191C OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x13D9 JUMP JUMPDEST PUSH3 0x13D9 PUSH2 0x1BB PUSH3 0x1407 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x8473 DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 PUSH1 0x40 MLOAD PUSH3 0x13FA SWAP2 SWAP1 PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH3 0x1419 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x1757 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH3 0x142D JUMPI PUSH3 0x1419 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x143D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x10F5 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x1467 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH3 0x1498 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH3 0xFB2 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH3 0x144E JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x14C7 DUP5 DUP5 DUP5 PUSH3 0x17B8 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH3 0x14F7 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH3 0x1813 PUSH1 0x20 SHL PUSH3 0x1939 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1511 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH3 0x1813 PUSH1 0x20 SHL PUSH3 0x1939 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x152A DUP6 PUSH1 0x40 DUP1 PUSH3 0x1813 PUSH1 0x20 SHL PUSH3 0x1939 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1544 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH3 0x1813 PUSH1 0x20 SHL PUSH3 0x1939 OR PUSH1 0x20 SHR JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1562 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH3 0xFB2 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0xE PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x1579 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x1585 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0x1419 JUMPI PUSH3 0x1419 PUSH1 0xF PUSH1 0x0 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x15B4 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x15C0 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x0 EQ PUSH3 0x1609 JUMPI PUSH1 0xF PUSH1 0x0 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x15E8 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH3 0x15F4 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH3 0x160D JUMP JUMPDEST PUSH2 0x1B7 JUMPDEST PUSH3 0x1407 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x164F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1664 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x168A SWAP2 SWAP1 PUSH3 0x1BF6 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH3 0x16B9 SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH3 0x194C PUSH3 0x1828 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH3 0x16FF SWAP1 DUP6 SWAP1 PUSH3 0x1EC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFAC PUSH3 0x171F DUP4 PUSH3 0x1884 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP6 PUSH3 0x14B8 PUSH1 0x20 SHL PUSH3 0x17E3 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1753 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT ISZERO PUSH2 0x1BA PUSH3 0xFB2 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH3 0x17C9 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x1802 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0x17FA JUMPI POP PUSH3 0x17F6 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0x18A4 PUSH1 0x20 SHL PUSH3 0x1984 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x10F5 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0xFB2 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1822 DUP5 DUP5 DUP5 PUSH3 0x17B8 JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x183D PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH3 0xFB2 JUMP JUMPDEST PUSH3 0x187C TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH3 0x1866 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH3 0x17E3 PUSH3 0x14B8 DUP8 SHL OR DUP7 SHR JUMP JUMPDEST PUSH3 0x14B8 PUSH1 0x20 SHL PUSH3 0x17E3 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xFAC PUSH1 0x0 PUSH1 0x60 DUP5 PUSH3 0x18BC PUSH1 0x20 SHL PUSH3 0x199A OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0x18B5 JUMPI DUP2 PUSH3 0x1094 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x190E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x193E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x193E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x193E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1921 JUMP JUMPDEST POP PUSH3 0x1753 SWAP3 SWAP2 POP PUSH3 0x196D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x60 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1753 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x196E JUMP JUMPDEST DUP1 MLOAD PUSH3 0xFAC DUP2 PUSH3 0x1F25 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x19A2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x19B9 PUSH3 0x19B3 DUP3 PUSH3 0x1EF9 JUMP JUMPDEST PUSH3 0x1ED2 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x19DB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH3 0x1A0B JUMPI DUP3 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x19F8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x19DF JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1A28 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1A39 PUSH3 0x19B3 DUP3 PUSH3 0x1EF9 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1A5B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1A87 JUMPI DUP2 MLOAD PUSH3 0x1A74 DUP2 PUSH3 0x1F25 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1A5E JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1AA3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1AB4 PUSH3 0x19B3 DUP3 PUSH3 0x1EF9 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1AD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1A87 JUMPI DUP2 MLOAD PUSH3 0x1AEF DUP2 PUSH3 0x1F25 JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1AD9 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1B13 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1B24 PUSH3 0x19B3 DUP3 PUSH3 0x1EF9 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1B46 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x1A87 JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1B49 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1B78 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x1B8E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 PUSH3 0x1BA4 PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH3 0x1ED2 JUMP JUMPDEST SWAP3 POP DUP2 DUP4 MSTORE DUP5 DUP2 DUP4 DUP7 ADD ADD GT ISZERO PUSH3 0x1BBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x1BDB JUMPI DUP5 DUP2 ADD DUP3 ADD MLOAD DUP5 DUP3 ADD DUP4 ADD MSTORE DUP2 ADD PUSH3 0x1BBE JUMP JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1BED JUMPI PUSH1 0x0 DUP3 DUP5 DUP7 ADD ADD MSTORE JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1C08 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1C21 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1094 DUP2 PUSH3 0x1F25 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1C40 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1C57 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP PUSH2 0x1C0 DUP1 DUP4 DUP8 SUB SLT ISZERO PUSH3 0x1C6E JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x1C79 DUP2 PUSH3 0x1ED2 JUMP JUMPDEST SWAP1 POP PUSH3 0x1C87 DUP7 DUP5 PUSH3 0x1984 JUMP JUMPDEST DUP2 MSTORE PUSH3 0x1C98 DUP7 PUSH1 0x20 DUP6 ADD PUSH3 0x1984 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1CAF JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1CBD DUP8 DUP3 DUP7 ADD PUSH3 0x1B67 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE POP PUSH1 0x60 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1CD5 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1CE3 DUP8 DUP3 DUP7 ADD PUSH3 0x1B67 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE POP PUSH1 0x80 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1CFB JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1D09 DUP8 DUP3 DUP7 ADD PUSH3 0x1A17 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE POP PUSH1 0xA0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1D21 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1D2F DUP8 DUP3 DUP7 ADD PUSH3 0x1A92 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE POP PUSH1 0xC0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1D47 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1D55 DUP8 DUP3 DUP7 ADD PUSH3 0x1B02 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE POP PUSH1 0xE0 DUP4 ADD MLOAD DUP3 DUP2 GT ISZERO PUSH3 0x1D6D JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x1D7B DUP8 DUP3 DUP7 ADD PUSH3 0x1991 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE POP PUSH2 0x100 DUP4 DUP2 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x120 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x140 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x160 DUP1 DUP5 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH2 0x180 PUSH3 0x1DBE DUP8 DUP3 DUP7 ADD PUSH3 0x1984 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 DUP4 DUP2 ADD MLOAD DUP4 DUP2 GT ISZERO PUSH3 0x1DD6 JUMPI DUP6 DUP7 REVERT JUMPDEST PUSH3 0x1DE4 DUP9 DUP3 DUP8 ADD PUSH3 0x1B67 JUMP JUMPDEST SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1E07 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1094 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP9 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1E64 JUMPI PUSH3 0x1E51 DUP6 MLOAD PUSH3 0x1F19 JUMP JUMPDEST DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1E3C JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1EA6 JUMPI PUSH3 0x1E93 DUP4 MLOAD PUSH3 0x1F19 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1E7E JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH3 0x1EC3 JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1EF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x1F0F JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x1419 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH1 0x60 SHR PUSH2 0x220 MLOAD PUSH1 0x60 SHR PUSH2 0x240 MLOAD PUSH1 0x60 SHR PUSH2 0x260 MLOAD PUSH1 0x60 SHR PUSH2 0x280 MLOAD PUSH1 0x60 SHR PUSH2 0x2A0 MLOAD PUSH1 0x60 SHR PUSH2 0x2C0 MLOAD PUSH2 0x2E0 MLOAD PUSH2 0x300 MLOAD PUSH2 0x320 MLOAD PUSH2 0x340 MLOAD PUSH2 0x360 MLOAD PUSH2 0x380 MLOAD PUSH1 0x60 SHR PUSH2 0x3A0 MLOAD PUSH1 0x60 SHR PUSH2 0x3C0 MLOAD PUSH1 0x60 SHR PUSH2 0x3E0 MLOAD PUSH1 0x60 SHR PUSH2 0x400 MLOAD PUSH1 0x60 SHR PUSH2 0x420 MLOAD PUSH1 0x60 SHR PUSH2 0x440 MLOAD PUSH2 0x460 MLOAD PUSH1 0xF8 SHR PUSH2 0x480 MLOAD PUSH1 0xF8 SHR PUSH2 0x4A0 MLOAD PUSH1 0x60 SHR PUSH2 0x4C0 MLOAD PUSH1 0xF8 SHR PUSH2 0x4E0 MLOAD PUSH2 0x637A PUSH3 0x20F9 PUSH1 0x0 CODECOPY DUP1 PUSH2 0xF3B MSTORE POP DUP1 PUSH2 0x9C3 MSTORE POP DUP1 PUSH2 0x943 MSTORE DUP1 PUSH2 0x96E MSTORE DUP1 PUSH2 0x999 MSTORE POP DUP1 PUSH2 0x4A7F MSTORE POP DUP1 PUSH2 0x4A5B MSTORE POP DUP1 PUSH2 0x2D6E MSTORE DUP1 PUSH2 0x46DF MSTORE POP DUP1 PUSH2 0x1F5B MSTORE POP DUP1 PUSH2 0x1F2B MSTORE POP DUP1 PUSH2 0x1EFB MSTORE POP DUP1 PUSH2 0x1ECB MSTORE POP DUP1 PUSH2 0x1E9B MSTORE POP DUP1 PUSH2 0x1E6B MSTORE POP DUP1 PUSH2 0x32DA MSTORE POP DUP1 PUSH2 0x32AA MSTORE POP DUP1 PUSH2 0x327A MSTORE POP DUP1 PUSH2 0x324A MSTORE POP DUP1 PUSH2 0x321A MSTORE POP DUP1 PUSH2 0x31EA MSTORE POP DUP1 PUSH2 0x21B8 MSTORE POP DUP1 PUSH2 0x2176 MSTORE POP DUP1 PUSH2 0x2134 MSTORE POP DUP1 PUSH2 0x20F2 MSTORE POP DUP1 PUSH2 0x20B0 MSTORE POP DUP1 PUSH2 0x206E MSTORE POP DUP1 PUSH2 0x1195 MSTORE POP DUP1 PUSH2 0x19C9 MSTORE POP DUP1 PUSH2 0x13E8 MSTORE POP DUP1 PUSH2 0xCFA MSTORE POP DUP1 PUSH2 0x1E3F MSTORE POP DUP1 PUSH2 0x1E1B MSTORE POP DUP1 PUSH2 0x1295 MSTORE POP DUP1 PUSH2 0x1271 MSTORE POP DUP1 PUSH2 0x11CD MSTORE POP DUP1 PUSH2 0x3058 MSTORE POP DUP1 PUSH2 0x309A MSTORE POP DUP1 PUSH2 0x3079 MSTORE POP PUSH2 0x637A PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3BA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x74F3B009 GT PUSH2 0x1F4 JUMPI DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x11A JUMPI DUP1 PUSH4 0xD5C096C4 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xE78AF078 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE78AF078 EQ PUSH2 0x791 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0x7A4 JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x7AC JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x7B4 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x75B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x76E JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x781 JUMPI DUP1 PUSH4 0xDE82CD34 EQ PUSH2 0x789 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0xC6E9407E GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xC6E9407E EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xCD6CEDA8 EQ PUSH2 0x71D JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x748 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x6DF JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x6E7 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x6FA JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x702 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x876F303B GT PUSH2 0x192 JUMPI DUP1 PUSH4 0x90193B7C GT PUSH2 0x161 JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x6B1 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x6CC JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x876F303B EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x681 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x696 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x7F1260D1 GT PUSH2 0x1CE JUMPI DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x620 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x643 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x64B JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x653 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x5D9 JUMPI DUP1 PUSH4 0x7B549244 EQ PUSH2 0x5FA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x60D JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x54DEA00A GT PUSH2 0x277 JUMPI DUP1 PUSH4 0x679AEFCE GT PUSH2 0x246 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x59C JUMPI DUP1 PUSH4 0x70464016 EQ PUSH2 0x5B3 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x5C6 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x573 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x3C975D51 GT PUSH2 0x2B3 JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x548 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x4E9 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4FC JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x504 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x35C JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x32B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x493 JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x4A6 JUMPI DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x4CC JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x43F JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0x1EA046C1 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x47E JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x398 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x42F JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x437 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x1EC954A EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x4842D4C EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3F0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D2 PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x5DAB JUMP JUMPDEST PUSH2 0x7C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3D2 PUSH2 0x86D JUMP JUMPDEST PUSH2 0x3F8 PUSH2 0x87C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6219 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x413 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x912 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6120 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x929 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x418 PUSH2 0x9C1 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x447 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x612B JUMP JUMPDEST PUSH2 0x45E PUSH2 0xA14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x60E8 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x5CAB JUMP JUMPDEST PUSH2 0xA1E JUMP JUMPDEST PUSH2 0x486 PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x609B JUMP JUMPDEST PUSH2 0x418 PUSH2 0x4A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x588F JUMP JUMPDEST PUSH2 0xB16 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x4B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0xB8A JUMP JUMPDEST PUSH2 0x42D PUSH2 0x4C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5EE2 JUMP JUMPDEST PUSH2 0xBE6 JUMP JUMPDEST PUSH2 0x4D4 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x62B0 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xCD2 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x4F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xCF8 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x512 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x51F PUSH2 0xD57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP3 SWAP2 SWAP1 PUSH2 0x6287 JUMP JUMPDEST PUSH2 0x42D PUSH2 0xD82 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x543 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B9C JUMP JUMPDEST PUSH2 0xD94 JUMP JUMPDEST PUSH2 0x42D PUSH2 0xDB2 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0xDC4 JUMP JUMPDEST PUSH2 0x3F8 PUSH2 0xDDF JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x586 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0xE53 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP3 SWAP2 SWAP1 PUSH2 0x622C JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xE8A JUMP JUMPDEST PUSH2 0x5A4 PUSH2 0xEF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6271 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x5C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x5D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST PUSH2 0x5EC PUSH2 0x5E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP3 SWAP2 SWAP1 PUSH2 0x60FB JUMP JUMPDEST PUSH2 0x42D PUSH2 0x608 CALLDATASIZE PUSH1 0x4 PUSH2 0x5CD8 JUMP JUMPDEST PUSH2 0x10F5 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x61B CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x633 PUSH2 0x62E CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x1131 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6295 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x1193 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x11B7 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x661 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B40 JUMP JUMPDEST PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x121B JUMP JUMPDEST PUSH2 0x586 PUSH2 0x67C CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0x1249 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x126F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6087 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x6AC CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x12B7 JUMP JUMPDEST PUSH2 0x3F8 PUSH2 0x12D2 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x6C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x1333 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x6DA CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x1371 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x418 PUSH2 0x6F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x1388 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x139B JUMP JUMPDEST PUSH2 0x42D PUSH2 0x13AC JUMP JUMPDEST PUSH2 0x42D PUSH2 0x718 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0x13BE JUMP JUMPDEST PUSH2 0x730 PUSH2 0x72B CALLDATASIZE PUSH1 0x4 PUSH2 0x5A36 JUMP JUMPDEST PUSH2 0x13C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6245 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x756 CALLDATASIZE PUSH1 0x4 PUSH2 0x58CF JUMP JUMPDEST PUSH2 0x140A JUMP JUMPDEST PUSH2 0x5EC PUSH2 0x769 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0x1495 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x77C CALLDATASIZE PUSH1 0x4 PUSH2 0x5857 JUMP JUMPDEST PUSH2 0x15B8 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x15F5 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x15FB JUMP JUMPDEST PUSH2 0x418 PUSH2 0x79F CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0x169D JUMP JUMPDEST PUSH2 0x42D PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x16D4 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x7C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x16DE JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x7F4 PUSH2 0x7D9 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x809 PUSH2 0x7FF PUSH2 0xCF8 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x811 PUSH2 0x19B7 JUMP JUMPDEST PUSH2 0x823 DUP5 DUP5 PUSH2 0x81E PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x19EB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x82D PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x83E JUMPI INVALID JUMPDEST EQ PUSH2 0x855 JUMPI PUSH2 0x850 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1A9C JUMP JUMPDEST PUSH2 0x862 JUMP JUMPDEST PUSH2 0x862 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1AF5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x1B30 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x908 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x908 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x8EB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91F CALLER DUP5 DUP5 PUSH2 0x1B37 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x931 PUSH2 0x1B9F JUMP JUMPDEST PUSH2 0x939 PUSH2 0x9C1 JUMP JUMPDEST ISZERO PUSH2 0x969 JUMPI PUSH2 0x969 PUSH32 0x0 PUSH1 0x0 PUSH2 0x1C0C JUMP JUMPDEST PUSH2 0x994 PUSH32 0x0 PUSH1 0x2 PUSH2 0x1C0C JUMP JUMPDEST PUSH2 0x9BF PUSH32 0x0 PUSH1 0x3 PUSH2 0x1C0C JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x9F8 PUSH2 0x1DFC JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0xA03 PUSH2 0x1E19 JUMP JUMPDEST SWAP2 POP PUSH2 0xA0D PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x877 PUSH2 0x1A03 JUMP JUMPDEST DUP1 PUSH1 0xE PUSH1 0x0 DUP5 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xA2F JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xA3A JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xA87 PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xAA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xACC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xB0F JUMPI PUSH2 0xAE3 DUP2 PUSH2 0x1E61 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xAEF JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0xAD2 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB23 DUP6 CALLER PUSH2 0x15B8 JUMP JUMPDEST SWAP1 POP PUSH2 0xB47 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0xB3F JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xB52 DUP6 DUP6 DUP6 PUSH2 0x1F8A JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0xB6D JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xB7F JUMPI PUSH2 0xB7F DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1B37 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB95 DUP3 PUSH2 0x206A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBA2 DUP3 PUSH2 0x1E61 JUMP JUMPDEST SWAP1 POP PUSH2 0xBBB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xBD3 SWAP1 PUSH2 0x21F8 JUMP JUMPDEST SWAP1 POP PUSH2 0xBE0 DUP4 DUP4 DUP4 PUSH2 0x2207 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xBEE PUSH2 0x221D JUMP JUMPDEST PUSH2 0xBFE PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xC0F PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B DUP3 TIMESTAMP PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0xC2F PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC3A PUSH2 0x2263 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xC4B DUP2 ISZERO PUSH2 0x13E PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC59 DUP7 PUSH2 0x3E8 PUSH2 0x1774 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0xC88 JUMPI PUSH2 0xC83 PUSH2 0xC74 PUSH3 0x15180 DUP7 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0xC7E DUP5 DUP9 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x22D7 JUMP JUMPDEST PUSH2 0xCA2 JUMP JUMPDEST PUSH2 0xCA2 PUSH2 0xC98 PUSH3 0x15180 DUP5 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0xC7E DUP7 DUP9 PUSH2 0x1774 JUMP JUMPDEST SWAP1 POP PUSH2 0xCB4 PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xCC0 DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x230A JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x16D4 JUMP JUMPDEST PUSH2 0xCE4 PUSH2 0x221D JUMP JUMPDEST PUSH2 0xCEC PUSH2 0x2359 JUMP JUMPDEST PUSH2 0xCF5 DUP2 PUSH2 0x236C JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x91F SWAP2 DUP6 SWAP1 PUSH2 0xD52 SWAP1 DUP7 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0x1B37 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xD6C DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x199A JUMP JUMPDEST SWAP3 POP PUSH2 0xD7B DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x199A JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xD8A PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x0 PUSH2 0x23F7 JUMP JUMPDEST PUSH2 0xD9C PUSH2 0x221D JUMP JUMPDEST PUSH2 0xDA4 PUSH2 0x2359 JUMP JUMPDEST PUSH2 0xDAE DUP3 DUP3 PUSH2 0x2488 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xDBA PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x1 PUSH2 0x2596 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0xDD2 DUP4 PUSH2 0x206A JUMP JUMPDEST PUSH2 0x25ED JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x908 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x908 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x877 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x199A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xE69 DUP7 MLOAD PUSH2 0xE64 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x2640 JUMP JUMPDEST PUSH2 0xE7E DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x264D PUSH2 0x266F PUSH2 0x26D8 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xE9C PUSH2 0x286F JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xEB4 DUP6 DUP6 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEC0 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 DUP3 EQ PUSH2 0xEDB JUMPI PUSH2 0xED6 DUP3 DUP10 PUSH2 0x295F JUMP JUMPDEST PUSH2 0xEDD JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH2 0xEE9 DUP2 DUP5 PUSH2 0x2AC1 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF03 PUSH2 0x2263 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF1B PUSH2 0x139B JUMP JUMPDEST ISZERO PUSH2 0xF28 JUMPI POP PUSH1 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH2 0xF74 JUMPI PUSH2 0xF35 PUSH2 0x9C1 JUMP JUMPDEST PUSH2 0xF5F JUMPI PUSH32 0x0 PUSH2 0xF6D JUMP JUMPDEST PUSH1 0xB SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xF9C JUMPI POP PUSH1 0xB SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xFCC JUMPI POP PUSH1 0xB SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xDDA JUMP JUMPDEST PUSH2 0xDDA PUSH2 0x1BB PUSH2 0x2B12 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1001 PUSH2 0x7D9 PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x100C PUSH2 0x7FF PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1019 DUP7 PUSH2 0x2B3C JUMP JUMPDEST ISZERO PUSH2 0x1041 JUMPI PUSH2 0x1026 PUSH2 0x2B6B JUMP JUMPDEST PUSH2 0x1038 DUP10 PUSH2 0x1032 PUSH2 0x9E5 JUMP JUMPDEST DUP9 PUSH2 0x2B7E JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0x1093 JUMP JUMPDEST PUSH2 0x1049 PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1053 PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH2 0x105F DUP11 DUP3 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x1083 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x106F PUSH2 0x139B JUMP JUMPDEST PUSH2 0x1079 JUMPI DUP14 PUSH2 0x107C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x264D JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1091 DUP4 DUP3 PUSH2 0x266F JUMP JUMPDEST POP JUMPDEST PUSH2 0x109D DUP12 DUP3 PUSH2 0x2C2B JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x10B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10E0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0xF PUSH1 0x0 DUP5 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1106 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1111 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x12B7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 PUSH2 0x1146 DUP9 PUSH2 0x206A JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x1167 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1170 DUP2 PUSH2 0x2C35 JUMP JUMPDEST SWAP5 POP PUSH2 0x117B DUP2 PUSH2 0x2C43 JUMP JUMPDEST SWAP4 POP PUSH2 0x1186 DUP2 PUSH2 0x2C51 JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x11BF PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x1 PUSH2 0x23F7 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x11FE SWAP3 SWAP2 SWAP1 PUSH2 0x6011 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1228 PUSH2 0x286F JUMP JUMPDEST POP POP SWAP3 POP SWAP3 POP POP PUSH2 0x1242 DUP2 DUP4 PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x125A DUP7 MLOAD PUSH2 0xE64 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0xE7E DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x2C73 PUSH2 0x2C84 PUSH2 0x26D8 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x908 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x908 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1340 CALLER DUP6 PUSH2 0x15B8 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x135A JUMPI PUSH2 0x1355 CALLER DUP6 PUSH1 0x0 PUSH2 0x1B37 JUMP JUMPDEST PUSH2 0x1367 JUMP JUMPDEST PUSH2 0x1367 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1B37 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91F CALLER DUP5 DUP5 PUSH2 0x1F8A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x2CED JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0x1396 DUP4 PUSH2 0x206A JUMP JUMPDEST PUSH2 0x2D67 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x877 SWAP1 PUSH1 0xFF PUSH2 0x2D8F JUMP JUMPDEST PUSH2 0x13B4 PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x0 PUSH2 0x2596 JUMP JUMPDEST PUSH2 0xCF5 DUP2 PUSH2 0x2D99 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x13D7 DUP6 PUSH2 0x2DED JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x1439 DUP13 PUSH2 0x12B7 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x144F SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x616B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1480 DUP9 DUP3 PUSH2 0x1477 DUP8 DUP8 DUP8 PUSH2 0x2E56 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2E95 JUMP JUMPDEST PUSH2 0x148B DUP9 DUP9 DUP9 PUSH2 0x1B37 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x14A4 PUSH2 0x7D9 PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x14AF PUSH2 0x7FF PUSH2 0xCF8 JUMP JUMPDEST PUSH2 0x14B7 PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x14C1 PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH2 0x14CB PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x1578 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x14E0 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x2EEC JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14F9 PUSH2 0x14EF PUSH2 0x1B30 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x150B PUSH1 0x0 PUSH2 0x1506 PUSH2 0x1B30 JUMP JUMPDEST PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x151E DUP12 PUSH2 0x1517 PUSH2 0x1B30 JUMP JUMPDEST DUP5 SUB PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x1528 DUP2 DUP5 PUSH2 0x2C84 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1541 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x156B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x10E8 JUMP JUMPDEST PUSH2 0x1582 DUP9 DUP3 PUSH2 0x2BC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x15AA DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1596 PUSH2 0x139B JUMP JUMPDEST PUSH2 0x15A0 JUMPI DUP14 PUSH2 0x15A3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x2C73 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x151E DUP12 DUP4 PUSH2 0x2FC5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C2 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x15E4 JUMPI POP PUSH1 0x0 NOT PUSH2 0x923 JUMP JUMPDEST PUSH2 0x15EE DUP4 DUP4 PUSH2 0x2FCF JUMP JUMPDEST SWAP1 POP PUSH2 0x923 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1608 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 PUSH2 0x161E PUSH2 0xCF8 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x163C SWAP3 SWAP2 SWAP1 PUSH2 0x61E4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1668 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x168C SWAP2 SWAP1 PUSH2 0x5F03 JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x1242 DUP2 DUP4 ADD PUSH2 0x2FFA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x300E JUMP JUMPDEST PUSH2 0x16B0 PUSH2 0x221D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x16BB PUSH2 0x2263 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x16CB DUP2 PUSH2 0x140 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xDAE DUP3 PUSH2 0x3019 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x3054 JUMP JUMPDEST PUSH2 0x16E6 PUSH2 0x221D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16F1 DUP4 PUSH2 0x206A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16FE DUP3 PUSH2 0x1E61 JUMP JUMPDEST SWAP1 POP PUSH2 0x1717 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1722 DUP3 DUP3 DUP6 PUSH2 0x2207 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x175C SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xDAE DUP2 PUSH2 0x30F1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1798 DUP5 ISZERO DUP1 PUSH2 0x1791 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x178E JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x19A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x17B7 DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x17B0 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x19A9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x17D2 JUMPI PUSH1 0x0 PUSH2 0x17D5 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17F0 DUP5 DUP5 DUP5 PUSH2 0x316A JUMP JUMPDEST POP DUP3 DUP3 SHL PUSH1 0x0 NOT PUSH1 0x1 DUP4 SHL ADD DUP4 SHL NOT DUP6 AND OR JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x181B DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x19A9 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1894 SWAP2 SWAP1 PUSH2 0x5ECA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x18B1 DUP2 DUP4 DUP6 PUSH2 0x194C JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x18F5 SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0x1912 DUP4 PUSH2 0x2C35 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x17E3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1935 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x19A9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1946 DUP5 DUP5 DUP5 PUSH2 0x316A JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x195F PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1803 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x197C DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x17E3 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x17E3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1993 JUMPI DUP2 PUSH2 0x1798 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xDAE JUMPI PUSH2 0xDAE DUP2 PUSH2 0x2B12 JUMP JUMPDEST PUSH2 0x19BF PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x31B8 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x17B7 DUP2 DUP5 LT DUP1 ISZERO PUSH2 0x19FC JUMPI POP DUP2 DUP4 LT JUMPDEST PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1A0F PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1A2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A54 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xB0F JUMPI PUSH2 0x1A7D PUSH2 0x1A6E DUP3 PUSH2 0x25ED JUMP JUMPDEST PUSH2 0x1A77 DUP4 PUSH2 0x31E0 JUMP JUMPDEST SWAP1 PUSH2 0x32FE JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A89 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1A5A JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1AC6 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x1ADC JUMPI PUSH2 0x1AD7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x332A JUMP JUMPDEST PUSH2 0x1AE9 JUMP JUMPDEST PUSH2 0x1AE9 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3394 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1B1F JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x1ADC JUMPI PUSH2 0x1AD7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3498 JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1B92 SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x1BA7 PUSH2 0x2359 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BB6 PUSH2 0x286F JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP4 POP PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x1BD1 JUMPI PUSH2 0x1BD1 DUP4 PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BDB PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP4 DUP3 EQ PUSH2 0x1BF6 JUMPI PUSH2 0x1BF1 DUP3 DUP8 PUSH2 0x295F JUMP JUMPDEST PUSH2 0x1BF8 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH2 0x1C04 DUP3 DUP3 PUSH2 0x3500 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x1C54 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CA4 SWAP2 SWAP1 PUSH2 0x5ECA JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x1CF2 JUMPI PUSH2 0x1CB4 DUP2 PUSH2 0x191C JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1DBF JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x1D4F JUMPI PUSH2 0x1D04 DUP2 PUSH2 0x191C JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1DBF JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x1DB4 JUMPI PUSH2 0x1D61 DUP2 PUSH2 0x191C JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1DBF JUMP JUMPDEST PUSH2 0x1DBF PUSH2 0x1BB PUSH2 0x2B12 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x1DEF SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E06 PUSH2 0x1E3D JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x877 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1E8F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1EBF JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1EEF JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1F1F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1F4F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1F7F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST PUSH2 0xDDA PUSH2 0x135 PUSH2 0x2B12 JUMP JUMPDEST PUSH2 0x1FA1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1FB8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1FC3 DUP4 DUP4 DUP4 PUSH2 0x17B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1FE9 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x2018 SWAP1 DUP3 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1B92 SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x20AE JUMPI POP PUSH1 0x0 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x20F0 JUMPI POP PUSH1 0x1 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2132 JUMPI POP PUSH1 0x2 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2174 JUMPI POP PUSH1 0x3 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x21B6 JUMPI POP PUSH1 0x4 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1F7F JUMPI POP PUSH1 0x5 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x1 PUSH2 0x2212 DUP2 PUSH2 0x353C JUMP JUMPDEST PUSH2 0xBE0 DUP5 DUP5 DUP5 PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x224C PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x11C9 JUMP JUMPDEST SWAP1 POP PUSH2 0xCF5 PUSH2 0x225B DUP3 CALLER PUSH2 0x35DC JUMP JUMPDEST PUSH2 0x191 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2274 PUSH2 0x36C5 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x22C7 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x22AB JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x22A1 JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x22C2 JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x22BC JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x22CF JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22E6 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP3 PUSH2 0x22F3 JUMPI POP PUSH1 0x0 PUSH2 0x923 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x22FF JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0x2316 DUP5 DUP5 DUP5 DUP5 PUSH2 0x3724 JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x234B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6295 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x2364 PUSH2 0x1DFC JUMP JUMPDEST PUSH2 0x192 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x2381 PUSH2 0x2377 PUSH2 0x3763 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x2396 PUSH2 0x238C PUSH2 0x376C JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x23A7 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x17E3 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x23DA SWAP1 DUP4 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x1798 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x19A9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2417 JUMPI PUSH2 0x2412 PUSH2 0x2408 PUSH2 0x1E19 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x242C JUMP JUMPDEST PUSH2 0x242C PUSH2 0x2422 PUSH2 0x1E3D JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x23DA SWAP1 DUP4 SWAP1 PUSH2 0x6120 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2492 PUSH2 0xCF8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x249E PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24CB SWAP3 SWAP2 SWAP1 PUSH2 0x61E4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x251B SWAP2 SWAP1 PUSH2 0x5F03 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x2568 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x61CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2582 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x148B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x25A5 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x17BC JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x25D8 SWAP1 DUP4 SWAP1 PUSH2 0x6120 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xCF5 JUMPI PUSH2 0xCF5 PUSH2 0x3778 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F7 PUSH2 0x1193 JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x260D JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x2630 JUMPI PUSH2 0x262B DUP2 PUSH2 0x2C35 JUMP JUMPDEST PUSH2 0x1798 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xDAE DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x265E PUSH1 0x0 DUP9 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP9 POP SWAP9 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x267E SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0x26B9 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2698 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x26AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AC1 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x26C5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2681 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x27C7 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x26FC SWAP3 SWAP2 SWAP1 PUSH2 0x6041 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2739 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x273E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x274D JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x27A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x27CF PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x27D9 PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH2 0x27E5 DUP8 DUP3 PUSH2 0x2BC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x27FD DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x280F DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1F NOT DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x2881 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x2897 PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28B3 SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2907 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x596A JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x291C DUP2 PUSH2 0x2917 PUSH2 0x1A03 JUMP JUMPDEST PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x2925 DUP2 PUSH2 0x38F8 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 PUSH2 0x2933 PUSH2 0xD57 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x0 PUSH2 0x2945 DUP9 DUP7 DUP5 PUSH2 0x3931 JUMP JUMPDEST SWAP5 POP SWAP1 POP PUSH2 0x2953 DUP8 DUP3 PUSH2 0x39BE JUMP JUMPDEST SWAP6 POP POP POP POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x29A0 JUMPI PUSH2 0x2996 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x297F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2968 JUMP JUMPDEST POP DUP2 PUSH2 0x29B1 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x923 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2AAA JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x2A07 JUMPI PUSH2 0x29FD PUSH2 0x29DB DUP4 DUP8 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x29F8 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29EA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x39D6 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x29C6 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x2A60 PUSH2 0x2A3F PUSH2 0x2A39 PUSH2 0x2A1E DUP5 DUP11 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x2A33 PUSH2 0x2A2B DUP9 DUP14 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x39D6 JUMP JUMPDEST SWAP1 PUSH2 0x23E5 JUMP JUMPDEST DUP7 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x29F8 PUSH2 0x2A4F DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x2A33 PUSH2 0x2A2B PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1774 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2A88 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2A83 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0x2AA1 JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x2AA1 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x923 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29B9 JUMP JUMPDEST POP PUSH2 0x2AB6 PUSH2 0x141 PUSH2 0x2B12 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2AD0 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP3 PUSH2 0x2ADD JUMPI POP PUSH1 0x0 PUSH2 0x923 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2B00 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2AF7 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x19A9 JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x2B09 JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0xCF5 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x39F6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xDD7 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2B61 SWAP2 SWAP1 PUSH2 0x5F43 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x2B76 PUSH2 0x139B JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH2 0x2B8F DUP8 PUSH2 0x38F8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x2BA2 DUP4 DUP6 DUP10 PUSH2 0x3A71 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2BB2 DUP3 PUSH1 0x0 PUSH2 0x3A9D JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2BD1 SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0x2C0C DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2BEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BFF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x32FE JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2C18 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2BD4 JUMP JUMPDEST PUSH2 0xDAE DUP3 DUP3 PUSH2 0x3B5A JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 DUP3 PUSH1 0x60 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH1 0x60 DUP1 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C5D DUP4 PUSH2 0x21F8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2C6C DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x199A JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x265E PUSH1 0x1 DUP9 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2C93 SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0x2CCE DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2CAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2CC1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3C26 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2CDA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2C96 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF7 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x877 SWAP2 SWAP1 PUSH2 0x5B80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH2 0x2DA1 PUSH2 0x1193 JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x2DAD JUMPI PUSH2 0xCF5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xDAE JUMPI PUSH1 0x0 DUP1 PUSH2 0x2DCE DUP4 PUSH2 0x2C51 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0xBE0 DUP5 PUSH2 0x2DE7 DUP7 PUSH2 0x1E61 JUMP JUMPDEST DUP5 PUSH2 0x2207 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2DFF PUSH2 0xD57 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2E14 DUP11 DUP7 DUP7 PUSH2 0x3C74 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2E24 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 DUP3 EQ PUSH2 0x2E3F JUMPI PUSH2 0x2E3A DUP3 DUP6 PUSH2 0x295F JUMP JUMPDEST PUSH2 0x2E41 JUMP JUMPDEST DUP3 JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP1 SWAP10 POP SWAP3 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EA0 DUP6 PUSH2 0x3CCC JUMP JUMPDEST SWAP1 POP PUSH2 0x2EB6 PUSH2 0x2EB0 DUP8 DUP4 DUP8 PUSH2 0x3CE8 JUMP JUMPDEST DUP4 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x2EC5 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x19A9 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2EFB DUP5 PUSH2 0x3D97 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F16 PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2F0E JUMPI INVALID JUMPDEST EQ PUSH1 0xCE PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2F21 DUP6 PUSH2 0x3DAD JUMP JUMPDEST SWAP1 POP PUSH2 0x2F2F DUP2 MLOAD DUP8 MLOAD PUSH2 0x2640 JUMP JUMPDEST PUSH2 0x2F39 DUP2 DUP8 PUSH2 0x2BC2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F43 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x60 PUSH2 0x2F51 DUP4 PUSH2 0x3DC3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F5F DUP4 DUP4 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 PUSH2 0x2F7C PUSH14 0x8000000000000000000000000000 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0x2F88 DUP14 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST DUP1 DUP7 PUSH2 0x2F92 PUSH2 0x1193 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F9C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2FB2 DUP6 DUP5 PUSH2 0x3500 JUMP JUMPDEST POP SWAP13 SWAP4 SWAP12 POP SWAP3 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xDAE DUP3 DUP3 PUSH2 0x3E65 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x3008 PUSH2 0x9E5 JUMP JUMPDEST SWAP1 PUSH2 0x180B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x3EF2 JUMP JUMPDEST PUSH2 0x3025 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x3724 JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x23DA SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x30C1 PUSH2 0x3EFD JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x30D6 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x619F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x3100 JUMPI PUSH2 0xCF5 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x310F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x17B7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3137 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x3160 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x19A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3120 JUMP JUMPDEST PUSH2 0x3179 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x31A1 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x19FC JUMPI POP PUSH2 0x3197 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1984 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x17B7 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x2359 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31C2 PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDAE JUMPI PUSH2 0x31D8 DUP2 PUSH2 0x2D99 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x31C7 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x320E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x323E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x326E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x329E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x32CE JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1F7F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x3318 DUP5 ISZERO DUP1 PUSH2 0x1791 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x178E JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3336 DUP6 DUP4 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x3357 DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x334A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F01 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x336A DUP8 DUP8 DUP8 DUP8 PUSH2 0x3F0D JUMP JUMPDEST SWAP1 POP PUSH2 0x3389 DUP2 DUP5 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x337C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F2F JUMP JUMPDEST SWAP1 POP PUSH2 0x862 DUP2 PUSH2 0x3F3B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x33A5 JUMPI INVALID JUMPDEST EQ SWAP1 POP PUSH2 0x33B2 DUP7 DUP5 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x33D2 DUP8 PUSH1 0x60 ADD MLOAD DUP5 DUP4 PUSH2 0x33C6 JUMPI DUP7 PUSH2 0x33C8 JUMP JUMPDEST DUP8 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x334A JUMPI INVALID JUMPDEST DUP8 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x33EB DUP11 PUSH2 0x2DED JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x33FE PUSH2 0x1193 JUMP JUMPDEST DUP11 EQ PUSH2 0x3424 JUMPI PUSH2 0x341F DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3417 DUP15 PUSH2 0x3F57 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3F8C JUMP JUMPDEST PUSH2 0x343F JUMP JUMPDEST PUSH2 0x343F DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3437 DUP16 PUSH2 0x3F57 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3FC5 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3450 DUP5 DUP7 DUP6 DUP10 DUP6 PUSH2 0x3FE9 JUMP JUMPDEST DUP7 PUSH2 0x346A JUMPI PUSH2 0x3465 DUP3 DUP11 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x337C JUMPI INVALID JUMPDEST PUSH2 0x3487 JUMP JUMPDEST PUSH2 0x3487 DUP3 DUP11 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x347A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4069 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34A7 DUP7 PUSH1 0x60 ADD MLOAD PUSH2 0x4075 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x34B6 DUP6 DUP4 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x34CA DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x334A JUMPI INVALID JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x34DD DUP8 DUP8 DUP8 DUP8 PUSH2 0x4096 JUMP JUMPDEST SWAP1 POP PUSH2 0x862 DUP2 DUP5 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x347A JUMPI INVALID JUMPDEST PUSH2 0xCF5 PUSH2 0x34FA PUSH2 0x13E6 JUMP JUMPDEST DUP3 PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x350D DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x351A DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1939 JUMP JUMPDEST OR PUSH1 0xC SSTORE PUSH2 0xDAE PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3535 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x19A9 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0xE PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x354C JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3557 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCF5 JUMPI PUSH2 0xCF5 PUSH1 0xF PUSH1 0x0 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3583 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x358E JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x0 EQ PUSH2 0x35D3 JUMPI PUSH1 0xF PUSH1 0x0 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x35B4 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x35BF JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x35D7 JUMP JUMPDEST PUSH2 0x1B7 JUMPDEST PUSH2 0x2B12 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x35FB PUSH2 0x126F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3616 JUMPI POP PUSH2 0x3616 DUP4 PUSH2 0x300E JUMP JUMPDEST ISZERO PUSH2 0x363E JUMPI PUSH2 0x3623 PUSH2 0x126F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0x3646 PUSH2 0x2CED JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3675 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x614C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15EE SWAP2 SWAP1 PUSH2 0x5A69 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x36E4 PUSH1 0x0 PUSH1 0x40 PUSH1 0x9 SLOAD PUSH2 0x199A SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP5 POP PUSH2 0x36F6 SWAP1 PUSH1 0x40 DUP1 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP4 POP PUSH2 0x3709 SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP3 POP PUSH2 0x371C SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x199A JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x3731 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x373E DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x374A DUP6 PUSH1 0x40 DUP1 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x3757 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x1939 JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3782 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x3798 PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x37B4 SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x3808 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x596A JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x3818 DUP2 PUSH2 0x2917 PUSH2 0x1A03 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3823 DUP3 PUSH2 0x3DC3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x382F PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x383E DUP3 DUP5 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH2 0xBE0 DUP3 DUP3 PUSH2 0x3500 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x385E DUP10 PUSH2 0x2DED JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x56DB DUP11 PUSH2 0x3876 JUMPI PUSH2 0x40E4 PUSH2 0x387A JUMP JUMPDEST PUSH2 0x4179 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x3892 DUP7 DUP7 DUP10 DUP8 DUP16 DUP16 DUP10 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x56DB DUP14 PUSH2 0x38A6 JUMPI PUSH2 0x180B PUSH2 0x38AA JUMP JUMPDEST PUSH2 0x23E5 JUMPDEST SWAP1 POP PUSH2 0x38B7 DUP8 DUP4 DUP4 PUSH2 0x41F7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38C7 DUP10 DUP6 DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x38D6 DUP8 DUP10 DUP9 DUP13 DUP6 PUSH2 0x3FE9 JUMP JUMPDEST DUP4 PUSH2 0x38E2 DUP5 PUSH1 0x0 PUSH2 0x3A9D JUMP JUMPDEST SWAP11 POP SWAP11 POP POP POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x391F DUP4 PUSH2 0x3908 PUSH2 0x1193 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3912 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FFA JUMP JUMPDEST PUSH2 0x3928 DUP5 PUSH2 0x3DC3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3943 DUP9 DUP9 PUSH2 0x426B JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x3959 JUMPI PUSH1 0x0 PUSH2 0x395D JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x396F JUMPI PUSH1 0x0 PUSH2 0x3973 JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x398E PUSH2 0x3984 PUSH1 0x0 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1A77 DUP6 DUP8 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x39A9 PUSH2 0x399F PUSH1 0x2 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1A77 DUP6 DUP9 PUSH2 0x2AC1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 PUSH2 0x39CD DUP5 DUP5 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x29F8 DUP5 PUSH2 0x42ED JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39E5 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x39EE JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3A80 DUP5 PUSH2 0x4313 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3A8F DUP8 DUP8 DUP5 PUSH2 0x4329 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3ABA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3AE4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3B53 JUMPI PUSH2 0x3AFB PUSH2 0x1193 JUMP JUMPDEST DUP2 EQ PUSH2 0x3B32 JUMPI DUP4 PUSH2 0x3B0A PUSH2 0x1193 JUMP JUMPDEST DUP3 LT PUSH2 0x3B19 JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x3B1B JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3B25 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B34 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3B40 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3AEA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3B71 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x3B7D DUP3 PUSH1 0x0 DUP4 PUSH2 0x17B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3BA3 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3BD6 PUSH2 0x3BD1 DUP3 PUSH2 0x3BCB PUSH2 0x9E5 JUMP JUMPDEST SWAP1 PUSH2 0x43D8 JUMP JUMPDEST PUSH2 0x43E6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x3C1A SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C35 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP3 PUSH2 0x3C42 JUMPI POP PUSH1 0x0 PUSH2 0x923 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x3C5C SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2AF7 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x3C68 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x923 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x3C86 DUP9 PUSH2 0x38F8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x3C98 DUP4 DUP11 DUP11 PUSH2 0x3931 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x3CA8 DUP6 DUP5 PUSH2 0x39BE JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3CB9 JUMPI PUSH2 0x3CB9 DUP2 PUSH2 0x34EF JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CD6 PUSH2 0x3054 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x11FE SWAP3 SWAP2 SWAP1 PUSH2 0x6051 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CFA DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x3D33 SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x61FB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3D8B JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD7 SWAP2 SWAP1 PUSH2 0x5CF5 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5D10 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3DE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3E0B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3B53 JUMPI DUP4 PUSH2 0x3E23 PUSH2 0x1193 JUMP JUMPDEST DUP3 LT PUSH2 0x3E32 JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3E34 JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3E3E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3E52 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3E11 JUMP JUMPDEST PUSH2 0x3E71 PUSH1 0x0 DUP4 DUP4 PUSH2 0x17B7 JUMP JUMPDEST PUSH2 0x3E80 PUSH2 0x3BD1 DUP3 PUSH2 0x2A33 PUSH2 0x9E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3EA3 SWAP1 DUP3 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x3C1A SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x43EB JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH2 0x32FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3F19 DUP2 PUSH2 0x353C JUMP JUMPDEST PUSH2 0x3F25 DUP7 DUP7 DUP7 DUP7 PUSH2 0x4427 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH2 0x3C26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0x3F50 PUSH2 0x3F4B PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x42ED JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3C26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F6E PUSH2 0x3F64 PUSH2 0x1193 JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x3F76 PUSH2 0x1193 JUMP JUMPDEST DUP3 LT PUSH2 0x1935 JUMPI PUSH2 0x3F87 DUP3 PUSH1 0x1 PUSH2 0x180B JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3FA7 JUMPI PUSH2 0x3FA2 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x443B JUMP JUMPDEST PUSH2 0x3FB5 JUMP JUMPDEST PUSH2 0x3FB5 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4512 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3FDB JUMPI PUSH2 0x3FA2 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4573 JUMP JUMPDEST PUSH2 0x3FB5 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x45D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF5 DUP7 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4003 DUP4 DUP6 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4011 DUP7 DUP4 PUSH2 0x32FE JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x405F JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x403B PUSH2 0x4035 DUP4 PUSH2 0x4030 DUP5 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1774 JUMP JUMPDEST DUP7 PUSH2 0x39D6 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x405C JUMPI PUSH1 0x0 PUSH2 0x404F DUP8 DUP4 PUSH2 0x39BE JUMP JUMPDEST SWAP1 POP PUSH2 0x405A DUP2 PUSH2 0x34EF JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x148B DUP9 DUP5 PUSH2 0x3500 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH2 0x2AC1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x408A PUSH2 0x4083 PUSH2 0xE40 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH2 0x1798 DUP4 DUP3 PUSH2 0x180B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x40A2 DUP2 PUSH2 0x353C JUMP JUMPDEST PUSH2 0x3F25 DUP7 DUP7 DUP7 DUP7 PUSH2 0x46C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40B8 PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDAE JUMPI PUSH2 0x40CE DUP2 PUSH2 0x46D8 JUMP JUMPDEST ISZERO PUSH2 0x40DC JUMPI PUSH2 0x40DC DUP2 PUSH2 0x4707 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x40BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x40F3 DUP5 PUSH2 0x4735 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x4103 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4121 JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x474B JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x416E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x412F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4140 JUMPI PUSH2 0x4117 DUP8 DUP11 DUP7 PUSH2 0x47AA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x414E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4161 JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x47C8 JUMP JUMPDEST PUSH2 0x416C PUSH2 0x150 PUSH2 0x2B12 JUMP JUMPDEST POP JUMPDEST SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x4188 DUP5 PUSH2 0x3D97 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4198 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x41AC JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4869 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x41BA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x41CB JUMPI PUSH2 0x4117 DUP8 DUP11 DUP7 PUSH2 0x48B8 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x41D9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x41EC JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x48D6 JUMP JUMPDEST PUSH2 0x416C PUSH2 0x136 PUSH2 0x2B12 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD PUSH2 0x4206 SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4264 JUMPI PUSH2 0x4245 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4220 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4234 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4251 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4209 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4284 DUP5 PUSH2 0x427F DUP8 PUSH1 0x1 PUSH2 0x4950 JUMP JUMPDEST PUSH2 0x295F JUMP JUMPDEST SWAP3 POP PUSH2 0x428E PUSH2 0x4A59 JUMP JUMPDEST ISZERO PUSH2 0x42A7 JUMPI PUSH2 0x429D DUP5 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x42E6 JUMP JUMPDEST PUSH2 0x42AF PUSH2 0x4A7D JUMP JUMPDEST ISZERO PUSH2 0x42C8 JUMPI DUP3 SWAP2 POP PUSH2 0x42C1 DUP5 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH2 0x42E6 JUMP JUMPDEST PUSH2 0x42D7 DUP5 PUSH2 0x427F DUP8 PUSH1 0x0 PUSH2 0x4950 JUMP JUMPDEST SWAP2 POP PUSH2 0x42E3 DUP5 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x4305 JUMPI PUSH1 0x0 PUSH2 0xDD7 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5F5F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x4337 DUP4 DUP6 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x437B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x43CF JUMPI PUSH2 0x43B0 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x439A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x32FE SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x43BC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4381 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH1 0x1 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4416 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xDD7 JUMPI POP PUSH2 0xDD7 DUP3 PUSH2 0x4AA1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AEC PUSH1 0x0 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x4B0F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4482 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4492 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x44B5 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x44B0 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4B81 JUMP JUMPDEST SWAP1 POP PUSH2 0x44DD DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x180B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x44E9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4500 DUP8 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x452D DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x4528 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4E11 JUMP JUMPDEST SWAP1 POP PUSH2 0x453F DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x454B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4562 DUP7 DUP12 PUSH2 0x180B JUMP JUMPDEST SWAP2 SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x458E DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x4589 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4F00 JUMP JUMPDEST SWAP1 POP PUSH2 0x45B6 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x45C2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4562 DUP7 DUP12 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x45F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4620 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4630 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4653 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x464E PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4FCD JUMP JUMPDEST SWAP1 POP PUSH2 0x4665 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x4671 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4500 DUP8 DUP4 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x46A2 DUP5 ISZERO DUP1 PUSH2 0x1791 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x178E JUMPI INVALID JUMPDEST DUP1 PUSH2 0x46B1 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x923 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x0 NOT DUP3 ADD PUSH2 0x3C68 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AEC PUSH1 0x1 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x4B0F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x471F DUP2 PUSH2 0x1904 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD7 SWAP2 SWAP1 PUSH2 0x5BEA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x475B DUP6 PUSH2 0x524E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x476B DUP3 MLOAD DUP9 MLOAD PUSH2 0x2640 JUMP JUMPDEST PUSH2 0x4778 DUP3 PUSH2 0x2917 DUP9 PUSH2 0x3DC3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x478A DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x44B0 PUSH2 0xE40 JUMP JUMPDEST SWAP1 POP PUSH2 0x479A DUP3 DUP3 GT ISZERO PUSH1 0xCF PUSH2 0x19A9 JUMP JUMPDEST SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x47B9 DUP5 PUSH2 0x5271 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3A8F DUP7 DUP9 DUP5 PUSH2 0x4329 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x47D8 DUP6 PUSH2 0x5287 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x47EA DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x482E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x4842 DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x4528 PUSH2 0xE40 JUMP JUMPDEST DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x484E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP2 SWAP10 SWAP2 SWAP9 POP SWAP1 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x4879 DUP6 PUSH2 0x529E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4889 DUP8 MLOAD DUP4 MLOAD PUSH2 0x2640 JUMP JUMPDEST PUSH2 0x4896 DUP3 PUSH2 0x2917 DUP9 PUSH2 0x3DC3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A8 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x464E PUSH2 0xE40 JUMP JUMPDEST SWAP1 POP PUSH2 0x479A DUP3 DUP3 LT ISZERO PUSH1 0xD0 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x48C7 DUP5 PUSH2 0x52B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3A8F DUP7 DUP4 DUP10 PUSH2 0x52CC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x48E6 DUP6 PUSH2 0x5368 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x48F8 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4912 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x493C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x4842 DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x4589 PUSH2 0xE40 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x496D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4997 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4A50 JUMPI PUSH1 0x0 PUSH2 0x49AF PUSH2 0x1193 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x49BC JUMPI DUP2 PUSH2 0x49C1 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x49CC DUP2 PUSH2 0x2D67 JUMP JUMPDEST DUP1 PUSH2 0x49E3 JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x49E3 JUMPI POP PUSH2 0x49E3 DUP2 PUSH2 0x46D8 JUMP JUMPDEST PUSH2 0x4A00 JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x49F3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4A30 JUMP JUMPDEST PUSH2 0x4A30 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A0F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x537F JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A3C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x499D JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4ACC PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x4B00 JUMPI POP PUSH2 0x4AFD PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xDD7 JUMPI POP PUSH2 0xDD7 DUP3 PUSH2 0x539A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x4B1C DUP6 PUSH2 0x3DC3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B29 DUP6 PUSH2 0x3F57 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B36 DUP6 PUSH2 0x3F57 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B42 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x4B51 DUP3 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP DUP11 ISZERO PUSH2 0x4B73 JUMPI PUSH2 0x4B67 DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x5408 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP PUSH2 0x1AEC JUMP JUMPDEST PUSH2 0x4B67 DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x5485 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4BBF JUMPI PUSH2 0x4BB5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4B86 JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4BDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4C04 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4CD1 JUMPI PUSH1 0x0 PUSH2 0x4C3C DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4C26 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3C26 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4C7E DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4C4D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4C78 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4C64 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x3C26 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4C8A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4CC6 PUSH2 0x4CBF DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4CA9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4688 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4C0B JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4CEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4D16 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4DE1 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4D33 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x4D9A JUMPI PUSH1 0x0 PUSH2 0x4D5C PUSH2 0x4D50 DUP7 PUSH2 0x42ED JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x439A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D70 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4D91 PUSH2 0x4D8A DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3C26 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4DB1 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4DA6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4DC1 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4DCD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4D1C JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4DEE DUP13 DUP4 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4DFC DUP3 DUP11 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3487 PUSH2 0x4E0A DUP3 PUSH2 0x42ED JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x4688 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4E2C DUP5 PUSH2 0x4E26 DUP8 PUSH2 0x4C78 DUP2 DUP12 PUSH2 0x180B JUMP JUMPDEST SWAP1 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4E3C DUP11 DUP11 DUP5 DUP12 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4E50 DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4E78 JUMPI PUSH2 0x4E6E DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4E56 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4EA1 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4E8B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AC1 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4EAE DUP3 PUSH2 0x42ED JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4EBC DUP6 DUP4 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4ECA DUP7 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0x4EEB PUSH2 0x4EE4 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x32FE JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4F15 DUP5 PUSH2 0x4E26 DUP8 PUSH2 0x4C78 DUP2 DUP12 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F25 DUP11 DUP11 DUP5 DUP12 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F4F DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x4F38 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x180B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4F77 JUMPI PUSH2 0x4F6D DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4F55 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4F8A DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4E8B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F97 DUP3 PUSH2 0x42ED JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FA5 DUP6 DUP4 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FB3 DUP7 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0x4EEB PUSH2 0x4EE4 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3C26 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4FF4 JUMPI PUSH2 0x4FEA DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4FD2 JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x500F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5039 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x50D3 JUMPI PUSH1 0x0 PUSH2 0x505B DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4E8B JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x509D DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x506C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x5097 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x5083 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x2AC1 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x50A9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x50C8 PUSH2 0x4CBF DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x439A JUMPI INVALID JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x5040 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x50EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5118 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x51D9 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x5136 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x5192 JUMPI PUSH1 0x0 PUSH2 0x515B PUSH2 0x4D50 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x516F DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x5189 PUSH2 0x4D8A DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x32FE JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x51A9 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x519E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x51B9 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x51C5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x511E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x51E6 DUP13 DUP4 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x51F4 DUP3 DUP11 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x523F JUMPI PUSH2 0x5232 DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x32FE JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x3F25 JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x3F25 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5C05 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5C4A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5C76 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5D53 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5D71 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x52DA DUP5 DUP5 PUSH2 0x3C26 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x52F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5320 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x535E JUMPI PUSH2 0x533F DUP4 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4CA9 JUMPI INVALID JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x534B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5326 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5D8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 PUSH2 0x5391 DUP5 PUSH2 0x4030 DUP6 PUSH2 0x2C43 JUMP JUMPDEST PUSH2 0x29F8 DUP5 PUSH2 0x2C35 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x53C5 PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x53F9 JUMPI POP PUSH2 0x53F6 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xDD7 JUMPI POP PUSH2 0xDD7 DUP3 PUSH2 0x56D5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x541A DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x5426 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x5440 DUP9 DUP9 DUP6 DUP9 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x544F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x5464 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x3D8B PUSH1 0x1 PUSH2 0x3008 DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x5497 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x54A3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x54BD DUP9 DUP9 DUP6 DUP10 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x54CC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x54E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x3D8B PUSH1 0x1 PUSH2 0x2A33 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x5501 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x180B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5530 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x554B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x55B1 JUMPI PUSH2 0x5596 PUSH2 0x5590 PUSH2 0x5589 DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x557C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1774 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1774 JUMP JUMPDEST DUP9 PUSH2 0x39D6 JUMP JUMPDEST SWAP2 POP PUSH2 0x55A7 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x297F JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x555D JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x55BE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0x55D6 DUP8 DUP9 PUSH2 0x1774 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5602 PUSH2 0x55F6 PUSH2 0x55EE DUP5 PUSH2 0xC7E DUP10 DUP9 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1774 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x557C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x561D PUSH2 0x5616 PUSH2 0x55EE DUP12 DUP10 PUSH2 0x39D6 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x5639 PUSH2 0x562F DUP7 DUP7 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0xC7E DUP14 DUP7 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x56B9 JUMPI DUP2 SWAP3 POP PUSH2 0x566E PUSH2 0x565B DUP7 PUSH2 0x2A33 DUP6 DUP7 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0xC7E DUP15 PUSH2 0x3008 DUP9 PUSH2 0x2A33 DUP9 PUSH1 0x2 PUSH2 0x1774 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x5697 JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x5692 JUMPI POP SWAP8 POP PUSH2 0x1803 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x56B1 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x56B1 JUMPI POP SWAP8 POP PUSH2 0x1803 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x563E JUMP JUMPDEST POP PUSH2 0x56C5 PUSH2 0x142 PUSH2 0x2B12 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST INVALID JUMPDEST DUP1 CALLDATALOAD PUSH2 0x923 DUP2 PUSH2 0x6305 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56F8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x570B PUSH2 0x5706 DUP3 PUSH2 0x62E5 JUMP JUMPDEST PUSH2 0x62BE JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x572C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2AB6 JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x572F JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x575B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x5769 PUSH2 0x5706 DUP3 PUSH2 0x62E5 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x578A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2AB6 JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x578D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x57B9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x57CF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x57E2 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x62BE JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x57F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x923 DUP2 PUSH2 0x6328 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 DUP2 LT PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x584C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1798 DUP2 PUSH2 0x6305 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5869 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5874 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5884 DUP2 PUSH2 0x6305 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58A3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x58AE DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x58BE DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x58E9 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x58F4 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x5904 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x5922 DUP2 PUSH2 0x6335 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5951 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x595C DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x597E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5995 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59A8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x59B6 PUSH2 0x5706 DUP3 PUSH2 0x62E5 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP7 ADD DUP12 DUP3 DUP4 DUP8 MUL DUP10 ADD ADD GT ISZERO PUSH2 0x59D6 JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x5A01 JUMPI DUP1 MLOAD PUSH2 0x59ED DUP2 PUSH2 0x6305 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP3 DUP2 ADD SWAP3 DUP2 ADD PUSH2 0x59DA JUMP JUMPDEST POP DUP10 ADD MLOAD SWAP1 SWAP8 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5A18 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x5A25 DUP7 DUP3 DUP8 ADD PUSH2 0x574B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5A5D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1803 DUP5 DUP3 DUP6 ADD PUSH2 0x56E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A7A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1798 DUP2 PUSH2 0x631A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A96 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5AB7 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x5AC9 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x5AD9 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5AF5 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x5B01 DUP12 DUP4 DUP13 ADD PUSH2 0x56E8 JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5B24 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x5B31 DUP11 DUP3 DUP12 ADD PUSH2 0x57A9 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B51 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1798 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B91 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1798 DUP2 PUSH2 0x6305 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BAE JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5BB9 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5BD4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5BE0 DUP6 DUP3 DUP7 ADD PUSH2 0x57A9 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BFB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1798 DUP4 DUP4 PUSH2 0x5812 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C19 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C23 DUP6 DUP6 PUSH2 0x5812 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5C3E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5A25 DUP7 DUP3 DUP8 ADD PUSH2 0x574B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5C5C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5C66 DUP5 DUP5 PUSH2 0x5812 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C8A JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C94 DUP6 DUP6 PUSH2 0x5812 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5CBD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5CC8 DUP2 PUSH2 0x6328 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5884 DUP2 PUSH2 0x631A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5CEA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x595C DUP2 PUSH2 0x6328 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D06 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1798 DUP4 DUP4 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5D22 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5D2C DUP5 DUP5 PUSH2 0x582C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5D47 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5BE0 DUP6 DUP3 DUP7 ADD PUSH2 0x574B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5D67 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C23 DUP6 DUP6 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5D83 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5C66 DUP5 DUP5 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5DA1 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C94 DUP6 DUP6 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5DC0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5DD7 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP PUSH2 0x120 DUP1 DUP4 DUP11 SUB SLT ISZERO PUSH2 0x5DED JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5DF6 DUP2 PUSH2 0x62BE JUMP JUMPDEST SWAP1 POP PUSH2 0x5E02 DUP10 DUP5 PUSH2 0x5821 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5E11 DUP10 PUSH1 0x20 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5E23 DUP10 PUSH1 0x40 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5E53 DUP10 PUSH1 0xC0 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5E65 DUP10 PUSH1 0xE0 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x5E7D JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x5E89 DUP12 DUP3 DUP8 ADD PUSH2 0x57A9 JUMP JUMPDEST DUP3 DUP5 ADD MSTORE POP POP DUP1 SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5EA6 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x5EB3 DUP8 DUP3 DUP9 ADD PUSH2 0x56E8 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EDB JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5EF4 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5F18 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x5F38 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5F54 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1798 DUP2 PUSH2 0x6335 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F71 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5F7C DUP2 PUSH2 0x6335 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5FBB JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5F9F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5FEB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x5FCF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5FFC JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x60DC JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x60B7 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1798 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5F8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x610E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5F8C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1AEC DUP2 DUP6 PUSH2 0x5F8C JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1803 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5FC6 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1798 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5FC6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1803 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5F8C JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE PUSH1 0x80 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x625E PUSH1 0x80 DUP4 ADD DUP7 PUSH2 0x5F8C JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x60 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x62DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x62FB JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 DUP13 DUP14 PUSH5 0xEBFF85CAA2 0x24 RETURNDATACOPY 0xB1 0x5D CALL SWAP11 0xC5 CALLDATALOAD PUSH9 0xABDBAA0443BB078A72 0x2D PUSH15 0xB4B51964736F6C634300070100336B 0xFB PUSH9 0x9528FA96EC1AD670AD PUSH14 0x6064BE1AE96BFD5D2EE35C837FD0 INVALID 0xC GT SWAP6 SWAP11 ", + "sourceMap": "862:2685:62:-:0;;;944:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4552:26:55;;;;1006:6:62;;-1:-1:-1;;4498:27:55;1006:6:62;4498:19:55;:27::i;:::-;4433:29;4455:6;4433:21;:29::i;:::-;4366:6;:29;;;3958:6;:12;;;3984:33;4031:6;:11;;;4056:6;:13;;;4083:42;4097:6;:13;;;4119:4;4083:13;;;:42;;:::i;:::-;4153:6;:13;;;:20;4176:1;4153:24;-1:-1:-1;;;;;4139:39:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4139:39:55;;4192:6;:24;;;4230:6;:26;;;4270:6;:27;;;4311:6;:12;;;5893:19:28;5914:20;5807:4;5813:6;5821:5;5858;5767:10;-1:-1:-1;;;;;5759:19:28;5751:28;;1749:9:26;1301:4:52;2020:280:50;;;;;;;;;;;;;-1:-1:-1;;;2020:280:50;;;1713:9:26;1724:11;2126:5:51;2118;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;-1:-1:-1;;2168:14:51;2180:2;2168:14;;;-1:-1:-1;2100:22:50;;;;;;;2085:37;;2150:25;;;;;2132:43;;-1:-1:-1;2198:95:50;2185:108;;2049:46:38;;-1:-1:-1;;;;;;1724:14:29;;;;;;2168::51;1724::29;1770::26;;;;::::2;::::0;-1:-1:-1;2578:93:45;;-1:-1:-1;2284:7:45;2587:49;;;10056:3:10;2578:8:45;:93::i;:::-;2681:96;2352:7;2690:51;;;10120:3:10;2681:8:45;:96::i;:::-;2817:15;:37;;;2865:40;;;;2938:41;2915:64;;5959:13:28;;5950:57:::4;::::0;3201:1:::4;-1:-1:-1::0;5959:28:28::4;5921:3:10;5950:8:28;:57::i;:::-;6017:61;6043:15;:13;:15::i;:::-;6026:13:::0;;:32:::4;;5969:3:10;6017:8:28;:61::i;:::-;6626:40;6659:6;6626:32;;;;;:40;;:::i;:::-;6677;6699:17:::0;6677:21:::4;:40::i;:::-;6745:34;::::0;-1:-1:-1;;;6745:34:28;;6728:14:::4;::::0;-1:-1:-1;;;;;6745:18:28;::::4;::::0;::::4;::::0;:34:::4;::::0;6764:14;;6745:34:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6790:51;::::0;-1:-1:-1;;;6790:51:28;;6728;;-1:-1:-1;;;;;;6790:20:28;::::4;::::0;::::4;::::0;:51:::4;::::0;6728;;6819:6;;6827:13;;6790:51:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;6951:6;6941:16;;;;::::0;::::4;6992:5;-1:-1:-1::0;;;;;6992:30:28::4;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6967:57;::::0;-1:-1:-1;;;;;;6967:57:28;::::4;::::0;-1:-1:-1;2735:71:61;;-1:-1:-1;;;1275:1:60;2744:45:61;;;;-1:-1:-1;6565:3:10;;-1:-1:-1;2735:8:61;;-1:-1:-1;;;;;2735:71:61:i;:::-;2816;1319:4:60;2825:45:61;;;6610:3:10;2816:8:61;:71::i;:::-;2898:18;2919:59;2928:22;1372:3:60;2919:8:61;;;;;:59;;:::i;:::-;2898:80;-1:-1:-1;2988:33:61;2898:80;2988:21;:33::i;:::-;-1:-1:-1;;4590:23:59;;:30;4630:62;1568:1;4639:33;;5921:3:10;4630:8:59;:62::i;:::-;4702:179;4765:1;4751:11;:15;4780:6;:25;;;:32;4826:6;:38;;;:45;4702:35;;;;;:179;;:::i;:::-;4892:26;;;;5054:23;;:26;;:23;;:26;;;;;;;;;;-1:-1:-1;;;;;5044:36:59;;;-1:-1:-1;;;;;5044:36:59;;;;;;;5100:6;:23;;;5124:1;5100:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5090:36:59;;;-1:-1:-1;;;;;5090:36:59;;;;;;;5146:6;:23;;;5170:1;5146:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5136:36:59;;;-1:-1:-1;;;;;5136:36:59;;;;;;;5206:1;5192:11;:15;:56;;5246:1;5192:56;;;5210:23;;:26;;5234:1;;5210:26;;;;;;;;;;;;5192:56;5182:66;;-1:-1:-1;;;;;;5182:66:59;;;5282:1;5268:15;;:56;;5322:1;5268:56;;;5286:23;;:26;;5310:1;;5286:26;;;;;;;;;;;;5268:56;5258:66;;-1:-1:-1;;;;;;5258:66:59;;;5358:1;5344:15;;:56;;5398:1;5344:56;;;5362:23;;:26;;5386:1;;5362:26;;;;;;;;;;;;5344:56;5334:66;;-1:-1:-1;;;;;;5334:66:59;;;5451:23;;:26;;5429:49;;5451:23;;;:26;;;;;;;;;;5429:21;;;:49;;:::i;:::-;5411:67;;5528:23;;:26;;5506:49;;5528:23;5552:1;;5528:26;;;;;5506:49;5488:67;;5605:23;;:26;;5583:49;;5605:23;5629:1;;5605:26;;;;;5583:49;5565:67;;5674:1;5660:15;;:71;;5730:1;5660:71;;;5678:49;5700:6;:23;;;5724:1;5700:26;;;;;;;5678:49;5642:89;;5773:1;5759:15;;:71;;5829:1;5759:71;;;5777:49;5799:6;:23;;;5823:1;5799:26;;;;;;;5777:49;5741:89;;5872:1;5858:15;;:71;;5928:1;5858:71;;;5876:49;5898:6;:23;;;5922:1;5898:26;;;;;;;5876:49;5840:89;;6412:23;;:30;-1:-1:-1;;6412:34:59;6383:248;6471:1;6460:8;:12;:64;;;;-1:-1:-1;6476:23:59;;:33;;6519:4;;6476:23;6500:8;;6476:33;;;;;;;;;;;;-1:-1:-1;;;;;6476:48:59;;6460:64;6383:248;;;-1:-1:-1;;6538:10:59;6383:248;;;6640:20;;;;7197:23;;:30;7138:36;;-1:-1:-1;;;;;7177:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7177:51:59;-1:-1:-1;7138:90:59;-1:-1:-1;7239:30:59;;;;7503:1726;7527:23;;:30;7523:34;;7503:1726;;;7586:8;7582:1;:12;7578:1641;;;7633:6;:25;;;7659:1;7633:28;;;;;;;;;;;;;;7614:13;7628:1;7614:16;;;;;;;;;;;;;:47;-1:-1:-1;;;;;7614:47:59;;;-1:-1:-1;;;;;7614:47:59;;;;;7761:162;7850:1;-1:-1:-1;;;;;7816:36:59;:13;7830:1;7816:16;;;;;;;;;;;;;;-1:-1:-1;;;;;7816:36:59;;;7904:1;4198;7874:31;7761:22;:33;;;;;;:162;;;;;:::i;:::-;7736:187;;8011:6;:38;;;8050:1;8011:41;;;;;;;;;;;;;;8007:370;;;8076:88;8119:1;-1:-1:-1;;;;;8085:36:59;:13;8099:1;8085:16;;;;;;;;;;;;;;-1:-1:-1;;;;;8085:36:59;;;9022:3:10;8076:8:59;;;:88;;:::i;:::-;8211:42;8245:4;8251:1;8211:22;:33;;;;;;:42;;;;;:::i;:::-;8186:67;;8288:4;8276:16;;8007:370;;;8354:4;8339:19;;8007:370;7578:1641;;;8406:8;8401:1;:13;8397:822;;8453:6;:25;;;8483:1;8479;:5;8453:32;;;;;;;;;;;;;;8434:13;8448:1;8434:16;;;;;;;;;;;;;:51;-1:-1:-1;;;;;8434:51:59;;;-1:-1:-1;;;;;8434:51:59;;;;;8585:162;8674:1;-1:-1:-1;;;;;8640:36:59;:13;8654:1;8640:16;;;;;;;8585:162;8560:187;;8835:6;:38;;;8878:1;8874;:5;8835:45;;;;;;;;;;;;;;8831:374;;;8904:88;8947:1;-1:-1:-1;;;;;8913:36:59;:13;8927:1;8913:16;;;;;;;8904:88;9039:42;9073:4;9079:1;9039:22;:33;;;;;;:42;;;;;:::i;:::-;9014:67;;9116:4;9104:16;;8831:374;;;9182:4;9167:19;;8831:374;7559:3;;7503:1726;;;-1:-1:-1;9257:10:59;;9239:28;;;;;;9296:13;;9277:32;;;;9452:16;;:13;;9466:1;;9452:16;;;;;;;;;;-1:-1:-1;;;;;9435:33:59;;;-1:-1:-1;;;;;9435:33:59;;;;;;;9495:13;9509:1;9495:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9478:33:59;;;-1:-1:-1;;;;;9478:33:59;;;;;;;9538:13;9552:1;9538:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9521:33:59;;;-1:-1:-1;;;;;9521:33:59;;;;;;;9605:1;9582:13;:20;:24;9581:64;;9643:1;9581:64;;;9610:13;9624:1;9610:16;;;;;;;;;;;;;;9581:64;9564:81;;-1:-1:-1;;;;;;9564:81:59;;;9673:20;;9696:1;-1:-1:-1;9672:64:59;;9734:1;9672:64;;;9701:13;9715:1;9701:16;;;;;;;;;;;;;;9672:64;9655:81;;-1:-1:-1;;;;;;9655:81:59;;;9764:20;;9787:1;-1:-1:-1;9763:64:59;;9825:1;9763:64;;;9792:13;9806:1;9792:16;;;;;;;;;;;;;;9763:64;9746:81;;-1:-1:-1;;;;;;9746:81:59;;;-1:-1:-1;;9838:48:59;;-1:-1:-1;;2581:17:58;;:24;2619;;;;;:31;2664:34;;;;:41;2532:183;;-1:-1:-1;2581:24:58;;-1:-1:-1;2619:31:58;2664:41;2532:35;;;;;:183;;:::i;:::-;2775:17;;2726:32;;2761:46;;2801:4;2761:13;:46::i;:::-;2872:23;;2726:81;;-1:-1:-1;;;2872:27:58;2843:234;2924:1;2913:8;:12;:57;;;;;2965:4;-1:-1:-1;;;;;2929:41:58;:16;2946:8;2929:26;;;;;;;;;;;;;;-1:-1:-1;;;;;2929:41:58;;2913:57;2843:234;;;-1:-1:-1;;2984:10:58;2843:234;;;3087:15;3121:9;3116:626;3140:17;;:24;3136:28;;3116:626;;;3194:8;3189:1;:13;3185:63;;;3232:1;3222:11;;3185:63;3303:24;;;;:27;;3274:11;;;;3262:9;;3274:1;;3303:27;;;;;;;;;;;;-1:-1:-1;;;;;3303:47:58;;3299:433;;3370:92;3392:1;3395:10;:24;;;3420:1;3395:27;;;;;;;;;;;;;;3424:10;:34;;;3459:1;3424:37;;;;;;;;;;;;;;3370:21;;;:92;;:::i;:::-;3510:10;:24;;;3535:1;3510:27;;;;;;;;;;;;;;-1:-1:-1;;;;;3486:91:58;3507:1;3486:91;3539:10;:34;;;3574:1;3539:37;;;;;;;;;;;;;;3486:91;;;;;;:::i;:::-;;;;;;;;3700:17;3715:1;3700:14;:17::i;:::-;-1:-1:-1;3166:3:58;;3116:626;;;-1:-1:-1;;;;;;;3418:65:34;;3494:54;;;;;;-1:-1:-1;;;;;;3558:42:34;;;;;;;3611:67;3581:19;4446:1:17;3611:23:34;:67::i;:::-;3688:65;3712:19;4485:1:17;3688:23:34;:65::i;:::-;3768:25;3764:776;;;3809:66;3833:19;4359:1:17;3809:23:34;:66::i;:::-;3764:776;;;3961:69;;-1:-1:-1;;;3961:69:34;;3906:191;;-1:-1:-1;;;;;3961:47:34;;;;;:69;;4359:1:17;;3961:69:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3932:98;;;14240:3:10;3906:8:34;:191::i;:::-;4359:1:17;-1:-1:-1;;;;;;;;;;;4503:25:34;4447:82;;;;;;:::i;:::-;;;;;;;;3764:776;4705:25;:57;;4737:25;4705:57;;;4733:1;4705:57;4671:91;;-1:-1:-1;;;4660:14:55::5;::::0;::::5;::::0;4649:25;;::::5;::::0;:8:::5;::::0;:25:::5;::::0;;::::5;::::0;::::5;:::i;:::-;;3887:794:::0;944:134:62;862:2685;;4765:408:55;4869:44;;:::i;:::-;4948:218;;;;;;;;5012:6;:13;;;4948:218;;;;5058:6;:20;;;4948:218;;;;5121:6;:30;;;4948:218;;;4929:237;;4765:408;;;;:::o;5257:478::-;5363:48;;:::i;:::-;5446:282;;;;;;;;5524:42;5538:6;:13;;;5560:4;5524:13;;;:42;;:::i;:::-;5446:282;;;;5604:6;:20;;;5446:282;;;;5675:6;:38;;;5446:282;;;5427:301;;5257:478;;;:::o;1536:425:42:-;1611:22;1663:6;:13;1679:1;1663:17;-1:-1:-1;;;;;1650:31:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1650:31:42;;1641:40;;1692:6;:13;1709:1;1692:18;1688:81;;;1734:5;1722:6;1729:1;1722:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1722:17:42;;;-1:-1:-1;;;;;1722:17:42;;;;;1749:13;;1688:81;1799:13;;1790:86;1818:1;1814;:5;:30;;;;;1839:5;-1:-1:-1;;;;;1823:21:42;:6;1834:1;1830;:5;1823:13;;;;;;;;;;;;;;-1:-1:-1;;;;;1823:21:42;;1814:30;1790:86;;;1863:6;1874:1;1870;:5;1863:13;;;;;;;;;;;;;;1851:6;1858:1;1851:9;;;;;;;;-1:-1:-1;;;;;1851:25:42;;;:9;;;;;;;;;;;:25;-1:-1:-1;;1846:3:42;1790:86;;;1887:9;1882:53;1906:1;1902;:5;1882:53;;;1926:6;1933:1;1926:9;;;;;;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;-1:-1:-1;;;;;1914:21:42;;;:9;;;;;;;;;;;:21;1909:3;;1882:53;;;;1953:5;1941:6;1948:1;1941:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1941:17:42;;;-1:-1:-1;;;;;1941:17:42;;;;;1536:425;;;;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;10032:224:59:-;10216:33;10032:224;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:47;;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:47;;;6030:3:10;9078:8:28;:89::i;:::-;9190:147;9224:17;4326:3;4561:2;9190:9;;:20;;;;;;:147;;;;;;:::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;:::-;2210:1;2038:180;-1:-1:-1;;;2038:180:49:o;7584::61:-;7648:71;7672:5;;7686:15;;7648:23;:71::i;:::-;7734:23;7751:5;7734:23;;;;;;:::i;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;27427:510:28:-;27495:7;-1:-1:-1;;;;;27518:31:28;;27544:4;27518:31;27514:83;;;-1:-1:-1;945:4:47;27565:21:28;;27514:83;27687:21;27725:5;-1:-1:-1;;;;;27711:30:28;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27687:56;;;;27818:26;27847:27;27856:2;27860:13;27847:8;;;;;:27;;:::i;:::-;27908:2;:22;945:4:47;27891:39:28;;;-1:-1:-1;;;;27427:510:28:o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;1335:259:62:-;1492:22;1211::37;1492::62;1211:16:37;:22::i;:::-;1533:54:62::1;1561:5;1568:8;1578;1533:27;;;;;:54;;:::i;:::-;1335:259:::0;;;;:::o;3871:161:58:-;3929:13;3945:23;;;:16;:23;;;;;;;;;;4004:21;;3945:23;;4004:19;;;;;:21;;:::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;6844:665:34:-;6988:49;;-1:-1:-1;;;6988:49:34;;6965:20;;-1:-1:-1;;;;;6988:40:34;;;;;:49;;7029:7;;6988:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6965:72;-1:-1:-1;7052:31:34;7048:383;;7116:23;:12;:21;;;;;:23;;:::i;:::-;7099:6;:40;;-1:-1:-1;;;;;;7099:40:34;-1:-1:-1;;;;;7099:40:34;;;;;;;;;;7048:383;;;4446:1:17;7160:7:34;:32;7156:275;;;7226:23;:12;:21;;;;;:23;;:::i;:::-;7208:6;:41;;-1:-1:-1;;;;;7208:41:34;;;;;;-1:-1:-1;;;;;;;;7208:41:34;;;;;;;;;7156:275;;;4485:1:17;7270:7:34;:30;7266:165;;;7332:23;:12;:21;;;;;:23;;:::i;:::-;7316:6;:39;;-1:-1:-1;;;;;7316:39:34;;;;-1:-1:-1;;;7316:39:34;-1:-1:-1;;;;;;;;7316:39:34;;;;;;;;;7266:165;;;7386:34;12459:3:10;7386:7:34;:34::i;:::-;7480:7;-1:-1:-1;;;;;;;;;;;7489:12:34;7446:56;;;;;;:::i;:::-;;;;;;;;6844:665;;;:::o;1437:126:10:-;1484:28;1492:9;-1:-1:-1;;;1484:7:10;:28::i;:::-;1437:126;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;;;:51;;:::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;9409:124:28;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2512:395:46:-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;8082:570:61:-;8567:78;8588:7;2352:3;2472:2;8567:20;;;;;:78;;:::i;:::-;8470:82;8491:9;2295:3;2472:2;8470:20;;;;;:82;;:::i;:::-;8379:76;8400:8;2237:2;2411;8379:20;;;;;:76;;:::i;:::-;8284:80;8305:10;2181:1;2411:2;8284:20;;;;;:80;;:::i;:::-;:171;:268;:361;8245:24;:400;-1:-1:-1;;;;8082:570:61:o;1193:166:49:-;1251:7;1270:37;1279:6;;;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;1853:201:37:-;1924:13;:19;1938:4;1924:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1924:19:37;;;;1920:128;;;1959:78;1967:12;:18;1980:4;1967:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;1989:1;1967:23;:69;;2018:12;:18;2031:4;2018:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:69;;;12222:3:10;1967:69:37;1959:7;:78::i;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7470:13;7486:23;;;:16;:23;;;;;;;;;7427:33;;-1:-1:-1;7546:43:58;;7486:23;;7427:33;;7580:8;;7546:27;;;;;:43;;:::i;:::-;7520:23;;;;:16;:23;;;;;;;:69;;;;7605:34;7537:5;;7605:34;;;;7634:4;;7605:34;:::i;:::-;;;;;;;;7282:364;;;;;:::o;2499:175:36:-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;1703:2;1895;2586:5;:16;;;;;;:81;;;;;;:::i;1410:186:53:-;1466:6;1484:75;-1:-1:-1;;;;;1493:25:53;;;12403:3:10;1484:8:53;:75::i;:::-;-1:-1:-1;1583:5:53;1410:186::o;1670:3378:10:-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;7061:607:46;7197:44;7215:3;7206:12;;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;;;;;:27;;:::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;3883:240::-;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;;;;;:85;;:::i;:::-;:113;;;;;;:180;;;;;;:::i;:292::-;3692:311;3420:590;-1:-1:-1;;;;3420:590:36:o;2038:157::-;2100:7;2126:62;1646:1;1895:2;2126:5;:16;;;;;;:62;;;;;:::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;2005:20;-1:-1:-1;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;862:2685:62:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;862:2685:62;;;-1:-1:-1;862:2685:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;5:134:-1;83:13;;101:33;83:13;101:33;:::i;161:713::-;;286:3;279:4;271:6;267:17;263:27;253:2;;-1:-1;;294:12;253:2;334:6;328:13;356:77;371:61;425:6;371:61;:::i;:::-;356:77;:::i;:::-;461:21;;;347:86;-1:-1;505:4;518:14;;;;493:17;;;607;;;598:27;;;;595:36;-1:-1;592:2;;;644:1;;634:12;592:2;669:1;;654:214;679:6;676:1;673:13;654:214;;;3338:6;3332:13;19331:5;17110:13;17103:21;19309:5;19306:32;19296:2;;669:1;;19342:12;19296:2;747:58;;819:14;;;;847;;;;701:1;694:9;654:214;;;658:14;;;;;;246:628;;;;:::o;908:767::-;;1051:3;1044:4;1036:6;1032:17;1028:27;1018:2;;-1:-1;;1059:12;1018:2;1099:6;1093:13;1121:95;1136:79;1208:6;1136:79;:::i;1121:95::-;1244:21;;;1112:104;-1:-1;1288:4;1301:14;;;;1276:17;;;1390;;;1381:27;;;;1378:36;-1:-1;1375:2;;;1427:1;;1417:12;1375:2;1452:1;1437:232;1462:6;1459:1;1456:13;1437:232;;;3632:6;3626:13;3644:48;3686:5;3644:48;:::i;:::-;1530:76;;1620:14;;;;1648;;;;1484:1;1477:9;1437:232;;;1441:14;;;;;1011:664;;;;:::o;1716:785::-;;1865:3;1858:4;1850:6;1846:17;1842:27;1832:2;;-1:-1;;1873:12;1832:2;1913:6;1907:13;1935:101;1950:85;2028:6;1950:85;:::i;1935:101::-;2064:21;;;1926:110;-1:-1;2108:4;2121:14;;;;2096:17;;;2210;;;2201:27;;;;2198:36;-1:-1;2195:2;;;2247:1;;2237:12;2195:2;2272:1;2257:238;2282:6;2279:1;2276:13;2257:238;;;4233:6;4227:13;4245:54;4293:5;4245:54;:::i;:::-;2350:82;;2446:14;;;;2474;;;;2304:1;2297:9;2257:238;;2527:722;;2655:3;2648:4;2640:6;2636:17;2632:27;2622:2;;-1:-1;;2663:12;2622:2;2703:6;2697:13;2725:80;2740:64;2797:6;2740:64;:::i;2725:80::-;2833:21;;;2716:89;-1:-1;2877:4;2890:14;;;;2865:17;;;2979;;;2970:27;;;;2967:36;-1:-1;2964:2;;;3016:1;;3006:12;2964:2;3041:1;3026:217;3051:6;3048:1;3045:13;3026:217;;;8372:13;;3119:61;;3194:14;;;;3222;;;;3073:1;3066:9;3026:217;;4483:444;;4596:3;4589:4;4581:6;4577:17;4573:27;4563:2;;-1:-1;;4604:12;4563:2;4638:13;;-1:-1;;;;;15684:30;;15681:2;;;-1:-1;;15717:12;15681:2;15858:4;4666:65;15790:9;15771:17;;-1:-1;;15767:33;15848:15;;4666:65;:::i;:::-;4657:74;;4751:6;4744:5;4737:21;4855:3;15858:4;4846:6;4779;4837:16;;4834:25;4831:2;;;4872:1;;4862:12;4831:2;18794:1;18801:101;18815:6;18812:1;18809:13;18801:101;;;18882:11;;;;;18876:18;18863:11;;;;;18856:39;18830:10;;18801:101;;;18917:6;18914:1;18911:13;18908:2;;;18794:1;15858:4;18973:6;4813:5;18964:16;;18957:27;18908:2;;;;4556:371;;;;:::o;8572:263::-;;8687:2;8675:9;8666:7;8662:23;8658:32;8655:2;;;-1:-1;;8693:12;8655:2;-1:-1;3470:13;;8649:186;-1:-1;8649:186::o;8842:325::-;;8988:2;8976:9;8967:7;8963:23;8959:32;8956:2;;;-1:-1;;8994:12;8956:2;4040:6;4034:13;4052:64;4110:5;4052:64;:::i;9174:404::-;;9320:2;9308:9;9299:7;9295:23;9291:32;9288:2;;;-1:-1;;9326:12;9288:2;9371:24;;-1:-1;;;;;9404:30;;;9401:2;;;-1:-1;;9437:12;9401:2;9545:6;9534:9;9530:22;;;5114:6;;5102:9;5097:3;5093:19;5089:32;5086:2;;;-1:-1;;5124:12;5086:2;5152:22;5114:6;5152:22;:::i;:::-;5143:31;;5257:75;5328:3;5304:22;5257:75;:::i;:::-;5239:16;5232:101;5442:100;5538:3;9320:2;5518:9;5514:22;5442:100;:::i;:::-;9320:2;5428:5;5424:16;5417:126;5625:2;5614:9;5610:18;5604:25;9415:18;5641:6;5638:30;5635:2;;;-1:-1;;5671:12;5635:2;5716:70;5782:3;5773:6;5762:9;5758:22;5716:70;:::i;:::-;5625:2;5702:5;5698:16;5691:96;;5871:2;5860:9;5856:18;5850:25;9415:18;5887:6;5884:30;5881:2;;;-1:-1;;5917:12;5881:2;5962:70;6028:3;6019:6;6008:9;6004:22;5962:70;:::i;:::-;5871:2;5948:5;5944:16;5937:96;;6117:3;6106:9;6102:19;6096:26;9415:18;6134:6;6131:30;6128:2;;;-1:-1;;6164:12;6128:2;6209:100;6305:3;6296:6;6285:9;6281:22;6209:100;:::i;:::-;6117:3;6195:5;6191:16;6184:126;;6401:3;6390:9;6386:19;6380:26;9415:18;6418:6;6415:30;6412:2;;;-1:-1;;6448:12;6412:2;6493:106;6595:3;6586:6;6575:9;6571:22;6493:106;:::i;:::-;6401:3;6479:5;6475:16;6468:132;;6701:3;6690:9;6686:19;6680:26;9415:18;6718:6;6715:30;6712:2;;;-1:-1;;6748:12;6712:2;6793:85;6874:3;6865:6;6854:9;6850:22;6793:85;:::i;:::-;6701:3;6779:5;6775:16;6768:111;;6988:3;6977:9;6973:19;6967:26;9415:18;7005:6;7002:30;6999:2;;;-1:-1;;7035:12;6999:2;7080:82;7158:3;7149:6;7138:9;7134:22;7080:82;:::i;:::-;6988:3;7062:16;;7055:108;-1:-1;7242:3;7310:22;;;8372:13;7258:18;;;7251:88;7413:3;7481:22;;;8372:13;7429:18;;;7422:88;7586:3;7654:22;;;8372:13;7602:18;;;7595:88;7760:3;7828:22;;;8372:13;7776:18;;;7769:88;7919:3;7955:60;8011:3;7987:22;;;7955:60;:::i;:::-;7935:18;;;7928:88;8101:3;8086:19;;;8080:26;8115:30;;;8112:2;;;-1:-1;;8148:12;8112:2;8195:70;8261:3;8252:6;8241:9;8237:22;8195:70;:::i;:::-;8175:18;;;8168:98;;;;-1:-1;8179:5;9282:296;-1:-1;;;;;9282:296::o;9855:259::-;;9968:2;9956:9;9947:7;9943:23;9939:32;9936:2;;;-1:-1;;9974:12;9936:2;8517:6;8511:13;18264:4;20563:5;18253:16;20540:5;20537:33;20527:2;;-1:-1;;20574:12;12734:770;;13032:2;13021:9;13017:18;12267:5;12244:3;12237:37;13150:2;13032;13150;13139:9;13135:18;13128:48;13190:123;11616:5;16314:12;16890:6;16885:3;16878:19;16918:14;13021:9;16918:14;11628:93;;13150:2;11807:5;15995:14;11819:21;;-1:-1;11846:290;11871:6;11868:1;11865:13;11846:290;;;18375:52;11938:6;11932:13;18375:52;:::i;:::-;12362:65;;16603:14;;;;10487;;;;11893:1;11886:9;11846:290;;;-1:-1;;13351:20;;;13346:2;13331:18;;13324:48;16314:12;;16878:19;;;16918:14;;;;-1:-1;15995:14;;;;-1:-1;11064:260;11089:6;11086:1;11083:13;11064:260;;;17008:24;11156:6;11150:13;17008:24;:::i;:::-;10576:37;;10275:14;;;;16603;;;;11893:1;11104:9;11064:260;;;-1:-1;13378:116;;13003:501;-1:-1;;;;;;;;13003:501::o;13511:264::-;13659:2;13644:18;;19097:1;19087:12;;19077:2;;19103:9;19077:2;12531:71;;;13630:145;:::o;13782:222::-;12237:37;;;13909:2;13894:18;;13880:124::o;14011:256::-;14073:2;14067:9;14099:17;;;-1:-1;;;;;14159:34;;14195:22;;;14156:62;14153:2;;;14231:1;;14221:12;14153:2;14073;14240:22;14051:216;;-1:-1;14051:216::o;14274:301::-;;-1:-1;;;;;14419:30;;14416:2;;;-1:-1;;14452:12;14416:2;-1:-1;14497:4;14485:17;;;14550:15;;14353:222::o;16946:91::-;-1:-1;;;;;18048:54;;16991:46::o;19126:117::-;-1:-1;;;;;18048:54;;19185:35;;19175:2;;19234:1;;19224:12;19169:74;862:2685:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2030": [ + { + "length": 32, + "start": 4757 + } + ], + "2531": [ + { + "length": 32, + "start": 3322 + } + ], + "2533": [ + { + "length": 32, + "start": 5096 + } + ], + "3869": [ + { + "length": 32, + "start": 4721 + } + ], + "4431": [ + { + "length": 32, + "start": 2371 + }, + { + "length": 32, + "start": 2414 + }, + { + "length": 32, + "start": 2457 + } + ], + "4455": [ + { + "length": 32, + "start": 2499 + } + ], + "4457": [ + { + "length": 32, + "start": 3899 + } + ], + "5049": [ + { + "length": 32, + "start": 4557 + } + ], + "6104": [ + { + "length": 32, + "start": 7707 + } + ], + "6106": [ + { + "length": 32, + "start": 7743 + } + ], + "8847": [ + { + "length": 32, + "start": 12409 + } + ], + "8849": [ + { + "length": 32, + "start": 12442 + } + ], + "8851": [ + { + "length": 32, + "start": 12376 + } + ], + "13180": [ + { + "length": 32, + "start": 6601 + } + ], + "13182": [ + { + "length": 32, + "start": 4501 + } + ], + "13184": [ + { + "length": 32, + "start": 8302 + } + ], + "13186": [ + { + "length": 32, + "start": 8368 + } + ], + "13188": [ + { + "length": 32, + "start": 8434 + } + ], + "13190": [ + { + "length": 32, + "start": 8500 + } + ], + "13192": [ + { + "length": 32, + "start": 8566 + } + ], + "13194": [ + { + "length": 32, + "start": 8632 + } + ], + "13196": [ + { + "length": 32, + "start": 12778 + } + ], + "13198": [ + { + "length": 32, + "start": 12826 + } + ], + "13200": [ + { + "length": 32, + "start": 12874 + } + ], + "13202": [ + { + "length": 32, + "start": 12922 + } + ], + "13204": [ + { + "length": 32, + "start": 12970 + } + ], + "13206": [ + { + "length": 32, + "start": 13018 + } + ], + "13208": [ + { + "length": 32, + "start": 7787 + } + ], + "13210": [ + { + "length": 32, + "start": 7835 + } + ], + "13212": [ + { + "length": 32, + "start": 7883 + } + ], + "13214": [ + { + "length": 32, + "start": 7931 + } + ], + "13216": [ + { + "length": 32, + "start": 7979 + } + ], + "13218": [ + { + "length": 32, + "start": 8027 + } + ], + "13220": [ + { + "length": 32, + "start": 11630 + }, + { + "length": 32, + "start": 18143 + } + ], + "13222": [ + { + "length": 32, + "start": 19035 + } + ], + "13224": [ + { + "length": 32, + "start": 19071 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106103ba5760003560e01c806374f3b009116101f4578063aaabadc51161011a578063d5c096c4116100ad578063e78af0781161007c578063e78af07814610791578063eb0f24d6146107a4578063ed24911d146107ac578063f4b7964d146107b4576103ba565b8063d5c096c41461075b578063dd62ed3e1461076e578063ddf4627b14610781578063de82cd3414610789576103ba565b8063c6e9407e116100e9578063c6e9407e1461070a578063cd6ceda81461071d578063d2946c2b14610740578063d505accf14610748576103ba565b8063aaabadc5146106df578063ab7759f1146106e7578063b35056b8146106fa578063b7b814fc14610702576103ba565b8063876f303b1161019257806390193b7c1161016157806390193b7c1461069e57806395d89b41146106b1578063a457c2d7146106b9578063a9059cbb146106cc576103ba565b8063876f303b1461066657806387ec68171461066e578063893d20e8146106815780638d928af814610696576103ba565b80637f1260d1116101ce5780637f1260d11461062057806382687a56146106435780638456cb591461064b578063851c1bb314610653576103ba565b806374f3b009146105d95780637b549244146105fa5780637ecebe001461060d576103ba565b80633644e515116102e457806354dea00a11610277578063679aefce11610246578063679aefce146105945780636daccffa1461059c57806370464016146105b357806370a08231146105c6576103ba565b806354dea00a1461055057806354fd4d501461056357806355c676281461056b5780636028bfd414610573576103ba565b80633c975d51116102b35780633c975d51146105175780633f4ba83a1461052d57806350dd6ed91461053557806354a844ba14610548576103ba565b80633644e515146104e157806338e9922e146104e957806338fff2d0146104fc5780633950935114610504576103ba565b80631c0de0511161035c57806323b872dd1161032b57806323b872dd146104935780632df2c7c0146104a65780632f1a0bc9146104b9578063313ce567146104cc576103ba565b80631c0de0511461043f5780631dd746ea146104565780631ea046c11461046b578063238a2d591461047e576103ba565b8063095ea7b311610398578063095ea7b3146104055780630da0669c1461042557806315b0015b1461042f57806318160ddd14610437576103ba565b806301ec954a146103bf57806304842d4c146103e857806306fdde03146103f0575b600080fd5b6103d26103cd366004615dab565b6107c7565b6040516103df9190616143565b60405180910390f35b6103d261086d565b6103f861087c565b6040516103df9190616219565b61041861041336600461593f565b610912565b6040516103df9190616120565b61042d610929565b005b6104186109c1565b6103d26109e5565b6104476109eb565b6040516103df9392919061612b565b61045e610a14565b6040516103df91906160e8565b61042d610479366004615cab565b610a1e565b610486610a7b565b6040516103df919061609b565b6104186104a136600461588f565b610b16565b61042d6104b436600461583b565b610b8a565b61042d6104c7366004615ee2565b610be6565b6104d4610cc9565b6040516103df91906162b0565b6103d2610cd2565b61042d6104f7366004615a85565b610cdc565b6103d2610cf8565b61041861051236600461593f565b610d1c565b61051f610d57565b6040516103df929190616287565b61042d610d82565b61042d610543366004615b9c565b610d94565b61042d610db2565b6103d261055e36600461583b565b610dc4565b6103f8610ddf565b6103d2610e40565b610586610581366004615a9d565b610e53565b6040516103df92919061622c565b6103d2610e8a565b6105a4610ef6565b6040516103df93929190616271565b6103d26105c1366004615a85565b610f11565b6103d26105d436600461583b565b610fd7565b6105ec6105e7366004615a9d565b610ff2565b6040516103df9291906160fb565b61042d610608366004615cd8565b6110f5565b6103d261061b36600461583b565b611126565b61063361062e36600461583b565b611131565b6040516103df9493929190616295565b6103d2611193565b61042d6111b7565b6103d2610661366004615b40565b6111c9565b6103d261121b565b61058661067c366004615a9d565b611249565b61068961126f565b6040516103df9190616087565b610689611293565b6103d26106ac36600461583b565b6112b7565b6103f86112d2565b6104186106c736600461593f565b611333565b6104186106da36600461593f565b611371565b61068961137e565b6104186106f536600461583b565b611388565b61041861139b565b61042d6113ac565b61042d610718366004615a85565b6113be565b61073061072b366004615a36565b6113c7565b6040516103df9493929190616245565b6106896113e6565b61042d6107563660046158cf565b61140a565b6105ec610769366004615a9d565b611495565b6103d261077c366004615857565b6115b8565b6103d26115f5565b6103d26115fb565b61041861079f366004615a85565b61169d565b61042d6116a8565b6103d26116d4565b61042d6107c236600461593f565b6116de565b600084608001516107f46107d9611293565b6001600160a01b0316336001600160a01b03161460cd6119a9565b6108096107ff610cf8565b82146101f46119a9565b6108116119b7565b610823848461081e6119c7565b6119eb565b606061082d611a03565b905060008751600181111561083e57fe5b14610855576108508787878785611a9c565b610862565b6108628787878785611af5565b979650505050505050565b6000610877611b30565b905090565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109085780601f106108dd57610100808354040283529160200191610908565b820191906000526020600020905b8154815290600101906020018083116108eb57829003601f168201915b5050505050905090565b600061091f338484611b37565b5060015b92915050565b610931611b9f565b6109396109c1565b15610969576109697f00000000000000000000000000000000000000000000000000000000000000006000611c0c565b6109947f00000000000000000000000000000000000000000000000000000000000000006002611c0c565b6109bf7f00000000000000000000000000000000000000000000000000000000000000006003611c0c565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b60008060006109f8611dfc565b159250610a03611e19565b9150610a0d611e3d565b9050909192565b6060610877611a03565b80600e6000846001811115610a2f57fe5b6001811115610a3a57fe5b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555050565b60606000610a876119c7565b905060608167ffffffffffffffff81118015610aa257600080fd5b50604051908082528060200260200182016040528015610acc578160200160208202803683370190505b50905060005b82811015610b0f57610ae381611e61565b828281518110610aef57fe5b6001600160a01b0390921660209283029190910190910152600101610ad2565b5091505090565b600080610b2385336115b8565b9050610b47336001600160a01b0387161480610b3f5750838210155b61019e6119a9565b610b52858585611f8a565b336001600160a01b03861614801590610b6d57506000198114155b15610b7f57610b7f8533858403611b37565b506001949350505050565b6000610b958261206a565b90506000610ba282611e61565b9050610bbb6001600160a01b03821615156101556119a9565b6000828152600a6020526040812054610bd3906121f8565b9050610be0838383612207565b50505050565b610bee61221d565b610bfe600183101561012c6119a9565b610c0f61138883111561012d6119a9565b6000610c1b824261180b565b9050610c2f6201518082101561013d6119a9565b600080610c3a612263565b91509150610c4b811561013e6119a9565b6000610c59866103e8611774565b90506000838211610c8857610c83610c746201518086611774565b610c7e8488611774565b6122d7565b610ca2565b610ca2610c986201518084611774565b610c7e8688611774565b9050610cb4600282111561013f6119a9565b610cc08483428961230a565b50505050505050565b60055460ff1690565b60006108776116d4565b610ce461221d565b610cec612359565b610cf58161236c565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161091f918590610d5290866123e5565b611b37565b600c546000908190610d6c8160e9601761199a565b9250610d7b81600060e961199a565b9150509091565b610d8a61221d565b6109bf60006123f7565b610d9c61221d565b610da4612359565b610dae8282612488565b5050565b610dba61221d565b6109bf6001612596565b6000610dd7610dd28361206a565b6125ed565b90505b919050565b600d8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109085780601f106108dd57610100808354040283529160200191610908565b6008546000906108779060c0603f61199a565b60006060610e698651610e646119c7565b612640565b610e7e8989898989898961264d61266f6126d8565b97509795505050505050565b60006060600080600080610e9c61286f565b9398509196509450925090506000610eb485856123e5565b90506000610ec0612263565b5090506000848214610edb57610ed6828961295f565b610edd565b835b9050610ee98184612ac1565b9850505050505050505090565b6000806000610f03612263565b90949093506103e892509050565b6000610f1b61139b565b15610f2857506000610dda565b81610f7457610f356109c1565b610f5f577f0000000000000000000000000000000000000000000000000000000000000000610f6d565b600b5467ffffffffffffffff165b9050610dda565b6002821415610f9c5750600b5468010000000000000000900467ffffffffffffffff16610dda565b6003821415610fcc5750600b54700100000000000000000000000000000000900467ffffffffffffffff16610dda565b610dda6101bb612b12565b6001600160a01b031660009081526020819052604090205490565b606080886110016107d9611293565b61100c6107ff610cf8565b6060600061101986612b3c565b1561104157611026612b6b565b611038896110326109e5565b88612b7e565b92509050611093565b6110496119b7565b6060611053611a03565b905061105f8a82612bc2565b6110838d8d8d8d8d61106f61139b565b611079578d61107c565b60005b878e61264d565b93509150611091838261266f565b505b61109d8b82612c2b565b81895167ffffffffffffffff811180156110b657600080fd5b506040519080825280602002602001820160405280156110e0578160200160208202803683370190505b509450945050505b5097509795505050505050565b80600f600084600181111561110657fe5b600181111561111157fe5b81526020810191909152604001600020555050565b6000610dd7826112b7565b6000806000806000600a60006111468861206a565b815260208101919091526040016000205490506111678115156101556119a9565b61117081612c35565b945061117b81612c43565b935061118681612c51565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6111bf61221d565b6109bf60016123f7565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016111fe929190616011565b604051602081830303815290604052805190602001209050919050565b600080600061122861286f565b5050925092505061124281836123e590919063ffffffff16565b9250505090565b6000606061125a8651610e646119c7565b610e7e89898989898989612c73612c846126d8565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109085780601f106108dd57610100808354040283529160200191610908565b60008061134033856115b8565b905080831061135a5761135533856000611b37565b611367565b6113673385858403611b37565b5060019392505050565b600061091f338484611f8a565b6000610877612ced565b6000610dd76113968361206a565b612d67565b6008546000906108779060ff612d8f565b6113b461221d565b6109bf6000612596565b610cf581612d99565b600060606000806113d785612ded565b93509350935093509193509193565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114398c6112b7565b8960405160200161144f9695949392919061616b565b6040516020818303038152906040528051906020012090506114808882611477878787612e56565b886101f8612e95565b61148b888888611b37565b5050505050505050565b606080886114a46107d9611293565b6114af6107ff610cf8565b6114b76119b7565b60606114c1611a03565b90506114cb6109e5565b61157857600060606114e08d8d8d868b612eec565b915091506114f96114ef611b30565b83101560cc6119a9565b61150b6000611506611b30565b612fc5565b61151e8b611517611b30565b8403612fc5565b6115288184612c84565b808a5167ffffffffffffffff8111801561154157600080fd5b5060405190808252806020026020018201604052801561156b578160200160208202803683370190505b50955095505050506110e8565b6115828882612bc2565b600060606115aa8d8d8d8d8d61159661139b565b6115a0578d6115a3565b60005b898e612c73565b9150915061151e8b83612fc5565b60006115c2611293565b6001600160a01b0316826001600160a01b031614156115e45750600019610923565b6115ee8383612fcf565b9050610923565b60001981565b6000806000611608611293565b6001600160a01b031663b05f8e4861161e610cf8565b306040518363ffffffff1660e01b815260040161163c9291906161e4565b60806040518083038186803b15801561165457600080fd5b505afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c9190615f03565b505091509150611242818301612ffa565b6000610dd78261300e565b6116b061221d565b6000806116bb612263565b915091506116cb816101406119a9565b610dae82613019565b6000610877613054565b6116e661221d565b60006116f18361206a565b905060006116fe82611e61565b90506117176001600160a01b03821615156101556119a9565b611722828285612207565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48560405161175c9190616143565b60405180910390a350505050565b80610dae816130f1565b600082820261179884158061179157508385838161178e57fe5b04145b60036119a9565b9392505050565b6117b782841480156117b057508183145b60676119a9565b505050565b60006001821b19841682846117d25760006117d5565b60015b60ff16901b17949350505050565b60006117f084848461316a565b5082821b6000196001831b01831b198516175b949350505050565b600061181b8383111560016119a9565b50900390565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118949190615eca565b6000858152600a60205260409020549091506118b181838561194c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac906118f5908590616143565b60405180910390a25050505050565b6000610dd761191283612c35565b83906060806117e3565b600061193567ffffffffffffffff8311156101ba6119a9565b5090565b600061194684848461316a565b50501b90565b600061195f606084901c156101496119a9565b61180342830160e0602061197c8660c083838c8c600060606117e3565b9291906117e3565b60008183106119935781611798565b5090919050565b6001901b6000190191901c1690565b81610dae57610dae81612b12565b6119bf6131b0565b6109bf6131b8565b7f000000000000000000000000000000000000000000000000000000000000000090565b6117b781841080156119fc57508183105b60646119a9565b60606000611a0f6119c7565b905060608167ffffffffffffffff81118015611a2a57600080fd5b50604051908082528060200260200182016040528015611a54578160200160208202803683370190505b50905060005b82811015610b0f57611a7d611a6e826125ed565b611a77836131e0565b906132fe565b828281518110611a8957fe5b6020908102919091010152600101611a5a565b60208501516000906001600160a01b0316301480611ac6575060408601516001600160a01b031630145b611adc57611ad7868686868661332a565b611ae9565b611ae98686868686613394565b90505b95945050505050565b60208501516000906001600160a01b0316301480611b1f575060408601516001600160a01b031630145b611adc57611ad78686868686613498565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611b92908590616143565b60405180910390a3505050565b611ba7612359565b60606000806000611bb661286f565b9450945094505093506000831115611bd157611bd1836134ef565b6000611bdb612263565b5090506000838214611bf657611bf1828761295f565b611bf8565b825b9050611c048282613500565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611c54908590600401616143565b60206040518083038186803b158015611c6c57600080fd5b505afa158015611c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca49190615eca565b905081611cf257611cb48161191c565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611dbf565b6002821415611d4f57611d048161191c565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611dbf565b6003821415611db457611d618161191c565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611dbf565b611dbf6101bb612b12565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611def9190616143565b60405180910390a2505050565b6000611e06611e3d565b42118061087757505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611e8f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160011415611ebf57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160021415611eef57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160031415611f1f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160041415611f4f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160051415611f7f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b610dda610135612b12565b611fa16001600160a01b03841615156101986119a9565b611fb86001600160a01b03831615156101996119a9565b611fc38383836117b7565b6001600160a01b038316600090815260208190526040902054611fe990826101a0613526565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461201890826123e5565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b92908590616143565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156120ae57506000610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156120f057506001610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561213257506002610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561217457506003610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156121b657506004610dda565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f7f57506005610dda565b6000610dd78260c0602061199a565b60016122128161353c565b610be0848484611821565b600061224c6000357fffffffff00000000000000000000000000000000000000000000000000000000166111c9565b9050610cf561225b82336135dc565b6101916119a9565b6000806000806000806122746136c5565b9350935093509350804210156122c75760019450838311156122ab5781810382420385850302816122a157fe5b04840195506122c2565b81810382420384860302816122bc57fe5b04840395505b6122cf565b600094508295505b505050509091565b60006122e682151560046119a9565b826122f357506000610923565b8160018403816122ff57fe5b046001019050610923565b61231684848484613724565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf28484848460405161234b9493929190616295565b60405180910390a150505050565b6109bf612364611dfc565b6101926119a9565b612381612377613763565b82101560cb6119a9565b61239661238c61376c565b82111560ca6119a9565b6008546123a7908260c0603f6117e3565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906123da908390616143565b60405180910390a150565b600082820161179884821015836119a9565b801561241757612412612408611e19565b42106101936119a9565b61242c565b61242c612422611e3d565b42106101a96119a9565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906123da908390616120565b6000612492610cf8565b9050600061249e611293565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b81526004016124cb9291906161e4565b60806040518083038186803b1580156124e357600080fd5b505afa1580156124f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251b9190615f03565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d492506125689150859087906004016161cb565b600060405180830381600087803b15801561258257600080fd5b505af115801561148b573d6000803e3d6000fd5b6008546125a5908260ff6117bc565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906125d8908390616120565b60405180910390a180610cf557610cf5613778565b60006125f7611193565b82141561260d5750670de0b6b3a7640000610dda565b6000828152600a602052604090205480156126305761262b81612c35565b611798565b670de0b6b3a76400009392505050565b610dae81831460676119a9565b6000606061265e600088868661384a565b915091509850989650505050505050565b8151815161267e908290612640565b60005b81811015610be0576126b984828151811061269857fe5b60200260200101518483815181106126ac57fe5b6020026020010151612ac1565b8482815181106126c557fe5b6020908102919091010152600101612681565b3330146127c7576000306001600160a01b03166000366040516126fc929190616041565b6000604051808303816000865af19150503d8060008114612739576040519150601f19603f3d011682016040523d82523d6000602084013e61273e565b606091505b50509050806000811461274d57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb0000000000000000000000000000000000000000000000000000000081146127a9573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b6127cf6119b7565b60606127d9611a03565b90506127e58782612bc2565b600060606127fd8c8c8c8c8c8c898d8d63ffffffff16565b9150915061280f81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b60606000806000806060612881611293565b6001600160a01b031663f94d4668612897610cf8565b6040518263ffffffff1660e01b81526004016128b39190616143565b60006040518083038186803b1580156128cb57600080fd5b505afa1580156128df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612907919081019061596a565b5091505061291c81612917611a03565b612bc2565b612925816138f8565b965094506000612933610d57565b90945090506000612945888684613931565b9450905061295387826139be565b95505050509091929394565b80516000908190815b818110156129a05761299685828151811061297f57fe5b6020026020010151846123e590919063ffffffff16565b9250600101612968565b50816129b157600092505050610923565b600082868302825b60ff811015612aaa578260005b86811015612a07576129fd6129db8387611774565b6129f88c84815181106129ea57fe5b60200260200101518a611774565b6139d6565b91506001016129c6565b50839450612a60612a3f612a39612a1e848a611774565b612a33612a2b888d611774565b6103e86139d6565b906123e5565b86611774565b6129f8612a4f8960010185611774565b612a33612a2b6103e889038a611774565b935084841115612a8857600185850311612a835783975050505050505050610923565b612aa1565b600184860311612aa15783975050505050505050610923565b506001016129b9565b50612ab6610141612b12565b505050505092915050565b6000612ad082151560046119a9565b82612add57506000610923565b670de0b6b3a764000083810290612b0090858381612af757fe5b041460056119a9565b828181612b0957fe5b04915050610923565b610cf5817f42414c00000000000000000000000000000000000000000000000000000000006139f6565b6000808251118015610dd7575060ff801682806020019051810190612b619190615f43565b60ff161492915050565b6109bf612b7661139b565b6101b66119a9565b6000606060006060612b8f876138f8565b9150915060006060612ba2838589613a71565b9150915081612bb2826000613a9d565b9550955050505050935093915050565b81518151612bd1908290612640565b60005b81811015610be057612c0c848281518110612beb57fe5b6020026020010151848381518110612bff57fe5b60200260200101516132fe565b848281518110612c1857fe5b6020908102919091010152600101612bd4565b610dae8282613b5a565b6000610dd78282606061199a565b6000610dd78260608061199a565b600080612c5d836121f8565b9150612c6c8360e0602061199a565b9050915091565b6000606061265e600188868661384a565b81518151612c93908290612640565b60005b81811015610be057612cce848281518110612cad57fe5b6020026020010151848381518110612cc157fe5b6020026020010151613c26565b848281518110612cda57fe5b6020908102919091010152600101612c96565b6000612cf7611293565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612d2f57600080fd5b505afa158015612d43573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190615b80565b6000610dd77f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b612da1611193565b811415612dad57610cf5565b6000818152600a60205260409020548015610dae57600080612dce83612c51565b9150915080421115610be057610be084612de786611e61565b84612207565b60006060600080600080612dff610d57565b91509150600060606000612e148a8686613c74565b9250925092506000612e24612263565b5090506000868214612e3f57612e3a828561295f565b612e41565b825b949c939b509099509297509095505050505050565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612ea085613ccc565b9050612eb6612eb0878387613ce8565b836119a9565b612ec5428410156101b86119a9565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612efb84613d97565b9050612f166000826003811115612f0e57fe5b1460ce6119a9565b6060612f2185613dad565b9050612f2f81518751612640565b612f398187612bc2565b6000612f43612263565b5090506060612f5183613dc3565b90506000612f5f838361295f565b9050806000612f7c6d80000000000000000000000000008361180b565b9050612f888d82612fc5565b8086612f92611193565b81518110612f9c57fe5b602002602001018181525050612fb28584613500565b509c939b50929950505050505050505050565b610dae8282613e65565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6000610dd7826130086109e5565b9061180b565b6000610dd782613ef2565b61302581824242613724565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516123da9190616143565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006130c1613efd565b306040516020016130d695949392919061619f565b60405160208183030381529060405280519060200120905090565b60028151101561310057610cf5565b60008160008151811061310f57fe5b602002602001015190506000600190505b82518110156117b757600083828151811061313757fe5b60200260200101519050613160816001600160a01b0316846001600160a01b03161060656119a9565b9150600101613120565b613179610100831060646119a9565b6131a1600182101580156119fc575061319760ff8461010003611984565b82111560646119a9565b6117b783821c156101b46119a9565b6109bf612359565b60006131c26119c7565b905060005b81811015610dae576131d881612d99565b6001016131c7565b60008161320e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b816001141561323e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b816002141561326e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b816003141561329e57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b81600414156132ce57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b8160051415611f7f57507f0000000000000000000000000000000000000000000000000000000000000000610dda565b600082820261331884158061179157508385838161178e57fe5b670de0b6b3a764000090049392505050565b60006133368583612bc2565b613357866060015183858151811061334a57fe5b6020026020010151613f01565b6060870152600061336a87878787613f0d565b90506133898184878151811061337c57fe5b6020026020010151613f2f565b905061086281613f3b565b60008080875160018111156133a557fe5b1490506133b28684612bc2565b6133d2876060015184836133c657866133c8565b875b8151811061334a57fe5b876060018181525050600060606000806133eb8a612ded565b93509350935093506000806133fe611193565b8a146134245761341f878e60600151876134178e613f57565b888b89613f8c565b61343f565b61343f878e60600151876134378f613f57565b888b89613fc5565b915091506134508486858985613fe9565b8661346a57613465828a8d8151811061337c57fe5b613487565b613487828a8c8151811061347a57fe5b6020026020010151614069565b9d9c50505050505050505050505050565b60006134a78660600151614075565b60608701526134b68583612bc2565b6134ca866060015183868151811061334a57fe5b606087015260006134dd87878787614096565b90506108628184868151811061347a57fe5b610cf56134fa6113e6565b82612fc5565b61350d81600060e9611939565b61351a8360e96017611939565b17600c55610dae6140ae565b600061353584841115836119a9565b5050900390565b600e600082600181111561354c57fe5b600181111561355757fe5b815260208101919091526040016000205460ff1615610cf557610cf5600f600083600181111561358357fe5b600181111561358e57fe5b8152602001908152602001600020546000146135d357600f60008360018111156135b457fe5b60018111156135bf57fe5b8152602001908152602001600020546135d7565b6101b75b612b12565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b6135fb61126f565b6001600160a01b03161415801561361657506136168361300e565b1561363e5761362361126f565b6001600160a01b0316336001600160a01b0316149050610923565b613646612ced565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016136759392919061614c565b60206040518083038186803b15801561368d57600080fd5b505afa1580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ee9190615a69565b6000806000806136e46000604060095461199a9092919063ffffffff16565b6009549094506136f69060408061199a565b600954909350613709906080604061199a565b60095490925061371c9060c0604061199a565b905090919293565b6137318160c06040611939565b61373e8360806040611939565b61374a85604080611939565b6137578760006040611939565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b6060613782611293565b6001600160a01b031663f94d4668613798610cf8565b6040518263ffffffff1660e01b81526004016137b49190616143565b60006040518083038186803b1580156137cc57600080fd5b505afa1580156137e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613808919081019061596a565b5091505061381881612917611a03565b606061382382613dc3565b9050600061382f612263565b509050600061383e828461295f565b9050610be08282613500565b600060606000606060008061385e89612ded565b93509350935093506156db8a613876576140e461387a565b6141795b905060006060613892868689878f8f8963ffffffff16565b915091506156db8d6138a65761180b6138aa565b6123e55b90506138b78783836141f7565b60006138c789858463ffffffff16565b90506138d68789888c85613fe9565b836138e2846000613a9d565b9a509a5050505050505050505094509492505050565b6000606061391f83613908611193565b8151811061391257fe5b6020026020010151612ffa565b61392884613dc3565b91509150915091565b6000806000806000613943888861426b565b925092509250600086841161395957600061395d565b8684035b9050600084841161396f576000613973565b8484035b9050600061398e6139846000610f11565b611a778587612ac1565b905060006139a961399f6002610f11565b611a778588612ac1565b919091019b939a509298505050505050505050565b60006117986139cd8484611774565b6129f8846142ed565b60006139e582151560046119a9565b8183816139ee57fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b600060606000613a8084614313565b90506060613a8f878784614329565b919791965090945050505050565b6060825160010167ffffffffffffffff81118015613aba57600080fd5b50604051908082528060200260200182016040528015613ae4578160200160208202803683370190505b50905060005b8151811015613b5357613afb611193565b8114613b325783613b0a611193565b8210613b195760018203613b1b565b815b81518110613b2557fe5b6020026020010151613b34565b825b828281518110613b4057fe5b6020908102919091010152600101613aea565b5092915050565b613b716001600160a01b038316151561019b6119a9565b613b7d826000836117b7565b6001600160a01b038216600090815260208190526040902054613ba390826101b2613526565b6001600160a01b038316600090815260208190526040902055613bd6613bd182613bcb6109e5565b906143d8565b6143e6565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c1a9190616143565b60405180910390a35050565b6000613c3582151560046119a9565b82613c4257506000610923565b670de0b6b3a764000083810290613c5c90858381612af757fe5b826001820381613c6857fe5b04600101915050610923565b600060606000806060613c86886138f8565b91509150600080613c98838a8a613931565b915091506000613ca885846139be565b90508015613cb957613cb9816134ef565b9390930199919850919650945050505050565b6000613cd6613054565b826040516020016111fe929190616051565b6000613cfa82516041146101b96119a9565b60208281015160408085015160608601518251600080825295019283905292939092811a91600190613d339089908590889088906161fb565b6020604051602081039080840390855afa158015613d55573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590613d8b5750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610dd79190615cf5565b6060818060200190518101906117989190615d10565b606080600183510367ffffffffffffffff81118015613de157600080fd5b50604051908082528060200260200182016040528015613e0b578160200160208202803683370190505b50905060005b8151811015613b535783613e23611193565b8210613e325781600101613e34565b815b81518110613e3e57fe5b6020026020010151828281518110613e5257fe5b6020908102919091010152600101613e11565b613e71600083836117b7565b613e80613bd182612a336109e5565b6001600160a01b038216600090815260208190526040902054613ea390826123e5565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613c1a908590616143565b6000610dd7826143eb565b4690565b600061179883836132fe565b600080613f198161353c565b613f2586868686614427565b9695505050505050565b60006117988383613c26565b6000610dd7613f50613f4b610e40565b6142ed565b8390613c26565b6000613f6e613f64611193565b83141560646119a9565b613f76611193565b821061193557613f8782600161180b565b610dd7565b60008088613fa757613fa288888888888861443b565b613fb5565b613fb5888888888888614512565b9150915097509795505050505050565b60008088613fdb57613fa2888888888888614573565b613fb58888888888886145d9565b6000613ff5868661295f565b905060006140038385612ac1565b9050600061401186836132fe565b90508083111561405f57808303600061403b6140358361403084610f11565b611774565b866139d6565b9050801561405c57600061404f87836139be565b905061405a816134ef565b505b50505b61148b8884613500565b60006117988383612ac1565b60008061408a614083610e40565b8490614688565b9050611798838261180b565b6000806140a28161353c565b613f25868686866146c4565b60006140b86119c7565b905060005b81811015610dae576140ce816146d8565b156140dc576140dc81614707565b6001016140bd565b6000606060006140f384614735565b9050600181600281111561410357fe5b14156141215761411787878a8c898961474b565b925092505061416e565b600281600281111561412f57fe5b141561414057614117878a866147aa565b600081600281111561414e57fe5b14156141615761411787878a8c886147c8565b61416c610150612b12565b505b965096945050505050565b60006060600061418884613d97565b9050600181600381111561419857fe5b14156141ac5761411787878a8c8989614869565b60038160038111156141ba57fe5b14156141cb57614117878a866148b8565b60028160038111156141d957fe5b14156141ec5761411787878a8c886148d6565b61416c610136612b12565b82518251614206908290612640565b60005b818110156142645761424585828151811061422057fe5b602002602001015185838151811061423457fe5b60200260200101518563ffffffff16565b85828151811061425157fe5b6020908102919091010152600101614209565b5050505050565b60008060006142848461427f876001614950565b61295f565b925061428e614a59565b156142a75761429d848661295f565b91508190506142e6565b6142af614a7d565b156142c8578291506142c1848661295f565b90506142e6565b6142d78461427f876000614950565b91506142e3848661295f565b90505b9250925092565b6000670de0b6b3a76400008210614305576000610dd7565b50670de0b6b3a76400000390565b6000818060200190518101906117989190615f5f565b606060006143378385612ac1565b9050845167ffffffffffffffff8111801561435157600080fd5b5060405190808252806020026020018201604052801561437b578160200160208202803683370190505b50915060005b85518110156143cf576143b08287838151811061439a57fe5b60200260200101516132fe90919063ffffffff16565b8382815181106143bc57fe5b6020908102919091010152600101614381565b50509392505050565b600061179883836001613526565b600255565b60006144167ff4b7964d000000000000000000000000000000000000000000000000000000006111c9565b821480610dd75750610dd782614aa1565b6000611aec60008660600151868686614b0f565b6000806060875167ffffffffffffffff8111801561445857600080fd5b50604051908082528060200260200182016040528015614482578160200160208202803683370190505b5090508881888151811061449257fe5b60200260200101818152505060006144b5878a8489896144b0610e40565b614b81565b90506144dd8a8a8a815181106144c757fe5b602002602001015161180b90919063ffffffff16565b8989815181106144e957fe5b60209081029190910101526000614500878361180b565b919b919a509098505050505050505050565b600080600061452d8689898c8989614528610e40565b614e11565b905061453f818989815181106144c757fe5b88888151811061454b57fe5b60209081029190910101526000614562868b61180b565b919a91995090975050505050505050565b600080600061458e8689898c8989614589610e40565b614f00565b90506145b6818989815181106145a057fe5b60200260200101516123e590919063ffffffff16565b8888815181106145c257fe5b60209081029190910101526000614562868b6123e5565b6000806060875167ffffffffffffffff811180156145f657600080fd5b50604051908082528060200260200182016040528015614620578160200160208202803683370190505b5090508881888151811061463057fe5b6020026020010181815250506000614653878a84898961464e610e40565b614fcd565b90506146658a8a8a815181106145a057fe5b89898151811061467157fe5b6020908102919091010152600061450087836123e5565b60008282026146a284158061179157508385838161178e57fe5b806146b1576000915050610923565b670de0b6b3a76400006000198201613c68565b6000611aec60018660600151868686614b0f565b6000610dd77f000000000000000000000000000000000000000000000000000000000000000060068401612d8f565b6000818152600a602052604090205461471f81611904565b6000928352600a60205260409092209190915550565b600081806020019051810190610dd79190615bea565b6000606080600061475b8561524e565b9150915061476b82518851612640565b6147788261291788613dc3565b600061478a8989858e8e6144b0610e40565b905061479a8282111560cf6119a9565b9a91995090975050505050505050565b6000606060006147b984615271565b90506060613a8f868884614329565b600060606000806147d885615287565b915091506147ea8651821060646119a9565b6060865167ffffffffffffffff8111801561480457600080fd5b5060405190808252806020026020018201604052801561482e578160200160208202803683370190505b509050614842888884868e8e614528610e40565b81838151811061484e57fe5b60209081029190910101529199919850909650505050505050565b600060608060006148798561529e565b9150915061488987518351612640565b6148968261291788613dc3565b60006148a88989858e8e61464e610e40565b905061479a8282101560d06119a9565b6000606060006148c7846152b6565b90506060613a8f8683896152cc565b600060606000806148e685615368565b915091506148f88651821060646119a9565b6060865167ffffffffffffffff8111801561491257600080fd5b5060405190808252806020026020018201604052801561493c578160200160208202803683370190505b509050614842888884868e8e614589610e40565b8151606090818167ffffffffffffffff8111801561496d57600080fd5b50604051908082528060200260200182016040528015614997578160200160208202803683370190505b50905060005b82811015614a505760006149af611193565b8210156149bc57816149c1565b816001015b90506149cc81612d67565b806149e357508580156149e357506149e3816146d8565b614a00578682815181106149f357fe5b6020026020010151614a30565b614a30878381518110614a0f57fe5b6020026020010151600a60008481526020019081526020016000205461537f565b838381518110614a3c57fe5b60209081029190910101525060010161499d565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000614acc7f2f1a0bc9000000000000000000000000000000000000000000000000000000006111c9565b821480614b005750614afd7feb0f24d6000000000000000000000000000000000000000000000000000000006111c9565b82145b80610dd75750610dd78261539a565b60006060614b1c85613dc3565b90506000614b2985613f57565b90506000614b3685613f57565b90506000614b42612263565b5090506000614b51828661295f565b90508a15614b7357614b67828686868e86615408565b95505050505050611aec565b614b67828686868e86615485565b600080805b8751811015614bbf57614bb5888281518110614b9e57fe5b6020026020010151836123e590919063ffffffff16565b9150600101614b86565b506060865167ffffffffffffffff81118015614bda57600080fd5b50604051908082528060200260200182016040528015614c04578160200160208202803683370190505b5090506000805b8951811015614cd1576000614c3c858c8481518110614c2657fe5b6020026020010151613c2690919063ffffffff16565b9050614c7e8b8381518110614c4d57fe5b6020026020010151614c788c8581518110614c6457fe5b60200260200101518e86815181106144c757fe5b90613c26565b848381518110614c8a57fe5b602002602001018181525050614cc6614cbf82868581518110614ca957fe5b602002602001015161468890919063ffffffff16565b84906123e5565b925050600101614c0b565b506060895167ffffffffffffffff81118015614cec57600080fd5b50604051908082528060200260200182016040528015614d16578160200160208202803683370190505b50905060005b8a51811015614de1576000848281518110614d3357fe5b6020026020010151841115614d9a576000614d5c614d50866142ed565b8e858151811061439a57fe5b90506000614d70828e86815181106144c757fe5b9050614d91614d8a82670de0b6b3a76400008d9003613c26565b83906123e5565b92505050614db1565b8a8281518110614da657fe5b602002602001015190505b614dc1818d84815181106144c757fe5b838381518110614dcd57fe5b602090810291909101015250600101614d1c565b506000614dee8c8361295f565b90506000614dfc828a612ac1565b9050613487614e0a826142ed565b8b90614688565b600080614e2c84614e2687614c78818b61180b565b90614688565b90506000614e3c8a8a848b615518565b90506000614e50828b8b815181106144c757fe5b90506000805b8b51811015614e7857614e6e8c8281518110614b9e57fe5b9150600101614e56565b506000614ea1828d8d81518110614e8b57fe5b6020026020010151612ac190919063ffffffff16565b90506000614eae826142ed565b90506000614ebc8583614688565b90506000614eca868361180b565b9050614eeb614ee483670de0b6b3a76400008d90036132fe565b82906123e5565b98505050505050505050979650505050505050565b600080614f1584614e2687614c78818b6123e5565b90506000614f258a8a848b615518565b90506000614f4f8a8a81518110614f3857fe5b60200260200101518361180b90919063ffffffff16565b90506000805b8b51811015614f7757614f6d8c8281518110614b9e57fe5b9150600101614f55565b506000614f8a828d8d81518110614e8b57fe5b90506000614f97826142ed565b90506000614fa58583614688565b90506000614fb3868361180b565b9050614eeb614ee483670de0b6b3a76400008d9003613c26565b600080805b8751811015614ff457614fea888281518110614b9e57fe5b9150600101614fd2565b506060865167ffffffffffffffff8111801561500f57600080fd5b50604051908082528060200260200182016040528015615039578160200160208202803683370190505b5090506000805b89518110156150d357600061505b858c8481518110614e8b57fe5b905061509d8b838151811061506c57fe5b60200260200101516150978c858151811061508357fe5b60200260200101518e86815181106145a057fe5b90612ac1565b8483815181106150a957fe5b6020026020010181815250506150c8614cbf8286858151811061439a57fe5b925050600101615040565b506060895167ffffffffffffffff811180156150ee57600080fd5b50604051908082528060200260200182016040528015615118578160200160208202803683370190505b50905060005b8a518110156151d95760008385838151811061513657fe5b6020026020010151111561519257600061515b614d5086670de0b6b3a764000061180b565b9050600061516f828e86815181106144c757fe5b9050615189614d8a82670de0b6b3a76400008d90036132fe565b925050506151a9565b8a828151811061519e57fe5b602002602001015190505b6151b9818d84815181106145a057fe5b8383815181106151c557fe5b60209081029190910101525060010161511e565b5060006151e68c8361295f565b905060006151f4828a612ac1565b9050670de0b6b3a764000081111561523f576152328a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000083016132fe565b9650505050505050613f25565b60009650505050505050613f25565b60606000828060200190518101906152669190615c05565b909590945092505050565b6000818060200190518101906117989190615c4a565b600080828060200190518101906152669190615c76565b60606000828060200190518101906152669190615d53565b6000818060200190518101906117989190615d71565b606060006152da8484613c26565b90506060855167ffffffffffffffff811180156152f657600080fd5b50604051908082528060200260200182016040528015615320578160200160208202803683370190505b50905060005b865181101561535e5761533f83888381518110614ca957fe5b82828151811061534b57fe5b6020908102919091010152600101615326565b5095945050505050565b600080828060200190518101906152669190615d8d565b60006117986153918461403085612c43565b6129f884612c35565b60006153c57f38e9922e000000000000000000000000000000000000000000000000000000006111c9565b8214806153f957506153f67f50dd6ed9000000000000000000000000000000000000000000000000000000006111c9565b82145b80610dd75750610dd7826156d5565b600061541a838787815181106145a057fe5b86868151811061542657fe5b602002602001018181525050600061544088888588615518565b90508387878151811061544f57fe5b60200260200101510387878151811061546457fe5b602002602001018181525050613d8b6001613008838a89815181106144c757fe5b6000615497838786815181106144c757fe5b8685815181106154a357fe5b60200260200101818152505060006154bd88888589615518565b9050838786815181106154cc57fe5b6020026020010151018786815181106154e157fe5b602002602001018181525050613d8b6001612a3389898151811061550157fe5b60200260200101518461180b90919063ffffffff16565b60008084518602905060008560008151811061553057fe5b60200260200101519050600086518760008151811061554b57fe5b60200260200101510290506000600190505b87518110156155b157615596615590615589848b858151811061557c57fe5b6020026020010151611774565b8a51611774565b886139d6565b91506155a788828151811061297f57fe5b925060010161555d565b508685815181106155be57fe5b60200260200101518203915060006155d68788611774565b905060006156026155f66155ee84610c7e8988611774565b6103e8611774565b8a898151811061557c57fe5b9050600061561d6156166155ee8b896139d6565b86906123e5565b905060008061563961562f86866123e5565b610c7e8d866123e5565b905060005b60ff8110156156b95781925061566e61565b86612a338586611774565b610c7e8e61300888612a33886002611774565b91508282111561569757600183830311615692575097506118039650505050505050565b6156b1565b6001828403116156b1575097506118039650505050505050565b60010161563e565b506156c5610142612b12565b5050505050505050949350505050565b50600090565bfe5b803561092381616305565b600082601f8301126156f8578081fd5b813561570b615706826162e5565b6162be565b81815291506020808301908481018184028601820187101561572c57600080fd5b60005b84811015612ab65781358452928201929082019060010161572f565b600082601f83011261575b578081fd5b8151615769615706826162e5565b81815291506020808301908481018184028601820187101561578a57600080fd5b60005b84811015612ab65781518452928201929082019060010161578d565b600082601f8301126157b9578081fd5b813567ffffffffffffffff8111156157cf578182fd5b6157e26020601f19601f840116016162be565b91508082528360208285010111156157f957600080fd5b8060208401602084013760009082016020015292915050565b80516003811061092357600080fd5b803561092381616328565b80516004811061092357600080fd5b60006020828403121561584c578081fd5b813561179881616305565b60008060408385031215615869578081fd5b823561587481616305565b9150602083013561588481616305565b809150509250929050565b6000806000606084860312156158a3578081fd5b83356158ae81616305565b925060208401356158be81616305565b929592945050506040919091013590565b600080600080600080600060e0888a0312156158e9578485fd5b87356158f481616305565b9650602088013561590481616305565b95506040880135945060608801359350608088013561592281616335565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215615951578182fd5b823561595c81616305565b946020939093013593505050565b60008060006060848603121561597e578081fd5b835167ffffffffffffffff80821115615995578283fd5b818601915086601f8301126159a8578283fd5b81516159b6615706826162e5565b80828252602080830192508086018b8283870289010111156159d6578788fd5b8796505b84871015615a015780516159ed81616305565b8452600196909601959281019281016159da565b508901519097509350505080821115615a18578283fd5b50615a258682870161574b565b925050604084015190509250925092565b600060208284031215615a47578081fd5b813567ffffffffffffffff811115615a5d578182fd5b611803848285016156e8565b600060208284031215615a7a578081fd5b81516117988161631a565b600060208284031215615a96578081fd5b5035919050565b600080600080600080600060e0888a031215615ab7578081fd5b873596506020880135615ac981616305565b95506040880135615ad981616305565b9450606088013567ffffffffffffffff80821115615af5578283fd5b615b018b838c016156e8565b955060808a0135945060a08a0135935060c08a0135915080821115615b24578283fd5b50615b318a828b016157a9565b91505092959891949750929550565b600060208284031215615b51578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611798578182fd5b600060208284031215615b91578081fd5b815161179881616305565b60008060408385031215615bae578182fd5b8235615bb981616305565b9150602083013567ffffffffffffffff811115615bd4578182fd5b615be0858286016157a9565b9150509250929050565b600060208284031215615bfb578081fd5b6117988383615812565b600080600060608486031215615c19578081fd5b615c238585615812565b9250602084015167ffffffffffffffff811115615c3e578182fd5b615a258682870161574b565b60008060408385031215615c5c578182fd5b615c668484615812565b9150602083015190509250929050565b600080600060608486031215615c8a578081fd5b615c948585615812565b925060208401519150604084015190509250925092565b60008060408385031215615cbd578182fd5b8235615cc881616328565b915060208301356158848161631a565b60008060408385031215615cea578182fd5b823561595c81616328565b600060208284031215615d06578081fd5b611798838361582c565b60008060408385031215615d22578182fd5b615d2c848461582c565b9150602083015167ffffffffffffffff811115615d47578182fd5b615be08582860161574b565b600080600060608486031215615d67578081fd5b615c23858561582c565b60008060408385031215615d83578182fd5b615c66848461582c565b600080600060608486031215615da1578081fd5b615c94858561582c565b60008060008060808587031215615dc0578182fd5b843567ffffffffffffffff80821115615dd7578384fd5b818701915061012080838a031215615ded578485fd5b615df6816162be565b9050615e028984615821565b8152615e1189602085016156dd565b6020820152615e2389604085016156dd565b6040820152606083013560608201526080830135608082015260a083013560a0820152615e538960c085016156dd565b60c0820152615e658960e085016156dd565b60e08201526101008084013583811115615e7d578687fd5b615e898b8287016157a9565b828401525050809650506020870135915080821115615ea6578384fd5b50615eb3878288016156e8565b949794965050505060408301359260600135919050565b600060208284031215615edb578081fd5b5051919050565b60008060408385031215615ef4578182fd5b50508035926020909101359150565b60008060008060808587031215615f18578182fd5b8451935060208501519250604085015191506060850151615f3881616305565b939692955090935050565b600060208284031215615f54578081fd5b815161179881616335565b60008060408385031215615f71578182fd5b8251615f7c81616335565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615fbb57815187529582019590820190600101615f9f565b509495945050505050565b60008151808452815b81811015615feb57602081850181015186830182015201615fcf565b81811115615ffc5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156160dc5783516001600160a01b0316835292840192918401916001016160b7565b50909695505050505050565b6000602082526117986020830184615f8c565b60006040825261610e6040830185615f8c565b8281036020840152611aec8185615f8c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526118036040830184615fc6565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526117986020830184615fc6565b6000838252604060208301526118036040830184615f8c565b60008582526080602083015261625e6080830186615f8c565b6040830194909452506060015292915050565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156162dd57600080fd5b604052919050565b600067ffffffffffffffff8211156162fb578081fd5b5060209081020190565b6001600160a01b0381168114610cf557600080fd5b8015158114610cf557600080fd5b60028110610cf557600080fd5b60ff81168114610cf557600080fdfea2646970667358221220c08c8d64ebff85caa2243eb15df19ac53568abdbaa0443bb078a722d6eb4b51964736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x3BA JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x74F3B009 GT PUSH2 0x1F4 JUMPI DUP1 PUSH4 0xAAABADC5 GT PUSH2 0x11A JUMPI DUP1 PUSH4 0xD5C096C4 GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xE78AF078 GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE78AF078 EQ PUSH2 0x791 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0x7A4 JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x7AC JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x7B4 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x75B JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x76E JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x781 JUMPI DUP1 PUSH4 0xDE82CD34 EQ PUSH2 0x789 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0xC6E9407E GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xC6E9407E EQ PUSH2 0x70A JUMPI DUP1 PUSH4 0xCD6CEDA8 EQ PUSH2 0x71D JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x740 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x748 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x6DF JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x6E7 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x6FA JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x702 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x876F303B GT PUSH2 0x192 JUMPI DUP1 PUSH4 0x90193B7C GT PUSH2 0x161 JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x6B1 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x6B9 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x6CC JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x876F303B EQ PUSH2 0x666 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x66E JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x681 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x696 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x7F1260D1 GT PUSH2 0x1CE JUMPI DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x620 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x643 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x64B JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x653 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x5D9 JUMPI DUP1 PUSH4 0x7B549244 EQ PUSH2 0x5FA JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x60D JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2E4 JUMPI DUP1 PUSH4 0x54DEA00A GT PUSH2 0x277 JUMPI DUP1 PUSH4 0x679AEFCE GT PUSH2 0x246 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x594 JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x59C JUMPI DUP1 PUSH4 0x70464016 EQ PUSH2 0x5B3 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x5C6 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x550 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x56B JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x573 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x3C975D51 GT PUSH2 0x2B3 JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x517 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x52D JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x535 JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x548 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x4E9 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4FC JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x504 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x35C JUMPI DUP1 PUSH4 0x23B872DD GT PUSH2 0x32B JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x493 JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x4A6 JUMPI DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x4CC JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x43F JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x456 JUMPI DUP1 PUSH4 0x1EA046C1 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x47E JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x398 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x425 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x42F JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x437 JUMPI PUSH2 0x3BA JUMP JUMPDEST DUP1 PUSH4 0x1EC954A EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x4842D4C EQ PUSH2 0x3E8 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3F0 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3D2 PUSH2 0x3CD CALLDATASIZE PUSH1 0x4 PUSH2 0x5DAB JUMP JUMPDEST PUSH2 0x7C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3D2 PUSH2 0x86D JUMP JUMPDEST PUSH2 0x3F8 PUSH2 0x87C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6219 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x413 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x912 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6120 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x929 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x418 PUSH2 0x9C1 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x447 PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x612B JUMP JUMPDEST PUSH2 0x45E PUSH2 0xA14 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x60E8 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x5CAB JUMP JUMPDEST PUSH2 0xA1E JUMP JUMPDEST PUSH2 0x486 PUSH2 0xA7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x609B JUMP JUMPDEST PUSH2 0x418 PUSH2 0x4A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x588F JUMP JUMPDEST PUSH2 0xB16 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x4B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0xB8A JUMP JUMPDEST PUSH2 0x42D PUSH2 0x4C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5EE2 JUMP JUMPDEST PUSH2 0xBE6 JUMP JUMPDEST PUSH2 0x4D4 PUSH2 0xCC9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x62B0 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xCD2 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x4F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0xCDC JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xCF8 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x512 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0xD1C JUMP JUMPDEST PUSH2 0x51F PUSH2 0xD57 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP3 SWAP2 SWAP1 PUSH2 0x6287 JUMP JUMPDEST PUSH2 0x42D PUSH2 0xD82 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x543 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B9C JUMP JUMPDEST PUSH2 0xD94 JUMP JUMPDEST PUSH2 0x42D PUSH2 0xDB2 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x55E CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0xDC4 JUMP JUMPDEST PUSH2 0x3F8 PUSH2 0xDDF JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x586 PUSH2 0x581 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0xE53 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP3 SWAP2 SWAP1 PUSH2 0x622C JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0xE8A JUMP JUMPDEST PUSH2 0x5A4 PUSH2 0xEF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6271 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x5C1 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x5D4 CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST PUSH2 0x5EC PUSH2 0x5E7 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP3 SWAP2 SWAP1 PUSH2 0x60FB JUMP JUMPDEST PUSH2 0x42D PUSH2 0x608 CALLDATASIZE PUSH1 0x4 PUSH2 0x5CD8 JUMP JUMPDEST PUSH2 0x10F5 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x61B CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x1126 JUMP JUMPDEST PUSH2 0x633 PUSH2 0x62E CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x1131 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6295 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x1193 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x11B7 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x661 CALLDATASIZE PUSH1 0x4 PUSH2 0x5B40 JUMP JUMPDEST PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x121B JUMP JUMPDEST PUSH2 0x586 PUSH2 0x67C CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0x1249 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x126F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP2 SWAP1 PUSH2 0x6087 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x6AC CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x12B7 JUMP JUMPDEST PUSH2 0x3F8 PUSH2 0x12D2 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x6C7 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x1333 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x6DA CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x1371 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x137E JUMP JUMPDEST PUSH2 0x418 PUSH2 0x6F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x583B JUMP JUMPDEST PUSH2 0x1388 JUMP JUMPDEST PUSH2 0x418 PUSH2 0x139B JUMP JUMPDEST PUSH2 0x42D PUSH2 0x13AC JUMP JUMPDEST PUSH2 0x42D PUSH2 0x718 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0x13BE JUMP JUMPDEST PUSH2 0x730 PUSH2 0x72B CALLDATASIZE PUSH1 0x4 PUSH2 0x5A36 JUMP JUMPDEST PUSH2 0x13C7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3DF SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6245 JUMP JUMPDEST PUSH2 0x689 PUSH2 0x13E6 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x756 CALLDATASIZE PUSH1 0x4 PUSH2 0x58CF JUMP JUMPDEST PUSH2 0x140A JUMP JUMPDEST PUSH2 0x5EC PUSH2 0x769 CALLDATASIZE PUSH1 0x4 PUSH2 0x5A9D JUMP JUMPDEST PUSH2 0x1495 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x77C CALLDATASIZE PUSH1 0x4 PUSH2 0x5857 JUMP JUMPDEST PUSH2 0x15B8 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x15F5 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x15FB JUMP JUMPDEST PUSH2 0x418 PUSH2 0x79F CALLDATASIZE PUSH1 0x4 PUSH2 0x5A85 JUMP JUMPDEST PUSH2 0x169D JUMP JUMPDEST PUSH2 0x42D PUSH2 0x16A8 JUMP JUMPDEST PUSH2 0x3D2 PUSH2 0x16D4 JUMP JUMPDEST PUSH2 0x42D PUSH2 0x7C2 CALLDATASIZE PUSH1 0x4 PUSH2 0x593F JUMP JUMPDEST PUSH2 0x16DE JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x80 ADD MLOAD PUSH2 0x7F4 PUSH2 0x7D9 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x809 PUSH2 0x7FF PUSH2 0xCF8 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x811 PUSH2 0x19B7 JUMP JUMPDEST PUSH2 0x823 DUP5 DUP5 PUSH2 0x81E PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x19EB JUMP JUMPDEST PUSH1 0x60 PUSH2 0x82D PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x83E JUMPI INVALID JUMPDEST EQ PUSH2 0x855 JUMPI PUSH2 0x850 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1A9C JUMP JUMPDEST PUSH2 0x862 JUMP JUMPDEST PUSH2 0x862 DUP8 DUP8 DUP8 DUP8 DUP6 PUSH2 0x1AF5 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x1B30 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x908 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x908 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x8EB JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91F CALLER DUP5 DUP5 PUSH2 0x1B37 JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x931 PUSH2 0x1B9F JUMP JUMPDEST PUSH2 0x939 PUSH2 0x9C1 JUMP JUMPDEST ISZERO PUSH2 0x969 JUMPI PUSH2 0x969 PUSH32 0x0 PUSH1 0x0 PUSH2 0x1C0C JUMP JUMPDEST PUSH2 0x994 PUSH32 0x0 PUSH1 0x2 PUSH2 0x1C0C JUMP JUMPDEST PUSH2 0x9BF PUSH32 0x0 PUSH1 0x3 PUSH2 0x1C0C JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x9F8 PUSH2 0x1DFC JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0xA03 PUSH2 0x1E19 JUMP JUMPDEST SWAP2 POP PUSH2 0xA0D PUSH2 0x1E3D JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x877 PUSH2 0x1A03 JUMP JUMPDEST DUP1 PUSH1 0xE PUSH1 0x0 DUP5 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xA2F JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xA3A JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xA87 PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xAA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xACC JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xB0F JUMPI PUSH2 0xAE3 DUP2 PUSH2 0x1E61 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xAEF JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0xAD2 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB23 DUP6 CALLER PUSH2 0x15B8 JUMP JUMPDEST SWAP1 POP PUSH2 0xB47 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0xB3F JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xB52 DUP6 DUP6 DUP6 PUSH2 0x1F8A JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0xB6D JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0xB7F JUMPI PUSH2 0xB7F DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1B37 JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB95 DUP3 PUSH2 0x206A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBA2 DUP3 PUSH2 0x1E61 JUMP JUMPDEST SWAP1 POP PUSH2 0xBBB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xBD3 SWAP1 PUSH2 0x21F8 JUMP JUMPDEST SWAP1 POP PUSH2 0xBE0 DUP4 DUP4 DUP4 PUSH2 0x2207 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0xBEE PUSH2 0x221D JUMP JUMPDEST PUSH2 0xBFE PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xC0F PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC1B DUP3 TIMESTAMP PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0xC2F PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xC3A PUSH2 0x2263 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0xC4B DUP2 ISZERO PUSH2 0x13E PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC59 DUP7 PUSH2 0x3E8 PUSH2 0x1774 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0xC88 JUMPI PUSH2 0xC83 PUSH2 0xC74 PUSH3 0x15180 DUP7 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0xC7E DUP5 DUP9 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x22D7 JUMP JUMPDEST PUSH2 0xCA2 JUMP JUMPDEST PUSH2 0xCA2 PUSH2 0xC98 PUSH3 0x15180 DUP5 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0xC7E DUP7 DUP9 PUSH2 0x1774 JUMP JUMPDEST SWAP1 POP PUSH2 0xCB4 PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xCC0 DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x230A JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x16D4 JUMP JUMPDEST PUSH2 0xCE4 PUSH2 0x221D JUMP JUMPDEST PUSH2 0xCEC PUSH2 0x2359 JUMP JUMPDEST PUSH2 0xCF5 DUP2 PUSH2 0x236C JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x91F SWAP2 DUP6 SWAP1 PUSH2 0xD52 SWAP1 DUP7 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0x1B37 JUMP JUMPDEST PUSH1 0xC SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xD6C DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x199A JUMP JUMPDEST SWAP3 POP PUSH2 0xD7B DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x199A JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xD8A PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x0 PUSH2 0x23F7 JUMP JUMPDEST PUSH2 0xD9C PUSH2 0x221D JUMP JUMPDEST PUSH2 0xDA4 PUSH2 0x2359 JUMP JUMPDEST PUSH2 0xDAE DUP3 DUP3 PUSH2 0x2488 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xDBA PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x1 PUSH2 0x2596 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0xDD2 DUP4 PUSH2 0x206A JUMP JUMPDEST PUSH2 0x25ED JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0xD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x908 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x908 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x877 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x199A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xE69 DUP7 MLOAD PUSH2 0xE64 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x2640 JUMP JUMPDEST PUSH2 0xE7E DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x264D PUSH2 0x266F PUSH2 0x26D8 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0xE9C PUSH2 0x286F JUMP JUMPDEST SWAP4 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP SWAP3 POP SWAP1 POP PUSH1 0x0 PUSH2 0xEB4 DUP6 DUP6 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xEC0 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP5 DUP3 EQ PUSH2 0xEDB JUMPI PUSH2 0xED6 DUP3 DUP10 PUSH2 0x295F JUMP JUMPDEST PUSH2 0xEDD JUMP JUMPDEST DUP4 JUMPDEST SWAP1 POP PUSH2 0xEE9 DUP2 DUP5 PUSH2 0x2AC1 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0xF03 PUSH2 0x2263 JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF1B PUSH2 0x139B JUMP JUMPDEST ISZERO PUSH2 0xF28 JUMPI POP PUSH1 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH2 0xF74 JUMPI PUSH2 0xF35 PUSH2 0x9C1 JUMP JUMPDEST PUSH2 0xF5F JUMPI PUSH32 0x0 PUSH2 0xF6D JUMP JUMPDEST PUSH1 0xB SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xF9C JUMPI POP PUSH1 0xB SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xFCC JUMPI POP PUSH1 0xB SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xDDA JUMP JUMPDEST PUSH2 0xDDA PUSH2 0x1BB PUSH2 0x2B12 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1001 PUSH2 0x7D9 PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x100C PUSH2 0x7FF PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1019 DUP7 PUSH2 0x2B3C JUMP JUMPDEST ISZERO PUSH2 0x1041 JUMPI PUSH2 0x1026 PUSH2 0x2B6B JUMP JUMPDEST PUSH2 0x1038 DUP10 PUSH2 0x1032 PUSH2 0x9E5 JUMP JUMPDEST DUP9 PUSH2 0x2B7E JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0x1093 JUMP JUMPDEST PUSH2 0x1049 PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1053 PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH2 0x105F DUP11 DUP3 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x1083 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x106F PUSH2 0x139B JUMP JUMPDEST PUSH2 0x1079 JUMPI DUP14 PUSH2 0x107C JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x264D JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1091 DUP4 DUP3 PUSH2 0x266F JUMP JUMPDEST POP JUMPDEST PUSH2 0x109D DUP12 DUP3 PUSH2 0x2C2B JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x10B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10E0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH1 0xF PUSH1 0x0 DUP5 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1106 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x1111 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x12B7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA PUSH1 0x0 PUSH2 0x1146 DUP9 PUSH2 0x206A JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x1167 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1170 DUP2 PUSH2 0x2C35 JUMP JUMPDEST SWAP5 POP PUSH2 0x117B DUP2 PUSH2 0x2C43 JUMP JUMPDEST SWAP4 POP PUSH2 0x1186 DUP2 PUSH2 0x2C51 JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x11BF PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x1 PUSH2 0x23F7 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x11FE SWAP3 SWAP2 SWAP1 PUSH2 0x6011 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1228 PUSH2 0x286F JUMP JUMPDEST POP POP SWAP3 POP SWAP3 POP POP PUSH2 0x1242 DUP2 DUP4 PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x125A DUP7 MLOAD PUSH2 0xE64 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0xE7E DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x2C73 PUSH2 0x2C84 PUSH2 0x26D8 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x908 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x8DD JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x908 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1340 CALLER DUP6 PUSH2 0x15B8 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x135A JUMPI PUSH2 0x1355 CALLER DUP6 PUSH1 0x0 PUSH2 0x1B37 JUMP JUMPDEST PUSH2 0x1367 JUMP JUMPDEST PUSH2 0x1367 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1B37 JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91F CALLER DUP5 DUP5 PUSH2 0x1F8A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x2CED JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0x1396 DUP4 PUSH2 0x206A JUMP JUMPDEST PUSH2 0x2D67 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x877 SWAP1 PUSH1 0xFF PUSH2 0x2D8F JUMP JUMPDEST PUSH2 0x13B4 PUSH2 0x221D JUMP JUMPDEST PUSH2 0x9BF PUSH1 0x0 PUSH2 0x2596 JUMP JUMPDEST PUSH2 0xCF5 DUP2 PUSH2 0x2D99 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x13D7 DUP6 PUSH2 0x2DED JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP SWAP2 SWAP4 POP SWAP2 SWAP4 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x1439 DUP13 PUSH2 0x12B7 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x144F SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x616B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1480 DUP9 DUP3 PUSH2 0x1477 DUP8 DUP8 DUP8 PUSH2 0x2E56 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2E95 JUMP JUMPDEST PUSH2 0x148B DUP9 DUP9 DUP9 PUSH2 0x1B37 JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x14A4 PUSH2 0x7D9 PUSH2 0x1293 JUMP JUMPDEST PUSH2 0x14AF PUSH2 0x7FF PUSH2 0xCF8 JUMP JUMPDEST PUSH2 0x14B7 PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x14C1 PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH2 0x14CB PUSH2 0x9E5 JUMP JUMPDEST PUSH2 0x1578 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x14E0 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x2EEC JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x14F9 PUSH2 0x14EF PUSH2 0x1B30 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x150B PUSH1 0x0 PUSH2 0x1506 PUSH2 0x1B30 JUMP JUMPDEST PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x151E DUP12 PUSH2 0x1517 PUSH2 0x1B30 JUMP JUMPDEST DUP5 SUB PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x1528 DUP2 DUP5 PUSH2 0x2C84 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1541 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x156B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x10E8 JUMP JUMPDEST PUSH2 0x1582 DUP9 DUP3 PUSH2 0x2BC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x15AA DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1596 PUSH2 0x139B JUMP JUMPDEST PUSH2 0x15A0 JUMPI DUP14 PUSH2 0x15A3 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x2C73 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x151E DUP12 DUP4 PUSH2 0x2FC5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x15C2 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x15E4 JUMPI POP PUSH1 0x0 NOT PUSH2 0x923 JUMP JUMPDEST PUSH2 0x15EE DUP4 DUP4 PUSH2 0x2FCF JUMP JUMPDEST SWAP1 POP PUSH2 0x923 JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1608 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 PUSH2 0x161E PUSH2 0xCF8 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x163C SWAP3 SWAP2 SWAP1 PUSH2 0x61E4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1668 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x168C SWAP2 SWAP1 PUSH2 0x5F03 JUMP JUMPDEST POP POP SWAP2 POP SWAP2 POP PUSH2 0x1242 DUP2 DUP4 ADD PUSH2 0x2FFA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x300E JUMP JUMPDEST PUSH2 0x16B0 PUSH2 0x221D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x16BB PUSH2 0x2263 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x16CB DUP2 PUSH2 0x140 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0xDAE DUP3 PUSH2 0x3019 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x877 PUSH2 0x3054 JUMP JUMPDEST PUSH2 0x16E6 PUSH2 0x221D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16F1 DUP4 PUSH2 0x206A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x16FE DUP3 PUSH2 0x1E61 JUMP JUMPDEST SWAP1 POP PUSH2 0x1717 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1722 DUP3 DUP3 DUP6 PUSH2 0x2207 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x175C SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xDAE DUP2 PUSH2 0x30F1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1798 DUP5 ISZERO DUP1 PUSH2 0x1791 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x178E JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x19A9 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x17B7 DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x17B0 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x19A9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x17D2 JUMPI PUSH1 0x0 PUSH2 0x17D5 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x17F0 DUP5 DUP5 DUP5 PUSH2 0x316A JUMP JUMPDEST POP DUP3 DUP3 SHL PUSH1 0x0 NOT PUSH1 0x1 DUP4 SHL ADD DUP4 SHL NOT DUP6 AND OR JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x181B DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x19A9 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x185C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1870 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1894 SWAP2 SWAP1 PUSH2 0x5ECA JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x18B1 DUP2 DUP4 DUP6 PUSH2 0x194C JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x18F5 SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0x1912 DUP4 PUSH2 0x2C35 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x17E3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1935 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x19A9 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1946 DUP5 DUP5 DUP5 PUSH2 0x316A JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x195F PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1803 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x197C DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x17E3 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x17E3 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1993 JUMPI DUP2 PUSH2 0x1798 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP2 PUSH2 0xDAE JUMPI PUSH2 0xDAE DUP2 PUSH2 0x2B12 JUMP JUMPDEST PUSH2 0x19BF PUSH2 0x31B0 JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x31B8 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x17B7 DUP2 DUP5 LT DUP1 ISZERO PUSH2 0x19FC JUMPI POP DUP2 DUP4 LT JUMPDEST PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1A0F PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1A2A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1A54 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0xB0F JUMPI PUSH2 0x1A7D PUSH2 0x1A6E DUP3 PUSH2 0x25ED JUMP JUMPDEST PUSH2 0x1A77 DUP4 PUSH2 0x31E0 JUMP JUMPDEST SWAP1 PUSH2 0x32FE JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A89 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1A5A JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1AC6 JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x1ADC JUMPI PUSH2 0x1AD7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x332A JUMP JUMPDEST PUSH2 0x1AE9 JUMP JUMPDEST PUSH2 0x1AE9 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3394 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ DUP1 PUSH2 0x1B1F JUMPI POP PUSH1 0x40 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ JUMPDEST PUSH2 0x1ADC JUMPI PUSH2 0x1AD7 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x3498 JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1B92 SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH2 0x1BA7 PUSH2 0x2359 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1BB6 PUSH2 0x286F JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP POP SWAP4 POP PUSH1 0x0 DUP4 GT ISZERO PUSH2 0x1BD1 JUMPI PUSH2 0x1BD1 DUP4 PUSH2 0x34EF JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BDB PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP4 DUP3 EQ PUSH2 0x1BF6 JUMPI PUSH2 0x1BF1 DUP3 DUP8 PUSH2 0x295F JUMP JUMPDEST PUSH2 0x1BF8 JUMP JUMPDEST DUP3 JUMPDEST SWAP1 POP PUSH2 0x1C04 DUP3 DUP3 PUSH2 0x3500 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x1C54 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C6C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C80 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1CA4 SWAP2 SWAP1 PUSH2 0x5ECA JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x1CF2 JUMPI PUSH2 0x1CB4 DUP2 PUSH2 0x191C JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1DBF JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x1D4F JUMPI PUSH2 0x1D04 DUP2 PUSH2 0x191C JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1DBF JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x1DB4 JUMPI PUSH2 0x1D61 DUP2 PUSH2 0x191C JUMP JUMPDEST PUSH1 0xB DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x1DBF JUMP JUMPDEST PUSH2 0x1DBF PUSH2 0x1BB PUSH2 0x2B12 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x1DEF SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1E06 PUSH2 0x1E3D JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x877 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1E8F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1EBF JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1EEF JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1F1F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1F4F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1F7F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST PUSH2 0xDDA PUSH2 0x135 PUSH2 0x2B12 JUMP JUMPDEST PUSH2 0x1FA1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1FB8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x1FC3 DUP4 DUP4 DUP4 PUSH2 0x17B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x1FE9 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x2018 SWAP1 DUP3 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1B92 SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x20AE JUMPI POP PUSH1 0x0 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x20F0 JUMPI POP PUSH1 0x1 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2132 JUMPI POP PUSH1 0x2 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x2174 JUMPI POP PUSH1 0x3 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x21B6 JUMPI POP PUSH1 0x4 PUSH2 0xDDA JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1F7F JUMPI POP PUSH1 0x5 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x1 PUSH2 0x2212 DUP2 PUSH2 0x353C JUMP JUMPDEST PUSH2 0xBE0 DUP5 DUP5 DUP5 PUSH2 0x1821 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x224C PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x11C9 JUMP JUMPDEST SWAP1 POP PUSH2 0xCF5 PUSH2 0x225B DUP3 CALLER PUSH2 0x35DC JUMP JUMPDEST PUSH2 0x191 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2274 PUSH2 0x36C5 JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x22C7 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x22AB JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x22A1 JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x22C2 JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x22BC JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x22CF JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22E6 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP3 PUSH2 0x22F3 JUMPI POP PUSH1 0x0 PUSH2 0x923 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x22FF JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0x2316 DUP5 DUP5 DUP5 DUP5 PUSH2 0x3724 JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x234B SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6295 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x2364 PUSH2 0x1DFC JUMP JUMPDEST PUSH2 0x192 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x2381 PUSH2 0x2377 PUSH2 0x3763 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x2396 PUSH2 0x238C PUSH2 0x376C JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x23A7 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x17E3 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x23DA SWAP1 DUP4 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x1798 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x19A9 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2417 JUMPI PUSH2 0x2412 PUSH2 0x2408 PUSH2 0x1E19 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x242C JUMP JUMPDEST PUSH2 0x242C PUSH2 0x2422 PUSH2 0x1E3D JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x23DA SWAP1 DUP4 SWAP1 PUSH2 0x6120 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2492 PUSH2 0xCF8 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x249E PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x24CB SWAP3 SWAP2 SWAP1 PUSH2 0x61E4 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x24F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x251B SWAP2 SWAP1 PUSH2 0x5F03 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x2568 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x61CB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2582 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x148B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x25A5 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x17BC JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x25D8 SWAP1 DUP4 SWAP1 PUSH2 0x6120 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xCF5 JUMPI PUSH2 0xCF5 PUSH2 0x3778 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F7 PUSH2 0x1193 JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x260D JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x2630 JUMPI PUSH2 0x262B DUP2 PUSH2 0x2C35 JUMP JUMPDEST PUSH2 0x1798 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xDAE DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x265E PUSH1 0x0 DUP9 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP9 POP SWAP9 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x267E SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0x26B9 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2698 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x26AC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AC1 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x26C5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2681 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x27C7 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x26FC SWAP3 SWAP2 SWAP1 PUSH2 0x6041 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2739 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x273E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x274D JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x27A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x27CF PUSH2 0x19B7 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x27D9 PUSH2 0x1A03 JUMP JUMPDEST SWAP1 POP PUSH2 0x27E5 DUP8 DUP3 PUSH2 0x2BC2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x27FD DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x280F DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1F NOT DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x2881 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x2897 PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28B3 SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28DF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x2907 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x596A JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x291C DUP2 PUSH2 0x2917 PUSH2 0x1A03 JUMP JUMPDEST PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x2925 DUP2 PUSH2 0x38F8 JUMP JUMPDEST SWAP7 POP SWAP5 POP PUSH1 0x0 PUSH2 0x2933 PUSH2 0xD57 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP1 POP PUSH1 0x0 PUSH2 0x2945 DUP9 DUP7 DUP5 PUSH2 0x3931 JUMP JUMPDEST SWAP5 POP SWAP1 POP PUSH2 0x2953 DUP8 DUP3 PUSH2 0x39BE JUMP JUMPDEST SWAP6 POP POP POP POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x29A0 JUMPI PUSH2 0x2996 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x297F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2968 JUMP JUMPDEST POP DUP2 PUSH2 0x29B1 JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x923 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2AAA JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x2A07 JUMPI PUSH2 0x29FD PUSH2 0x29DB DUP4 DUP8 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x29F8 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29EA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x39D6 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x29C6 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x2A60 PUSH2 0x2A3F PUSH2 0x2A39 PUSH2 0x2A1E DUP5 DUP11 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x2A33 PUSH2 0x2A2B DUP9 DUP14 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x39D6 JUMP JUMPDEST SWAP1 PUSH2 0x23E5 JUMP JUMPDEST DUP7 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x29F8 PUSH2 0x2A4F DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x2A33 PUSH2 0x2A2B PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1774 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2A88 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2A83 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0x2AA1 JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x2AA1 JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x923 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29B9 JUMP JUMPDEST POP PUSH2 0x2AB6 PUSH2 0x141 PUSH2 0x2B12 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2AD0 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP3 PUSH2 0x2ADD JUMPI POP PUSH1 0x0 PUSH2 0x923 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2B00 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2AF7 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x19A9 JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x2B09 JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0xCF5 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x39F6 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xDD7 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2B61 SWAP2 SWAP1 PUSH2 0x5F43 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x2B76 PUSH2 0x139B JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH2 0x2B8F DUP8 PUSH2 0x38F8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x2BA2 DUP4 DUP6 DUP10 PUSH2 0x3A71 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP2 PUSH2 0x2BB2 DUP3 PUSH1 0x0 PUSH2 0x3A9D JUMP JUMPDEST SWAP6 POP SWAP6 POP POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2BD1 SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0x2C0C DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2BEB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2BFF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x32FE JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2C18 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2BD4 JUMP JUMPDEST PUSH2 0xDAE DUP3 DUP3 PUSH2 0x3B5A JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 DUP3 PUSH1 0x60 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH1 0x60 DUP1 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2C5D DUP4 PUSH2 0x21F8 JUMP JUMPDEST SWAP2 POP PUSH2 0x2C6C DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x199A JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x265E PUSH1 0x1 DUP9 DUP7 DUP7 PUSH2 0x384A JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2C93 SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0x2CCE DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2CAD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2CC1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3C26 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2CDA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2C96 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF7 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2D2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2D43 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x877 SWAP2 SWAP1 PUSH2 0x5B80 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH2 0x2DA1 PUSH2 0x1193 JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x2DAD JUMPI PUSH2 0xCF5 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0xDAE JUMPI PUSH1 0x0 DUP1 PUSH2 0x2DCE DUP4 PUSH2 0x2C51 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0xBE0 JUMPI PUSH2 0xBE0 DUP5 PUSH2 0x2DE7 DUP7 PUSH2 0x1E61 JUMP JUMPDEST DUP5 PUSH2 0x2207 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x2DFF PUSH2 0xD57 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2E14 DUP11 DUP7 DUP7 PUSH2 0x3C74 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 PUSH2 0x2E24 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP7 DUP3 EQ PUSH2 0x2E3F JUMPI PUSH2 0x2E3A DUP3 DUP6 PUSH2 0x295F JUMP JUMPDEST PUSH2 0x2E41 JUMP JUMPDEST DUP3 JUMPDEST SWAP5 SWAP13 SWAP4 SWAP12 POP SWAP1 SWAP10 POP SWAP3 SWAP8 POP SWAP1 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2EA0 DUP6 PUSH2 0x3CCC JUMP JUMPDEST SWAP1 POP PUSH2 0x2EB6 PUSH2 0x2EB0 DUP8 DUP4 DUP8 PUSH2 0x3CE8 JUMP JUMPDEST DUP4 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x2EC5 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x19A9 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2EFB DUP5 PUSH2 0x3D97 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F16 PUSH1 0x0 DUP3 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2F0E JUMPI INVALID JUMPDEST EQ PUSH1 0xCE PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2F21 DUP6 PUSH2 0x3DAD JUMP JUMPDEST SWAP1 POP PUSH2 0x2F2F DUP2 MLOAD DUP8 MLOAD PUSH2 0x2640 JUMP JUMPDEST PUSH2 0x2F39 DUP2 DUP8 PUSH2 0x2BC2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F43 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x60 PUSH2 0x2F51 DUP4 PUSH2 0x3DC3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2F5F DUP4 DUP4 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0x0 PUSH2 0x2F7C PUSH14 0x8000000000000000000000000000 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0x2F88 DUP14 DUP3 PUSH2 0x2FC5 JUMP JUMPDEST DUP1 DUP7 PUSH2 0x2F92 PUSH2 0x1193 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F9C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x2FB2 DUP6 DUP5 PUSH2 0x3500 JUMP JUMPDEST POP SWAP13 SWAP4 SWAP12 POP SWAP3 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xDAE DUP3 DUP3 PUSH2 0x3E65 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x3008 PUSH2 0x9E5 JUMP JUMPDEST SWAP1 PUSH2 0x180B JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x3EF2 JUMP JUMPDEST PUSH2 0x3025 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x3724 JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x23DA SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x30C1 PUSH2 0x3EFD JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x30D6 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x619F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x3100 JUMPI PUSH2 0xCF5 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x310F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x17B7 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3137 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x3160 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x19A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x3120 JUMP JUMPDEST PUSH2 0x3179 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x31A1 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x19FC JUMPI POP PUSH2 0x3197 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1984 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x17B7 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x9BF PUSH2 0x2359 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x31C2 PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDAE JUMPI PUSH2 0x31D8 DUP2 PUSH2 0x2D99 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x31C7 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x320E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x323E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x326E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x329E JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x32CE JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1F7F JUMPI POP PUSH32 0x0 PUSH2 0xDDA JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x3318 DUP5 ISZERO DUP1 PUSH2 0x1791 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x178E JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3336 DUP6 DUP4 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x3357 DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x334A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F01 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x336A DUP8 DUP8 DUP8 DUP8 PUSH2 0x3F0D JUMP JUMPDEST SWAP1 POP PUSH2 0x3389 DUP2 DUP5 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x337C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3F2F JUMP JUMPDEST SWAP1 POP PUSH2 0x862 DUP2 PUSH2 0x3F3B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 DUP8 MLOAD PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x33A5 JUMPI INVALID JUMPDEST EQ SWAP1 POP PUSH2 0x33B2 DUP7 DUP5 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x33D2 DUP8 PUSH1 0x60 ADD MLOAD DUP5 DUP4 PUSH2 0x33C6 JUMPI DUP7 PUSH2 0x33C8 JUMP JUMPDEST DUP8 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x334A JUMPI INVALID JUMPDEST DUP8 PUSH1 0x60 ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x33EB DUP11 PUSH2 0x2DED JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x33FE PUSH2 0x1193 JUMP JUMPDEST DUP11 EQ PUSH2 0x3424 JUMPI PUSH2 0x341F DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3417 DUP15 PUSH2 0x3F57 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3F8C JUMP JUMPDEST PUSH2 0x343F JUMP JUMPDEST PUSH2 0x343F DUP8 DUP15 PUSH1 0x60 ADD MLOAD DUP8 PUSH2 0x3437 DUP16 PUSH2 0x3F57 JUMP JUMPDEST DUP9 DUP12 DUP10 PUSH2 0x3FC5 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x3450 DUP5 DUP7 DUP6 DUP10 DUP6 PUSH2 0x3FE9 JUMP JUMPDEST DUP7 PUSH2 0x346A JUMPI PUSH2 0x3465 DUP3 DUP11 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x337C JUMPI INVALID JUMPDEST PUSH2 0x3487 JUMP JUMPDEST PUSH2 0x3487 DUP3 DUP11 DUP13 DUP2 MLOAD DUP2 LT PUSH2 0x347A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4069 JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x34A7 DUP7 PUSH1 0x60 ADD MLOAD PUSH2 0x4075 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x34B6 DUP6 DUP4 PUSH2 0x2BC2 JUMP JUMPDEST PUSH2 0x34CA DUP7 PUSH1 0x60 ADD MLOAD DUP4 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x334A JUMPI INVALID JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x0 PUSH2 0x34DD DUP8 DUP8 DUP8 DUP8 PUSH2 0x4096 JUMP JUMPDEST SWAP1 POP PUSH2 0x862 DUP2 DUP5 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x347A JUMPI INVALID JUMPDEST PUSH2 0xCF5 PUSH2 0x34FA PUSH2 0x13E6 JUMP JUMPDEST DUP3 PUSH2 0x2FC5 JUMP JUMPDEST PUSH2 0x350D DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x351A DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1939 JUMP JUMPDEST OR PUSH1 0xC SSTORE PUSH2 0xDAE PUSH2 0x40AE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3535 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x19A9 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0xE PUSH1 0x0 DUP3 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x354C JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3557 JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCF5 JUMPI PUSH2 0xCF5 PUSH1 0xF PUSH1 0x0 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x3583 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x358E JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x0 EQ PUSH2 0x35D3 JUMPI PUSH1 0xF PUSH1 0x0 DUP4 PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x35B4 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0x35BF JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x35D7 JUMP JUMPDEST PUSH2 0x1B7 JUMPDEST PUSH2 0x2B12 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x35FB PUSH2 0x126F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x3616 JUMPI POP PUSH2 0x3616 DUP4 PUSH2 0x300E JUMP JUMPDEST ISZERO PUSH2 0x363E JUMPI PUSH2 0x3623 PUSH2 0x126F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x923 JUMP JUMPDEST PUSH2 0x3646 PUSH2 0x2CED JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x3675 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x614C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x368D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x36A1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15EE SWAP2 SWAP1 PUSH2 0x5A69 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x36E4 PUSH1 0x0 PUSH1 0x40 PUSH1 0x9 SLOAD PUSH2 0x199A SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP5 POP PUSH2 0x36F6 SWAP1 PUSH1 0x40 DUP1 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP4 POP PUSH2 0x3709 SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x199A JUMP JUMPDEST PUSH1 0x9 SLOAD SWAP1 SWAP3 POP PUSH2 0x371C SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x199A JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x3731 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x373E DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x374A DUP6 PUSH1 0x40 DUP1 PUSH2 0x1939 JUMP JUMPDEST PUSH2 0x3757 DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x1939 JUMP JUMPDEST OR OR OR PUSH1 0x9 SSTORE POP POP POP POP JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3782 PUSH2 0x1293 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xF94D4668 PUSH2 0x3798 PUSH2 0xCF8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x37B4 SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x37CC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x37E0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x3808 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x596A JUMP JUMPDEST POP SWAP2 POP POP PUSH2 0x3818 DUP2 PUSH2 0x2917 PUSH2 0x1A03 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3823 DUP3 PUSH2 0x3DC3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x382F PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x383E DUP3 DUP5 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH2 0xBE0 DUP3 DUP3 PUSH2 0x3500 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x385E DUP10 PUSH2 0x2DED JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP PUSH2 0x56DB DUP11 PUSH2 0x3876 JUMPI PUSH2 0x40E4 PUSH2 0x387A JUMP JUMPDEST PUSH2 0x4179 JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x60 PUSH2 0x3892 DUP7 DUP7 DUP10 DUP8 DUP16 DUP16 DUP10 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x56DB DUP14 PUSH2 0x38A6 JUMPI PUSH2 0x180B PUSH2 0x38AA JUMP JUMPDEST PUSH2 0x23E5 JUMPDEST SWAP1 POP PUSH2 0x38B7 DUP8 DUP4 DUP4 PUSH2 0x41F7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x38C7 DUP10 DUP6 DUP5 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x38D6 DUP8 DUP10 DUP9 DUP13 DUP6 PUSH2 0x3FE9 JUMP JUMPDEST DUP4 PUSH2 0x38E2 DUP5 PUSH1 0x0 PUSH2 0x3A9D JUMP JUMPDEST SWAP11 POP SWAP11 POP POP POP POP POP POP POP POP POP POP SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x391F DUP4 PUSH2 0x3908 PUSH2 0x1193 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3912 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2FFA JUMP JUMPDEST PUSH2 0x3928 DUP5 PUSH2 0x3DC3 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x3943 DUP9 DUP9 PUSH2 0x426B JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x3959 JUMPI PUSH1 0x0 PUSH2 0x395D JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x396F JUMPI PUSH1 0x0 PUSH2 0x3973 JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x398E PUSH2 0x3984 PUSH1 0x0 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1A77 DUP6 DUP8 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x39A9 PUSH2 0x399F PUSH1 0x2 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1A77 DUP6 DUP9 PUSH2 0x2AC1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 PUSH2 0x39CD DUP5 DUP5 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x29F8 DUP5 PUSH2 0x42ED JUMP JUMPDEST PUSH1 0x0 PUSH2 0x39E5 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x39EE JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x3A80 DUP5 PUSH2 0x4313 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3A8F DUP8 DUP8 DUP5 PUSH2 0x4329 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3ABA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3AE4 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3B53 JUMPI PUSH2 0x3AFB PUSH2 0x1193 JUMP JUMPDEST DUP2 EQ PUSH2 0x3B32 JUMPI DUP4 PUSH2 0x3B0A PUSH2 0x1193 JUMP JUMPDEST DUP3 LT PUSH2 0x3B19 JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x3B1B JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3B25 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3B34 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3B40 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3AEA JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x3B71 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x3B7D DUP3 PUSH1 0x0 DUP4 PUSH2 0x17B7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3BA3 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3BD6 PUSH2 0x3BD1 DUP3 PUSH2 0x3BCB PUSH2 0x9E5 JUMP JUMPDEST SWAP1 PUSH2 0x43D8 JUMP JUMPDEST PUSH2 0x43E6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x3C1A SWAP2 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3C35 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x19A9 JUMP JUMPDEST DUP3 PUSH2 0x3C42 JUMPI POP PUSH1 0x0 PUSH2 0x923 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x3C5C SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2AF7 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x3C68 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x923 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x3C86 DUP9 PUSH2 0x38F8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x3C98 DUP4 DUP11 DUP11 PUSH2 0x3931 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x3CA8 DUP6 DUP5 PUSH2 0x39BE JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x3CB9 JUMPI PUSH2 0x3CB9 DUP2 PUSH2 0x34EF JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CD6 PUSH2 0x3054 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x11FE SWAP3 SWAP2 SWAP1 PUSH2 0x6051 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3CFA DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x3D33 SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x61FB JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3D55 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH1 0x1F NOT ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3D8B JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD7 SWAP2 SWAP1 PUSH2 0x5CF5 JUMP JUMPDEST PUSH1 0x60 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5D10 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3DE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x3E0B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3B53 JUMPI DUP4 PUSH2 0x3E23 PUSH2 0x1193 JUMP JUMPDEST DUP3 LT PUSH2 0x3E32 JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3E34 JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3E3E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3E52 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3E11 JUMP JUMPDEST PUSH2 0x3E71 PUSH1 0x0 DUP4 DUP4 PUSH2 0x17B7 JUMP JUMPDEST PUSH2 0x3E80 PUSH2 0x3BD1 DUP3 PUSH2 0x2A33 PUSH2 0x9E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3EA3 SWAP1 DUP3 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x3C1A SWAP1 DUP6 SWAP1 PUSH2 0x6143 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 DUP3 PUSH2 0x43EB JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH2 0x32FE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x3F19 DUP2 PUSH2 0x353C JUMP JUMPDEST PUSH2 0x3F25 DUP7 DUP7 DUP7 DUP7 PUSH2 0x4427 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH2 0x3C26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH2 0x3F50 PUSH2 0x3F4B PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x42ED JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x3C26 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3F6E PUSH2 0x3F64 PUSH2 0x1193 JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH2 0x3F76 PUSH2 0x1193 JUMP JUMPDEST DUP3 LT PUSH2 0x1935 JUMPI PUSH2 0x3F87 DUP3 PUSH1 0x1 PUSH2 0x180B JUMP JUMPDEST PUSH2 0xDD7 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3FA7 JUMPI PUSH2 0x3FA2 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x443B JUMP JUMPDEST PUSH2 0x3FB5 JUMP JUMPDEST PUSH2 0x3FB5 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4512 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP9 PUSH2 0x3FDB JUMPI PUSH2 0x3FA2 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x4573 JUMP JUMPDEST PUSH2 0x3FB5 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x45D9 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3FF5 DUP7 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4003 DUP4 DUP6 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4011 DUP7 DUP4 PUSH2 0x32FE JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x405F JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x403B PUSH2 0x4035 DUP4 PUSH2 0x4030 DUP5 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1774 JUMP JUMPDEST DUP7 PUSH2 0x39D6 JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x405C JUMPI PUSH1 0x0 PUSH2 0x404F DUP8 DUP4 PUSH2 0x39BE JUMP JUMPDEST SWAP1 POP PUSH2 0x405A DUP2 PUSH2 0x34EF JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x148B DUP9 DUP5 PUSH2 0x3500 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH2 0x2AC1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x408A PUSH2 0x4083 PUSH2 0xE40 JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH2 0x1798 DUP4 DUP3 PUSH2 0x180B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x40A2 DUP2 PUSH2 0x353C JUMP JUMPDEST PUSH2 0x3F25 DUP7 DUP7 DUP7 DUP7 PUSH2 0x46C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x40B8 PUSH2 0x19C7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDAE JUMPI PUSH2 0x40CE DUP2 PUSH2 0x46D8 JUMP JUMPDEST ISZERO PUSH2 0x40DC JUMPI PUSH2 0x40DC DUP2 PUSH2 0x4707 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x40BD JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x40F3 DUP5 PUSH2 0x4735 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x4103 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4121 JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x474B JUMP JUMPDEST SWAP3 POP SWAP3 POP POP PUSH2 0x416E JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x412F JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4140 JUMPI PUSH2 0x4117 DUP8 DUP11 DUP7 PUSH2 0x47AA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x414E JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x4161 JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x47C8 JUMP JUMPDEST PUSH2 0x416C PUSH2 0x150 PUSH2 0x2B12 JUMP JUMPDEST POP JUMPDEST SWAP7 POP SWAP7 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x4188 DUP5 PUSH2 0x3D97 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x4198 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x41AC JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP10 DUP10 PUSH2 0x4869 JUMP JUMPDEST PUSH1 0x3 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x41BA JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x41CB JUMPI PUSH2 0x4117 DUP8 DUP11 DUP7 PUSH2 0x48B8 JUMP JUMPDEST PUSH1 0x2 DUP2 PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x41D9 JUMPI INVALID JUMPDEST EQ ISZERO PUSH2 0x41EC JUMPI PUSH2 0x4117 DUP8 DUP8 DUP11 DUP13 DUP9 PUSH2 0x48D6 JUMP JUMPDEST PUSH2 0x416C PUSH2 0x136 PUSH2 0x2B12 JUMP JUMPDEST DUP3 MLOAD DUP3 MLOAD PUSH2 0x4206 SWAP1 DUP3 SWAP1 PUSH2 0x2640 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x4264 JUMPI PUSH2 0x4245 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4220 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4234 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4251 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4209 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x4284 DUP5 PUSH2 0x427F DUP8 PUSH1 0x1 PUSH2 0x4950 JUMP JUMPDEST PUSH2 0x295F JUMP JUMPDEST SWAP3 POP PUSH2 0x428E PUSH2 0x4A59 JUMP JUMPDEST ISZERO PUSH2 0x42A7 JUMPI PUSH2 0x429D DUP5 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x42E6 JUMP JUMPDEST PUSH2 0x42AF PUSH2 0x4A7D JUMP JUMPDEST ISZERO PUSH2 0x42C8 JUMPI DUP3 SWAP2 POP PUSH2 0x42C1 DUP5 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH2 0x42E6 JUMP JUMPDEST PUSH2 0x42D7 DUP5 PUSH2 0x427F DUP8 PUSH1 0x0 PUSH2 0x4950 JUMP JUMPDEST SWAP2 POP PUSH2 0x42E3 DUP5 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x4305 JUMPI PUSH1 0x0 PUSH2 0xDD7 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5F5F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x4337 DUP4 DUP6 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x437B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x43CF JUMPI PUSH2 0x43B0 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x439A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x32FE SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x43BC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x4381 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 DUP4 DUP4 PUSH1 0x1 PUSH2 0x3526 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4416 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xDD7 JUMPI POP PUSH2 0xDD7 DUP3 PUSH2 0x4AA1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AEC PUSH1 0x0 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x4B0F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4458 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4482 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4492 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x44B5 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x44B0 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4B81 JUMP JUMPDEST SWAP1 POP PUSH2 0x44DD DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x180B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x44E9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4500 DUP8 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP2 SWAP12 SWAP2 SWAP11 POP SWAP1 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x452D DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x4528 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4E11 JUMP JUMPDEST SWAP1 POP PUSH2 0x453F DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x454B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4562 DUP7 DUP12 PUSH2 0x180B JUMP JUMPDEST SWAP2 SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x458E DUP7 DUP10 DUP10 DUP13 DUP10 DUP10 PUSH2 0x4589 PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4F00 JUMP JUMPDEST SWAP1 POP PUSH2 0x45B6 DUP2 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP9 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x45C2 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4562 DUP7 DUP12 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x60 DUP8 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x45F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4620 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP9 DUP2 DUP9 DUP2 MLOAD DUP2 LT PUSH2 0x4630 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x4653 DUP8 DUP11 DUP5 DUP10 DUP10 PUSH2 0x464E PUSH2 0xE40 JUMP JUMPDEST PUSH2 0x4FCD JUMP JUMPDEST SWAP1 POP PUSH2 0x4665 DUP11 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x4671 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x0 PUSH2 0x4500 DUP8 DUP4 PUSH2 0x23E5 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x46A2 DUP5 ISZERO DUP1 PUSH2 0x1791 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x178E JUMPI INVALID JUMPDEST DUP1 PUSH2 0x46B1 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x923 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH1 0x0 NOT DUP3 ADD PUSH2 0x3C68 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AEC PUSH1 0x1 DUP7 PUSH1 0x60 ADD MLOAD DUP7 DUP7 DUP7 PUSH2 0x4B0F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xDD7 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2D8F JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x471F DUP2 PUSH2 0x1904 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0xA PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0xDD7 SWAP2 SWAP1 PUSH2 0x5BEA JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x475B DUP6 PUSH2 0x524E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x476B DUP3 MLOAD DUP9 MLOAD PUSH2 0x2640 JUMP JUMPDEST PUSH2 0x4778 DUP3 PUSH2 0x2917 DUP9 PUSH2 0x3DC3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x478A DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x44B0 PUSH2 0xE40 JUMP JUMPDEST SWAP1 POP PUSH2 0x479A DUP3 DUP3 GT ISZERO PUSH1 0xCF PUSH2 0x19A9 JUMP JUMPDEST SWAP11 SWAP2 SWAP10 POP SWAP1 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x47B9 DUP5 PUSH2 0x5271 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3A8F DUP7 DUP9 DUP5 PUSH2 0x4329 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x47D8 DUP6 PUSH2 0x5287 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x47EA DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4804 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x482E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x4842 DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x4528 PUSH2 0xE40 JUMP JUMPDEST DUP2 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x484E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP2 SWAP10 SWAP2 SWAP9 POP SWAP1 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x4879 DUP6 PUSH2 0x529E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x4889 DUP8 MLOAD DUP4 MLOAD PUSH2 0x2640 JUMP JUMPDEST PUSH2 0x4896 DUP3 PUSH2 0x2917 DUP9 PUSH2 0x3DC3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x48A8 DUP10 DUP10 DUP6 DUP15 DUP15 PUSH2 0x464E PUSH2 0xE40 JUMP JUMPDEST SWAP1 POP PUSH2 0x479A DUP3 DUP3 LT ISZERO PUSH1 0xD0 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x48C7 DUP5 PUSH2 0x52B6 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x3A8F DUP7 DUP4 DUP10 PUSH2 0x52CC JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH2 0x48E6 DUP6 PUSH2 0x5368 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x48F8 DUP7 MLOAD DUP3 LT PUSH1 0x64 PUSH2 0x19A9 JUMP JUMPDEST PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4912 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x493C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH2 0x4842 DUP9 DUP9 DUP5 DUP7 DUP15 DUP15 PUSH2 0x4589 PUSH2 0xE40 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x496D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4997 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x4A50 JUMPI PUSH1 0x0 PUSH2 0x49AF PUSH2 0x1193 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x49BC JUMPI DUP2 PUSH2 0x49C1 JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x49CC DUP2 PUSH2 0x2D67 JUMP JUMPDEST DUP1 PUSH2 0x49E3 JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x49E3 JUMPI POP PUSH2 0x49E3 DUP2 PUSH2 0x46D8 JUMP JUMPDEST PUSH2 0x4A00 JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x49F3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4A30 JUMP JUMPDEST PUSH2 0x4A30 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A0F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0xA PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x537F JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4A3C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x499D JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4ACC PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x4B00 JUMPI POP PUSH2 0x4AFD PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xDD7 JUMPI POP PUSH2 0xDD7 DUP3 PUSH2 0x539A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x4B1C DUP6 PUSH2 0x3DC3 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B29 DUP6 PUSH2 0x3F57 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B36 DUP6 PUSH2 0x3F57 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4B42 PUSH2 0x2263 JUMP JUMPDEST POP SWAP1 POP PUSH1 0x0 PUSH2 0x4B51 DUP3 DUP7 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP DUP11 ISZERO PUSH2 0x4B73 JUMPI PUSH2 0x4B67 DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x5408 JUMP JUMPDEST SWAP6 POP POP POP POP POP POP PUSH2 0x1AEC JUMP JUMPDEST PUSH2 0x4B67 DUP3 DUP7 DUP7 DUP7 DUP15 DUP7 PUSH2 0x5485 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4BBF JUMPI PUSH2 0x4BB5 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x23E5 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4B86 JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4BDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4C04 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x4CD1 JUMPI PUSH1 0x0 PUSH2 0x4C3C DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4C26 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3C26 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4C7E DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4C4D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4C78 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4C64 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x3C26 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4C8A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x4CC6 PUSH2 0x4CBF DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x4CA9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x4688 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x4C0B JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x4CEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x4D16 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x4DE1 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4D33 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x4D9A JUMPI PUSH1 0x0 PUSH2 0x4D5C PUSH2 0x4D50 DUP7 PUSH2 0x42ED JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x439A JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D70 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x4D91 PUSH2 0x4D8A DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3C26 JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4DB1 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4DA6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x4DC1 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4DCD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x4D1C JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4DEE DUP13 DUP4 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4DFC DUP3 DUP11 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3487 PUSH2 0x4E0A DUP3 PUSH2 0x42ED JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x4688 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4E2C DUP5 PUSH2 0x4E26 DUP8 PUSH2 0x4C78 DUP2 DUP12 PUSH2 0x180B JUMP JUMPDEST SWAP1 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4E3C DUP11 DUP11 DUP5 DUP12 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4E50 DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4E78 JUMPI PUSH2 0x4E6E DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4E56 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4EA1 DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4E8B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2AC1 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4EAE DUP3 PUSH2 0x42ED JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4EBC DUP6 DUP4 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4ECA DUP7 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0x4EEB PUSH2 0x4EE4 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x32FE JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x4F15 DUP5 PUSH2 0x4E26 DUP8 PUSH2 0x4C78 DUP2 DUP12 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F25 DUP11 DUP11 DUP5 DUP12 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F4F DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x4F38 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x180B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x4F77 JUMPI PUSH2 0x4F6D DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4F55 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x4F8A DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0x4E8B JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4F97 DUP3 PUSH2 0x42ED JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FA5 DUP6 DUP4 PUSH2 0x4688 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4FB3 DUP7 DUP4 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH2 0x4EEB PUSH2 0x4EE4 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x3C26 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x4FF4 JUMPI PUSH2 0x4FEA DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4B9E JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x4FD2 JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x500F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5039 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x50D3 JUMPI PUSH1 0x0 PUSH2 0x505B DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x4E8B JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x509D DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x506C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x5097 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x5083 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST SWAP1 PUSH2 0x2AC1 JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x50A9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x50C8 PUSH2 0x4CBF DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x439A JUMPI INVALID JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x5040 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x50EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5118 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x51D9 JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x5136 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0x5192 JUMPI PUSH1 0x0 PUSH2 0x515B PUSH2 0x4D50 DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x180B JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x516F DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x5189 PUSH2 0x4D8A DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x32FE JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x51A9 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x519E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x51B9 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x51C5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x511E JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x51E6 DUP13 DUP4 PUSH2 0x295F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x51F4 DUP3 DUP11 PUSH2 0x2AC1 JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0x523F JUMPI PUSH2 0x5232 DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x32FE JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x3F25 JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x3F25 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5C05 JUMP JUMPDEST SWAP1 SWAP6 SWAP1 SWAP5 POP SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5C4A JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5C76 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5D53 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1798 SWAP2 SWAP1 PUSH2 0x5D71 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x52DA DUP5 DUP5 PUSH2 0x3C26 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x52F6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x5320 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x535E JUMPI PUSH2 0x533F DUP4 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x4CA9 JUMPI INVALID JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x534B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x5326 JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x5266 SWAP2 SWAP1 PUSH2 0x5D8D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1798 PUSH2 0x5391 DUP5 PUSH2 0x4030 DUP6 PUSH2 0x2C43 JUMP JUMPDEST PUSH2 0x29F8 DUP5 PUSH2 0x2C35 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x53C5 PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x53F9 JUMPI POP PUSH2 0x53F6 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x11C9 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xDD7 JUMPI POP PUSH2 0xDD7 DUP3 PUSH2 0x56D5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x541A DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x45A0 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x5426 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x5440 DUP9 DUP9 DUP6 DUP9 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x544F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x5464 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x3D8B PUSH1 0x1 PUSH2 0x3008 DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x5497 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x44C7 JUMPI INVALID JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x54A3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x54BD DUP9 DUP9 DUP6 DUP10 PUSH2 0x5518 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x54CC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x54E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x3D8B PUSH1 0x1 PUSH2 0x2A33 DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x5501 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x180B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x5530 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x554B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x55B1 JUMPI PUSH2 0x5596 PUSH2 0x5590 PUSH2 0x5589 DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x557C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1774 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1774 JUMP JUMPDEST DUP9 PUSH2 0x39D6 JUMP JUMPDEST SWAP2 POP PUSH2 0x55A7 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x297F JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x555D JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x55BE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0x55D6 DUP8 DUP9 PUSH2 0x1774 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x5602 PUSH2 0x55F6 PUSH2 0x55EE DUP5 PUSH2 0xC7E DUP10 DUP9 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1774 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0x557C JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x561D PUSH2 0x5616 PUSH2 0x55EE DUP12 DUP10 PUSH2 0x39D6 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0x5639 PUSH2 0x562F DUP7 DUP7 PUSH2 0x23E5 JUMP JUMPDEST PUSH2 0xC7E DUP14 DUP7 PUSH2 0x23E5 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x56B9 JUMPI DUP2 SWAP3 POP PUSH2 0x566E PUSH2 0x565B DUP7 PUSH2 0x2A33 DUP6 DUP7 PUSH2 0x1774 JUMP JUMPDEST PUSH2 0xC7E DUP15 PUSH2 0x3008 DUP9 PUSH2 0x2A33 DUP9 PUSH1 0x2 PUSH2 0x1774 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x5697 JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x5692 JUMPI POP SWAP8 POP PUSH2 0x1803 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x56B1 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x56B1 JUMPI POP SWAP8 POP PUSH2 0x1803 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x563E JUMP JUMPDEST POP PUSH2 0x56C5 PUSH2 0x142 PUSH2 0x2B12 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST INVALID JUMPDEST DUP1 CALLDATALOAD PUSH2 0x923 DUP2 PUSH2 0x6305 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x56F8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x570B PUSH2 0x5706 DUP3 PUSH2 0x62E5 JUMP JUMPDEST PUSH2 0x62BE JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x572C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2AB6 JUMPI DUP2 CALLDATALOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x572F JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x575B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x5769 PUSH2 0x5706 DUP3 PUSH2 0x62E5 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH2 0x578A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2AB6 JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x578D JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x57B9 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x57CF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x57E2 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x62BE JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x57F9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x3 DUP2 LT PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH2 0x923 DUP2 PUSH2 0x6328 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x4 DUP2 LT PUSH2 0x923 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x584C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1798 DUP2 PUSH2 0x6305 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5869 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5874 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5884 DUP2 PUSH2 0x6305 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x58A3 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x58AE DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x58BE DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x58E9 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x58F4 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x5904 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x5922 DUP2 PUSH2 0x6335 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5951 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x595C DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x597E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5995 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP7 ADD SWAP2 POP DUP7 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x59A8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x59B6 PUSH2 0x5706 DUP3 PUSH2 0x62E5 JUMP JUMPDEST DUP1 DUP3 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD SWAP3 POP DUP1 DUP7 ADD DUP12 DUP3 DUP4 DUP8 MUL DUP10 ADD ADD GT ISZERO PUSH2 0x59D6 JUMPI DUP8 DUP9 REVERT JUMPDEST DUP8 SWAP7 POP JUMPDEST DUP5 DUP8 LT ISZERO PUSH2 0x5A01 JUMPI DUP1 MLOAD PUSH2 0x59ED DUP2 PUSH2 0x6305 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 SWAP7 SWAP1 SWAP7 ADD SWAP6 SWAP3 DUP2 ADD SWAP3 DUP2 ADD PUSH2 0x59DA JUMP JUMPDEST POP DUP10 ADD MLOAD SWAP1 SWAP8 POP SWAP4 POP POP POP DUP1 DUP3 GT ISZERO PUSH2 0x5A18 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x5A25 DUP7 DUP3 DUP8 ADD PUSH2 0x574B JUMP JUMPDEST SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A47 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5A5D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x1803 DUP5 DUP3 DUP6 ADD PUSH2 0x56E8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A7A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1798 DUP2 PUSH2 0x631A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5A96 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x5AB7 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x5AC9 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x5AD9 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5AF5 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x5B01 DUP12 DUP4 DUP13 ADD PUSH2 0x56E8 JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5B24 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x5B31 DUP11 DUP3 DUP12 ADD PUSH2 0x57A9 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B51 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1798 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5B91 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1798 DUP2 PUSH2 0x6305 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5BAE JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5BB9 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5BD4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5BE0 DUP6 DUP3 DUP7 ADD PUSH2 0x57A9 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5BFB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1798 DUP4 DUP4 PUSH2 0x5812 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C19 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C23 DUP6 DUP6 PUSH2 0x5812 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5C3E JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5A25 DUP7 DUP3 DUP8 ADD PUSH2 0x574B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5C5C JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5C66 DUP5 DUP5 PUSH2 0x5812 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5C8A JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C94 DUP6 DUP6 PUSH2 0x5812 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD MLOAD SWAP2 POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5CBD JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x5CC8 DUP2 PUSH2 0x6328 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x5884 DUP2 PUSH2 0x631A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5CEA JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x595C DUP2 PUSH2 0x6328 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5D06 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x1798 DUP4 DUP4 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5D22 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5D2C DUP5 DUP5 PUSH2 0x582C JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x5D47 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5BE0 DUP6 DUP3 DUP7 ADD PUSH2 0x574B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5D67 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C23 DUP6 DUP6 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5D83 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x5C66 DUP5 DUP5 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x5DA1 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x5C94 DUP6 DUP6 PUSH2 0x582C JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5DC0 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x5DD7 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP8 ADD SWAP2 POP PUSH2 0x120 DUP1 DUP4 DUP11 SUB SLT ISZERO PUSH2 0x5DED JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x5DF6 DUP2 PUSH2 0x62BE JUMP JUMPDEST SWAP1 POP PUSH2 0x5E02 DUP10 DUP5 PUSH2 0x5821 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x5E11 DUP10 PUSH1 0x20 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x5E23 DUP10 PUSH1 0x40 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x5E53 DUP10 PUSH1 0xC0 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x5E65 DUP10 PUSH1 0xE0 DUP6 ADD PUSH2 0x56DD JUMP JUMPDEST PUSH1 0xE0 DUP3 ADD MSTORE PUSH2 0x100 DUP1 DUP5 ADD CALLDATALOAD DUP4 DUP2 GT ISZERO PUSH2 0x5E7D JUMPI DUP7 DUP8 REVERT JUMPDEST PUSH2 0x5E89 DUP12 DUP3 DUP8 ADD PUSH2 0x57A9 JUMP JUMPDEST DUP3 DUP5 ADD MSTORE POP POP DUP1 SWAP7 POP POP PUSH1 0x20 DUP8 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x5EA6 JUMPI DUP4 DUP5 REVERT JUMPDEST POP PUSH2 0x5EB3 DUP8 DUP3 DUP9 ADD PUSH2 0x56E8 JUMP JUMPDEST SWAP5 SWAP8 SWAP5 SWAP7 POP POP POP POP PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP3 PUSH1 0x60 ADD CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5EDB JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5EF4 JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x5F18 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x5F38 DUP2 PUSH2 0x6305 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x5F54 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1798 DUP2 PUSH2 0x6335 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x5F71 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x5F7C DUP2 PUSH2 0x6335 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5FBB JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x5F9F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x5FEB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x5FCF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x5FFC JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x60DC JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x60B7 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1798 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5F8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x610E PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x5F8C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1AEC DUP2 DUP6 PUSH2 0x5F8C JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1803 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5FC6 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1798 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x5FC6 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x1803 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x5F8C JUMP JUMPDEST PUSH1 0x0 DUP6 DUP3 MSTORE PUSH1 0x80 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x625E PUSH1 0x80 DUP4 ADD DUP7 PUSH2 0x5F8C JUMP JUMPDEST PUSH1 0x40 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE POP PUSH1 0x60 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x62DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x62FB JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xCF5 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC0 DUP13 DUP14 PUSH5 0xEBFF85CAA2 0x24 RETURNDATACOPY 0xB1 0x5D CALL SWAP11 0xC5 CALLDATALOAD PUSH9 0xABDBAA0443BB078A72 0x2D PUSH15 0xB4B51964736F6C6343000701003300 ", + "sourceMap": "862:2685:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1274:631:27;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6305:97:55;;;:::i;2254:81:51:-;;;:::i;:::-;;;;;;;:::i;4857:164::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5813:394:34:-;;;:::i;:::-;;6721:117;;;:::i;3500:106:51:-;;;:::i;3274:363:45:-;;;:::i;:::-;;;;;;;;;:::i;29081:120:28:-;;;:::i;:::-;;;;;;;:::i;1330:109:37:-;;;;;;:::i;:::-;;:::i;14709:346:59:-;;;:::i;:::-;;;;;;;:::i;2575:655:26:-;;;;;;:::i;:::-;;:::i;6715:383:58:-;;;;;;:::i;:::-;;:::i;5907:1301:61:-;;;;;;:::i;:::-;;:::i;3156:81:51:-;;;:::i;:::-;;;;;;;:::i;2243:113:52:-;;;:::i;8723:165:28:-;;;;;;:::i;:::-;;:::i;7114:91::-;;;:::i;6269:211:51:-;;;;;;:::i;:::-;;:::i;16974:534:57:-;;;:::i;:::-;;;;;;;;:::i;12270:75:28:-;;;:::i;11034:231::-;;;;;;:::i;:::-;;:::i;3432:100:30:-;;;:::i;4246:128:58:-;;;;;;:::i;:::-;;:::i;5741:98:55:-;;;:::i;7926:185:28:-;;;:::i;20592:913::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;42671:1933:55:-;;;:::i;3034:299:61:-;;;:::i;:::-;;;;;;;;;:::i;5051:560:34:-;;;;;;:::i;:::-;;:::i;4022:117:51:-;;;;;;:::i;:::-;;:::i;16016:2311:28:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1654:117:37:-;;;;;;:::i;:::-;;:::i;2006:113:52:-;;;;;;:::i;:::-;;:::i;5256:599:58:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;10262:86:59:-;;;:::i;11817:72:28:-;;;:::i;2607:430:38:-;;;;;;:::i;:::-;;:::i;45398:211:55:-;;;:::i;19019:911:28:-;;;;;;:::i;:::-;;:::i;1751:80:29:-;;;:::i;:::-;;;;;;;:::i;1797:79:26:-;;;:::i;1303:121:41:-;;;;;;:::i;:::-;;:::i;2448:85:51:-;;;:::i;3356:429:26:-;;;;;;:::i;:::-;;:::i;4342:170:51:-;;;;;;:::i;:::-;;:::i;1837:101:29:-;;;:::i;16438:167:59:-;;;;;;:::i;:::-;;:::i;9746:133:28:-;;;:::i;3780:102:30:-;;;:::i;1084:113:62:-;;;;;;:::i;:::-;;:::i;2325:320::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;8305:127:28:-;;;:::i;1437:508:52:-;;;;;;:::i;:::-;;:::i;13533:2321:28:-;;;;;;:::i;:::-;;:::i;2178:254:26:-;;;;;;:::i;:::-;;:::i;2859:80:34:-;;;:::i;2651:894:62:-;;;:::i;1203:126::-;;;;;;:::i;:::-;;:::i;7319:259:61:-;;;:::i;1184:113:41:-;;;:::i;6142:414:58:-;;;;;;:::i;:::-;;:::i;1274:631:27:-;1479:7;1450:11;:18;;;13172:68:28;13203:10;:8;:10::i;:::-;-1:-1:-1;;;;;13181:33:28;:10;-1:-1:-1;;;;;13181:33:28;;6194:3:10;13172:8:28;:68::i;:::-;13250:55;13269:11;:9;:11::i;:::-;13259:6;:21;12526:3:10;13250:8:28;:55::i;:::-;1498:21:27::1;:19;:21::i;:::-;1530:54;1547:7;1556:8;1566:17;:15;:17::i;:::-;1530:16;:54::i;:::-;1594:31;1628:17;:15;:17::i;:::-;1594:51:::0;-1:-1:-1;1695:24:27::1;1675:16:::0;;:44:::1;::::0;::::1;;;;;;;:223;;1827:71;1841:11;1854:8;1864:7;1873:8;1883:14;1827:13;:71::i;:::-;1675:223;;;1738:70;1751:11;1764:8;1774:7;1783:8;1793:14;1738:12;:70::i;:::-;1656:242:::0;1274:631;-1:-1:-1;;;;;;;1274:631:27:o;6305:97:55:-;6353:7;6379:16;:14;:16::i;:::-;6372:23;;6305:97;:::o;2254:81:51:-;2323:5;2316:12;;;;;;;;-1:-1:-1;;2316:12:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;;:::o;5813:394:34:-;5876:31;:29;:31::i;:::-;5922:30;:28;:30::i;:::-;5918:128;;;5968:67;5992:20;4359:1:17;5968:23:34;:67::i;:::-;6056:68;6080:20;4446:1:17;6056:23:34;:68::i;:::-;6134:66;6158:20;4485:1:17;6134:23:34;:66::i;:::-;5813:394::o;6721:117::-;6805:26;6721:117;:::o;3500:106:51:-;3587:12;;3500:106;:::o;3274:363:45:-;3377:11;3402:26;3442:27;3504:14;:12;:14::i;:::-;3503:15;3494:24;;3549;:22;:24::i;:::-;3528:45;;3605:25;:23;:25::i;:::-;3583:47;;3274:363;;;:::o;29081:120:28:-;29142:16;29177:17;:15;:17::i;1330:109:37:-;1426:6;1404:13;:19;1418:4;1404:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1404:19:37;:28;;;;;;;;;;;;;-1:-1:-1;;1330:109:37:o;14709:346:59:-;14760:22;14794:19;14816:17;:15;:17::i;:::-;14794:39;;14843:32;14898:11;14878:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14878:32:59;;14843:67;;14926:9;14921:101;14945:11;14941:1;:15;14921:101;;;14992:19;15009:1;14992:16;:19::i;:::-;14977:9;14987:1;14977:12;;;;;;;;-1:-1:-1;;;;;14977:34:59;;;:12;;;;;;;;;;;:34;14958:3;;14921:101;;;-1:-1:-1;15039:9:59;-1:-1:-1;;14709:346:59;:::o;2575:655:26:-;2703:4;2719:24;2746:29;2756:6;2764:10;2746:9;:29::i;:::-;2719:56;-1:-1:-1;2785:101:26;2794:10;-1:-1:-1;;;;;2794:20:26;;;;:50;;;2838:6;2818:16;:26;;2794:50;10712:3:10;2785:8:26;:101::i;:::-;2897:36;2907:6;2915:9;2926:6;2897:9;:36::i;:::-;2948:10;-1:-1:-1;;;;;2948:20:26;;;;;;:55;;;-1:-1:-1;;2972:16:26;:31;;2948:55;2944:258;;;3136:55;3145:6;3153:10;3184:6;3165:16;:25;3136:8;:55::i;:::-;-1:-1:-1;3219:4:26;;2575:655;-1:-1:-1;;;;2575:655:26:o;6715:383:58:-;6778:13;6794:21;6809:5;6794:14;:21::i;:::-;6778:37;;6826:22;6851:23;6868:5;6851:16;:23::i;:::-;6826:48;-1:-1:-1;6884:83:58;-1:-1:-1;;;;;6893:31:58;;;;9022:3:10;6884:8:58;:83::i;:::-;6977:16;6996:23;;;:16;:23;;;;;;:37;;:35;:37::i;:::-;6977:56;;7043:48;7065:5;7072:8;7082;7043:21;:48::i;:::-;6715:383;;;;:::o;5907:1301:61:-;2276:21:38;:19;:21::i;:::-;6020:60:61::1;1275:1:60;6029:11:61;:34;;6565:3:10;6020:8:61;:60::i;:::-;6090;1319:4:60;6099:11:61;:34;;6610:3:10;6090:8:61;:60::i;:::-;6161:16;6180:34;6189:7;6198:15;6180:8;:34::i;:::-;6161:53;;6224:69;1823:6;6233:8;:28;;7518:3:10;6224:8:61;:69::i;:::-;6305:20;6327:15:::0;6346:28:::1;:26;:28::i;:::-;6304:70;;;;6384:48;6394:10;6393:11;7574:3:10;6384:8:61;:48::i;:::-;6443:16;6462:48;6471:11;1372:3:60;6462:8:61;:48::i;:::-;6443:67;;6817:17;6848:12;6837:8;:23;:197;;6962:72;6973:30;6982:6;6990:12;6973:8;:30::i;:::-;7005:28;7014:8;7024;7005;:28::i;:::-;6962:10;:72::i;:::-;6837:197;;;6875:72;6886:26;6895:6;6903:8;6886;:26::i;:::-;6914:32;6923:12;6937:8;6914;:32::i;6875:72::-;6817:217;;7044:75;1889:1;7053:9;:39;;7629:3:10;7044:8:61;:75::i;:::-;7130:71;7152:12;7166:8;7176:15;7193:7;7130:21;:71::i;:::-;2307:1:38;;;;;5907:1301:61::0;;:::o;3156:81:51:-;3221:9;;;;3156:81;:::o;2243:113:52:-;2303:7;2329:20;:18;:20::i;8723:165:28:-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;8841:40:28::2;8863:17;8841:21;:40::i;:::-;8723:165:::0;:::o;7114:91::-;7191:7;7114:91;:::o;6269:211:51:-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6403:32:51;;;;;;;;;;6357:4;;6373:79;;6394:7;;6403:48;;6440:10;6403:36;:48::i;:::-;6373:8;:79::i;16974:534:57:-;17152:17;;17050:33;;;;17208:126;17152:17;2613:3;2838:2;17208:18;:126::i;:::-;17180:154;-1:-1:-1;17373:128:57;:7;2543:1;2613:3;17373:18;:128::i;:::-;17345:156;;16974:534;;;:::o;12270:75:28:-;2276:21:38;:19;:21::i;:::-;12321:17:28::1;12332:5;12321:10;:17::i;11034:231::-:0;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;11213:45:28::2;11240:5;11247:10;11213:26;:45::i;:::-;11034:231:::0;;:::o;3432:100:30:-;2276:21:38;:19;:21::i;:::-;3503:22:30::1;3520:4;3503:16;:22::i;4246:128:58:-:0;4305:7;4331:36;4345:21;4360:5;4345:14;:21::i;:::-;4331:13;:36::i;:::-;4324:43;;4246:128;;;;:::o;5741:98:55:-;5824:8;5817:15;;;;;;;;-1:-1:-1;;5817:15:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5792:13;;5817:15;;5824:8;;5817:15;;5824:8;5817:15;;;;;;;;;;;;;;;;;;;;;;;;7926:185:28;8022:9;;7996:7;;8022:82;;4326:3;4561:2;8022:20;:82::i;20592:913::-;20861:13;20876:27;20915:71;20951:8;:15;20968:17;:15;:17::i;:::-;20915:35;:71::i;:::-;20997:255;21023:6;21043;21063:9;21086:8;21108:15;21137:25;21176:8;21198:11;21223:19;20997:12;:255::i;:::-;20592:913;;;;;;;;;;:::o;42671:1933:55:-;42730:7;43035:25;43074:21;43109:25;43148:23;43185:43;43241:23;:21;:23::i;:::-;43021:243;;-1:-1:-1;43021:243:55;;-1:-1:-1;43021:243:55;-1:-1:-1;43021:243:55;-1:-1:-1;43021:243:55;-1:-1:-1;43438:25:55;43466:36;43021:243;;43466:17;:36::i;:::-;43438:64;;43681:18;43705:28;:26;:28::i;:::-;43680:53;;;44249:24;44291:15;44277:10;:29;44276:148;;44372:52;44403:10;44415:8;44372:30;:52::i;:::-;44276:148;;;44322:35;44276:148;44249:175;-1:-1:-1;44554:43:55;44249:175;44579:17;44554:24;:43::i;:::-;44547:50;;;;;;;;;;42671:1933;:::o;3034:299:61:-;3131:13;3158:15;3187:17;3251:28;:26;:28::i;:::-;3229:50;;;;-1:-1:-1;1372:3:60;;-1:-1:-1;3034:299:61;-1:-1:-1;3034:299:61:o;5051:560:34:-;5128:7;5151:16;:14;:16::i;:::-;5147:55;;;-1:-1:-1;5190:1:34;5183:8;;5147:55;5216:31;5212:393;;5270:30;:28;:30::i;:::-;:81;;5320:31;5270:81;;;5303:6;:14;;;5270:81;5263:88;;;;5212:393;4446:1:17;5372:7:34;:32;5368:237;;;-1:-1:-1;5427:6:34;:15;;;;;;5420:22;;5368:237;4485:1:17;5463:7:34;:30;5459:146;;;-1:-1:-1;5516:6:34;:13;;;;;;5509:20;;5459:146;5560:34;12459:3:10;5560:7:34;:34::i;4022:117:51:-;-1:-1:-1;;;;;4114:18:51;4088:7;4114:18;;;;;;;;;;;;4022:117::o;16016:2311:28:-;16304:16;16322;16287:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;16350:27:::1;16387:19;16841:33;:8;:31;:33::i;:::-;16837:1175;;;16956:23;:21;:23::i;:::-;17180:54;17200:8;17210:13;:11;:13::i;:::-;17225:8;17180:19;:54::i;:::-;17152:82:::0;-1:-1:-1;17152:82:28;-1:-1:-1;16837:1175:28::1;;;17346:21;:19;:21::i;:::-;17382:31;17416:17;:15;:17::i;:::-;17382:51;;17447:39;17461:8;17471:14;17447:13;:39::i;:::-;17529:336;17558:6;17582;17606:9;17633:8;17659:15;17692:16;:14;:16::i;:::-;:48;;17715:25;17692:48;;;17711:1;17692:48;17811:14;17843:8;17529:11;:336::i;:::-;17501:364:::0;-1:-1:-1;17501:364:28;-1:-1:-1;17954:47:28::1;17501:364:::0;17986:14;17954:19:::1;:47::i;:::-;16837:1175;;18117:36;18133:6;18141:11;18117:15;:36::i;:::-;18277:10;18303:8;:15;18289:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;18289:30:28::1;;18269:51;;;;;;13315:1;16016:2311:::0;;;;;;;;;;;:::o;1654:117:37:-;1755:9;1734:12;:18;1747:4;1734:18;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1734:18:37;:30;-1:-1:-1;;1654:117:37:o;2006:113:52:-;2067:7;2093:19;2106:5;2093:12;:19::i;5256:599:58:-;5357:12;5383:15;5412:16;5442:15;5482:13;5498:16;:39;5515:21;5530:5;5515:14;:21::i;:::-;5498:39;;;;;;;;;;;-1:-1:-1;5498:39:58;;;-1:-1:-1;5646:71:58;5655:19;;;9022:3:10;5646:8:58;:71::i;:::-;5735:22;:5;:20;:22::i;:::-;5728:29;;5777:18;:5;:16;:18::i;:::-;5767:28;;5827:21;:5;:19;:21::i;:::-;5256:599;;;;-1:-1:-1;5805:43:58;;5256:599;-1:-1:-1;;;5256:599:58:o;10262:86:59:-;10332:9;10262:86;:::o;11817:72:28:-;2276:21:38;:19;:21::i;:::-;11866:16:28::1;11877:4;11866:10;:16::i;2607:430:38:-:0;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;45398:211:55:-;45448:7;45470:21;45493:25;45526:23;:21;:23::i;:::-;45467:82;;;;;;;45566:36;45584:17;45566:13;:17;;:36;;;;:::i;:::-;45559:43;;;;45398:211;:::o;19019:911:28:-;19288:14;19304:26;19342:71;19378:8;:15;19395:17;:15;:17::i;19342:71::-;19424:253;19450:6;19470;19490:9;19513:8;19535:15;19564:25;19603:8;19625:11;19650:17;19424:12;:253::i;1751:80:29:-;1818:6;1751:80;:::o;1797:79:26:-;1863:6;1797:79;:::o;1303:121:41:-;-1:-1:-1;;;;;1398:19:41;1372:7;1398:19;;;:10;:19;;;;;;;1303:121::o;2448:85:51:-;2519:7;2512:14;;;;;;;;-1:-1:-1;;2512:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;3356:429:26;3441:4;3457:24;3484:30;3494:10;3506:7;3484:9;:30::i;:::-;3457:57;;3539:16;3529:6;:26;3525:232;;3571:32;3580:10;3592:7;3601:1;3571:8;:32::i;:::-;3525:232;;;3690:56;3699:10;3711:7;3739:6;3720:16;:25;3690:8;:56::i;:::-;-1:-1:-1;3774:4:26;;3356:429;-1:-1:-1;;;3356:429:26:o;4342:170:51:-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;1837:101:29:-;1885:11;1915:16;:14;:16::i;16438:167:59:-;16518:4;16541:57;16576:21;16591:5;16576:14;:21::i;:::-;16541:34;:57::i;9746:133:28:-;9825:9;;9802:4;;9825:47;;4388:3;9825:20;:47::i;3780:102:30:-;2276:21:38;:19;:21::i;:::-;3852:23:30::1;3869:5;3852:16;:23::i;1084:113:62:-:0;1157:33;1184:5;1157:26;:33::i;2325:320::-;2433:25;2472;2511:18;2543:28;2603:35;2619:18;2603:15;:35::i;:::-;2596:42;;;;;;;;2325:320;;;;;:::o;8305:127:28:-;8403:22;8305:127;:::o;1437:508:52:-;1645:18;921:109;1718:5;1725:7;1734:5;1741:19;1754:5;1741:12;:19::i;:::-;1762:8;1689:82;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1666:115;;;;;;1645:136;;1792:104;1814:5;1821:10;1833:26;1851:1;1854;1857;1833:17;:26::i;:::-;1861:8;12759:3:10;1792:21:52;:104::i;:::-;1907:31;1916:5;1923:7;1932:5;1907:8;:31::i;:::-;1437:508;;;;;;;;:::o;13533:2321:28:-;13821:16;13839;13804:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;13867:21:::1;:19;:21::i;:::-;13899:31;13933:17;:15;:17::i;:::-;13899:51;;13965:13;:11;:13::i;:::-;13961:1887;;14000:20;14022:26;14052:164;14087:6;14111;14135:9;14162:14;14194:8;14052:17;:164::i;:::-;13999:217;;;;14515:62;14540:16;:14;:16::i;:::-;14524:12;:32;;6140:3:10;14515:8:28;:62::i;:::-;14591:45;14615:1;14619:16;:14;:16::i;:::-;14591:15;:45::i;:::-;14650:59;14666:9;14692:16;:14;:16::i;:::-;14677:12;:31;14650:15;:59::i;:::-;14796:44;14814:9;14825:14;14796:17;:44::i;:::-;14863:9;14888:8;:15;14874:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;14874:30:28::1;;14855:50;;;;;;;;;13961:1887;14936:39;14950:8;14960:14;14936:13;:39::i;:::-;14990:20;15012:26;15042:336;15071:6;15095;15119:9;15146:8;15172:15;15205:16;:14;:16::i;:::-;:48;;15228:25;15205:48;;;15224:1;15205:48;15324:14;15356:8;15042:11;:336::i;:::-;14989:389;;;;15492:40;15508:9;15519:12;15492:15;:40::i;2178:254:26:-:0;2259:7;2301:10;:8;:10::i;:::-;-1:-1:-1;;;;;2282:30:26;:7;-1:-1:-1;;;;;2282:30:26;;2278:148;;;-1:-1:-1;;;2328:18:26;;2278:148;2384:31;2400:5;2407:7;2384:15;:31::i;:::-;2377:38;;;;2859:80:34;-1:-1:-1;;2859:80:34;:::o;2651:894:62:-;2702:7;3196:12;3210:15;3233:10;:8;:10::i;:::-;-1:-1:-1;;;;;3233:27:62;;3261:11;:9;:11::i;:::-;3281:4;3233:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3195:92;;;;;;3505:33;3530:7;3523:4;:14;3505:17;:33::i;1203:126::-;1271:4;1294:28;1313:8;1294:18;:28::i;7319:259:61:-;2276:21:38;:19;:21::i;:::-;7396:20:61::1;7418:15:::0;7437:28:::1;:26;:28::i;:::-;7395:70;;;;7475:50;7484:10;7688:3:10;7475:8:61;:50::i;:::-;7536:35;7558:12;7536:21;:35::i;1184:113:41:-:0;1244:7;1270:20;:18;:20::i;6142:414:58:-;2276:21:38;:19;:21::i;:::-;6241:13:58::1;6257:21;6272:5;6257:14;:21::i;:::-;6241:37;;6288:22;6313:23;6330:5;6313:16;:23::i;:::-;6288:48:::0;-1:-1:-1;6346:83:58::1;-1:-1:-1::0;;;;;6355:31:58;::::1;::::0;::::1;9022:3:10;6346:8:58;:83::i;:::-;6439:48;6461:5;6468:8;6478;6439:21;:48::i;:::-;6530:8;-1:-1:-1::0;;;;;6502:47:58::1;6523:5;6502:47;6540:8;6502:47;;;;;;:::i;:::-;;;;;;;;2307:1:38;;6142:414:58::0;;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;:::-;2210:1;2038:180;-1:-1:-1;;;2038:180:49:o;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;2512:395::-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2884:15:46;;;-1:-1:-1;;2770:1:46;2752:14;;2751:20;2829:14;;2827:17;2811:33;;2862:38;2512:395;;;;;;;:::o;1193:166:49:-;1251:7;1270:37;1284:1;1279;:6;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7470:13;7486:23;;;:16;:23;;;;;;7427:33;;-1:-1:-1;7546:43:58;7486:23;7427:33;7580:8;7546:27;:43::i;:::-;7520:23;;;;:16;:23;;;;;;;:69;;;;7605:34;7537:5;;7605:34;;;;7634:4;;7605:34;:::i;:::-;;;;;;;;7282:364;;;;;:::o;2499:175:36:-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;2586:5;;1703:2;;2586:16;:81::i;1410:186:53:-;1466:6;1484:75;1502:16;1493:25;;;12403:3:10;1484:8:53;:75::i;:::-;-1:-1:-1;1583:5:53;1410:186::o;3883:240:46:-;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;:85::i;:::-;:113;:180;;:113;:180::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;2005:20;-1:-1:-1;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;6578:502:55:-;6637:27;:25;:27::i;:::-;7044:29;:27;:29::i;9914:112:59:-;10007:12;9914:112;:::o;4791:203:27:-;4920:67;4939:5;4929:7;:15;:35;;;;;4959:5;4948:8;:16;4929:35;5640:3:10;4920:8:27;:67::i;10780:483:58:-;10847:16;10972:19;10994:17;:15;:17::i;:::-;10972:39;;11021:31;11069:11;11055:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11055:26:58;;11021:60;;11097:9;11092:133;11116:11;11112:1;:15;11092:133;;;11168:46;11197:16;11211:1;11197:13;:16::i;:::-;11168:20;11186:1;11168:17;:20::i;:::-;:28;;:46::i;:::-;11148:14;11163:1;11148:17;;;;;;;;;;;;;;;;;:66;11129:3;;11092:133;;9423:746:55;9723:19;;;;9684:7;;-1:-1:-1;;;;;9723:35:55;9753:4;9723:35;;:75;;-1:-1:-1;9762:20:55;;;;-1:-1:-1;;;;;9762:36:55;9793:4;9762:36;9723:75;9722:440;;9937:225;9978:11;10011:18;10051:17;10090:18;10130:14;9937:19;:225::i;:::-;9722:440;;;9818:100;9831:11;9844:18;9864:17;9883:18;9903:14;9818:12;:100::i;:::-;9703:459;;9423:746;;;;;;;;:::o;7885:744::-;8184:19;;;;8145:7;;-1:-1:-1;;;;;8184:35:55;8214:4;8184:35;;:75;;-1:-1:-1;8223:20:55;;;;-1:-1:-1;;;;;8223:36:55;8254:4;8223:36;8184:75;8183:439;;8398:224;8438:11;8471:18;8511:17;8550:18;8590:14;8398:18;:224::i;7683:110:28:-;3257:3;7683:110;:::o;10034:213:51:-;-1:-1:-1;;;;;10157:18:51;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;10208:32;;;;;10187:6;;10208:32;:::i;:::-;;;;;;;;10034:213;;;:::o;45615:2367:55:-;46386:18;:16;:18::i;:::-;46660:25;46713;46752:23;46789:43;46845:23;:21;:23::i;:::-;46646:222;;;;;;;;;46903:1;46883:17;:21;46879:87;;;46920:35;46937:17;46920:16;:35::i;:::-;47172:18;47196:28;:26;:28::i;:::-;47171:53;;;47740:24;47782:15;47768:10;:29;47767:148;;47863:52;47894:10;47906:8;47863:30;:52::i;:::-;47767:148;;;47813:35;47767:148;47740:175;;47926:49;47946:10;47958:16;47926:19;:49::i;:::-;45615:2367;;;;;;:::o;6844:665:34:-;6988:49;;;;;6965:20;;-1:-1:-1;;;;;6988:40:34;;;;;:49;;7029:7;;6988:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6965:72;-1:-1:-1;7052:31:34;7048:383;;7116:23;:12;:21;:23::i;:::-;7099:6;:40;;;;;;;;;;;;;;;7048:383;;;4446:1:17;7160:7:34;:32;7156:275;;;7226:23;:12;:21;:23::i;:::-;7208:6;:41;;;;;;;;;;;;;;;;;;;7156:275;;;4485:1:17;7270:7:34;:30;7266:165;;;7332:23;:12;:21;:23::i;:::-;7316:6;:39;;;;;;;;;;;;;;;;;;;7266:165;;;7386:34;12459:3:10;7386:7:34;:34::i;:::-;7480:7;7446:56;7489:12;7446:56;;;;;;:::i;:::-;;;;;;;;6844:665;;;:::o;4837:237:45:-;4884:4;5030:25;:23;:25::i;:::-;5012:15;:43;:55;;;-1:-1:-1;;5060:7:45;;;;5059:8;;4837:237::o;5187:108::-;5269:19;5187:108;:::o;5301:110::-;5384:20;5301:110;:::o;15061:436:59:-;15125:13;15154:10;15150:37;;-1:-1:-1;15173:14:59;15166:21;;15150:37;15201:5;15210:1;15201:10;15197:37;;;-1:-1:-1;15220:14:59;15213:21;;15197:37;15248:5;15257:1;15248:10;15244:37;;;-1:-1:-1;15267:14:59;15260:21;;15244:37;15295:5;15304:1;15295:10;15291:37;;;-1:-1:-1;15314:14:59;15307:21;;15291:37;15342:5;15351:1;15342:10;15338:37;;;-1:-1:-1;15361:14:59;15354:21;;15338:37;15389:5;15398:1;15389:10;15385:106;;;-1:-1:-1;15408:14:59;15401:21;;15385:106;15451:29;7054:3:10;15451:7:59;:29::i;7753:559:51:-;7880:71;-1:-1:-1;;;;;7889:20:51;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;-1:-1:-1;;;;;7970:23:51;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;-1:-1:-1;;;;;8122:17:51;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;-1:-1:-1;;;;;8102:17:51;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;-1:-1:-1;;;;;8200:20:51;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;;;;8298:6;;8270:35;:::i;10354:357:59:-;10415:7;10447;-1:-1:-1;;;;;10438:16:59;:5;-1:-1:-1;;;;;10438:16:59;;10434:30;;;-1:-1:-1;10463:1:59;10456:8;;10434:30;10487:7;-1:-1:-1;;;;;10478:16:59;:5;-1:-1:-1;;;;;10478:16:59;;10474:30;;;-1:-1:-1;10503:1:59;10496:8;;10474:30;10527:7;-1:-1:-1;;;;;10518:16:59;:5;-1:-1:-1;;;;;10518:16:59;;10514:30;;;-1:-1:-1;10543:1:59;10536:8;;10514:30;10567:7;-1:-1:-1;;;;;10558:16:59;:5;-1:-1:-1;;;;;10558:16:59;;10554:30;;;-1:-1:-1;10583:1:59;10576:8;;10554:30;10607:7;-1:-1:-1;;;;;10598:16:59;:5;-1:-1:-1;;;;;10598:16:59;;10594:30;;;-1:-1:-1;10623:1:59;10616:8;;10594:30;10647:7;-1:-1:-1;;;;;10638:16:59;:5;-1:-1:-1;;;;;10638:16:59;;10634:30;;;-1:-1:-1;10663:1:59;10656:8;;2752:165:36;2811:7;2837:73;:5;1772:3;1951:2;2837:16;:73::i;1335:259:62:-;1492:22;1211::37;1228:4;1211:16;:22::i;:::-;1533:54:62::1;1561:5;1568:8;1578;1533:27;:54::i;2420:181:38:-:0;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;3515:1248:61:-;3576:13;3591:15;3619:18;3639:16;3657:17;3676:15;3695:23;:21;:23::i;:::-;3618:100;;;;;;;;3868:7;3850:15;:25;3846:911;;;3904:4;3891:17;;4380:10;4369:8;:21;4365:303;;;4502:9;4492:7;:19;4477:9;4459:15;:27;4444:10;4433:8;:21;4432:55;4431:81;;;;;;4418:10;:94;4410:102;;4365:303;;;4643:9;4633:7;:19;4618:9;4600:15;:27;4587:8;4574:10;:21;4573:55;4572:81;;;;;;4559:10;:94;4551:102;;4365:303;3846:911;;;4711:5;4698:18;;4738:8;4730:16;;3846:911;3515:1248;;;;;;:::o;2556:232:49:-;2616:7;2635:38;2644:6;;;5318:1:10;2635:8:49;:38::i;:::-;2688:6;2684:98;;-1:-1:-1;2717:1:49;2710:8;;2684:98;2770:1;2765;2761;:5;2760:11;;;;;;2756:1;:15;2749:22;;;;7770:306:61;7931:65;7955:10;7967:8;7977:9;7988:7;7931:23;:65::i;:::-;8011:58;8028:10;8040:8;8050:9;8061:7;8011:58;;;;;;;;;:::i;:::-;;;;;;;;7770:306;;;;:::o;4340:98:45:-;4392:39;4401:14;:12;:14::i;:::-;9935:3:10;4392:8:45;:39::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:17;:47;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:17;:47;;6030:3:10;9078:8:28;:89::i;:::-;9190:9;;:147;;9224:17;4326:3;4561:2;9190:20;:147::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;966:167:54:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;3913:358:45:-;3969:6;3965:232;;;3991:81;4018:24;:22;:24::i;:::-;4000:15;:42;9993:3:10;3991:8:45;:81::i;:::-;3965:232;;;4103:83;4130:25;:23;:25::i;:::-;4112:15;:43;11423:3:10;4103:8:45;:83::i;:::-;4207:7;:16;;;;;;;;;;4238:26;;;;;;4207:16;;4238:26;:::i;11271:279:28:-;11364:14;11381:11;:9;:11::i;:::-;11364:28;;11409:20;11433:10;:8;:10::i;:::-;-1:-1:-1;;;;;11433:27:28;;11461:6;11469:5;11433:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11486:57;;;;;11402:73;;-1:-1:-1;;;;;;11486:37:28;;;-1:-1:-1;11486:37:28;;-1:-1:-1;11486:57:28;;-1:-1:-1;11524:6:28;;11532:10;;11486:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:488;10065:9;;:56;;10086:7;4388:3;10065:20;:56::i;:::-;10053:9;:68;10137:33;;;;;;10162:7;;10137:33;:::i;:::-;;;;;;;;10425:7;10420:38;;10434:24;:22;:24::i;4380:719:58:-;4449:7;4877:13;:11;:13::i;:::-;4868:5;:22;4864:74;;;-1:-1:-1;945:4:47;4906:21:58;;4864:74;4948:22;4973:23;;;:16;:23;;;;;;5013:28;;:79;;5061:31;:14;:29;:31::i;:::-;5013:79;;;945:4:47;5006:86:58;4380:719;-1:-1:-1;;;4380:719:58:o;920:131:43:-;998:46;1012:1;1007;:6;5804:3:10;998:8:43;:46::i;25271:375:55:-;25527:7;25536:16;25571:68;25587:5;25594:18;25614:14;25630:8;25571:15;:68::i;:::-;25564:75;;;;25271:375;;;;;;;;;;;:::o;31004:360:28:-;31133:14;;31201:21;;31157:66;;31133:14;;31157:35;:66::i;:::-;31239:9;31234:124;31258:6;31254:1;:10;31234:124;;;31298:49;31317:7;31325:1;31317:10;;;;;;;;;;;;;;31329:14;31344:1;31329:17;;;;;;;;;;;;;;31298:18;:49::i;:::-;31285:7;31293:1;31285:10;;;;;;;;;;;;;;;;;:62;31266:3;;31234:124;;32751:7126;33432:10;33454:4;33432:27;33428:6443;;33728:12;33754:4;-1:-1:-1;;;;;33746:18:28;33765:8;;33746:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33727:47;;;33992:7;34025:1;34020:3336;;;;37516:9;34020:3336;34496:4;34493:1;34490;34475:26;34549:1;34543:8;34553:66;34539:81;34781:66;34771:77;;34765:2;;34904:16;34901:1;34898;34883:38;34960:16;34957:1;34950:27;34765:2;;36371;36365:4;36362:1;36347:27;36568:2;36562:4;36555:16;36992:2;36974:16;36970:25;36964:4;36958;36943:53;37330:2;37312:16;37308:25;37305:1;37298:36;33858:3703;37816:21;:19;:21::i;:::-;37852:31;37886:17;:15;:17::i;:::-;37852:51;;37917:39;37931:8;37941:14;37917:13;:39::i;:::-;37972:17;37991:29;38024:256;38049:6;38073;38097:9;38124:8;38150:15;38183:25;38226:14;38258:8;38024:7;:256;;:::i;:::-;37971:309;;;;38295:45;38311:12;38325:14;38295:15;:45;;:::i;:::-;38821:19;;-1:-1:-1;;39208:23:28;;39248:24;;;39494:66;39476:16;;;39469:92;38842:2;38817:28;39587:16;;;39843:2;39833:13;;39587:16;39819:28;39809:1766:55;39901:25;39940:21;39975:25;40014:23;40051:43;40299:35;40340:10;:8;:10::i;:::-;-1:-1:-1;;;;;40340:24:55;;40365:11;:9;:11::i;:::-;40340:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40340:37:55;;;;;;;;;;;;:::i;:::-;40296:81;;;;40387:52;40401:18;40421:17;:15;:17::i;:::-;40387:13;:52::i;:::-;40477:44;40502:18;40477:24;:44::i;:::-;40449:72;-1:-1:-1;40449:72:55;-1:-1:-1;40842:33:55;40932:21;:19;:21::i;:::-;40885:68;;-1:-1:-1;40885:68:55;-1:-1:-1;41156:43:55;41320:89;41356:8;40885:68;;41320:35;:89::i;:::-;41209:200;-1:-1:-1;41209:200:55;-1:-1:-1;41440:128:55;41496:13;41209:200;41440:42;:128::i;:::-;41420:148;;39809:1766;;;;;;;;:::o;3181:2872:60:-;4328:15;;3316:7;;;;;4353:91;4377:9;4373:1;:13;4353:91;;;4413:20;4421:8;4430:1;4421:11;;;;;;;;;;;;;;4413:3;:7;;:20;;;;:::i;:::-;4407:26;-1:-1:-1;4388:3:60;;4353:91;;;-1:-1:-1;4457:8:60;4453:47;;4488:1;4481:8;;;;;;4453:47;4510:21;4591:3;4654:34;;;4510:21;4727:1262;4751:3;4747:1;:7;4727:1262;;;4789:9;4775:11;4813:216;4837:9;4833:1;:13;4813:216;;;4942:72;4955:24;4964:3;4969:9;4955:8;:24::i;:::-;4981:32;4990:8;4999:1;4990:11;;;;;;;;;;;;;;5003:9;4981:8;:32::i;:::-;4942:12;:72::i;:::-;4936:78;-1:-1:-1;4848:3:60;;4813:216;;;;5059:9;5043:25;;5095:622;5125:248;5235:88;5298:24;5307:3;5312:9;5298:8;:24::i;:::-;5235:58;5248:28;5257:13;5272:3;5248:8;:28::i;:::-;1372:3;5235:12;:58::i;:::-;:62;;:88::i;:::-;5346:9;5125:8;:248::i;:::-;5520:165;5633:30;5643:9;5655:1;5643:13;5659:3;5633:8;:30::i;:::-;5520:83;5533:53;1372:3;5543:13;:30;5576:9;5533:8;:53::i;5095:622::-;5083:634;;5748:13;5736:9;:25;5732:247;;;5814:1;5797:13;5785:9;:25;:30;5781:93;;5846:9;5839:16;;;;;;;;;;;5781:93;5732:247;;;5927:1;5914:9;5898:13;:25;:30;5894:85;;5955:9;5948:16;;;;;;;;;;;5894:85;-1:-1:-1;4756:3:60;;4727:1262;;;;5999:47;7757:3:10;5999:7:60;:47::i;:::-;3181:2872;;;;;;;;;:::o;2628:355:47:-;2690:7;2709:38;2718:6;;;5318:1:10;2709:8:47;:38::i;:::-;2762:6;2758:219;;-1:-1:-1;2791:1:47;2784:8;;2758:219;945:4;2843:7;;;;2864:51;;2843:1;:7;:1;2873:13;;;;;:20;5366:1:10;2864:8:47;:51::i;:::-;2965:1;2953:9;:13;;;;;;2946:20;;;;;1437:126:10;1484:28;1492:9;1484:28;:7;:28::i;1066:243:2:-;1140:4;1245:1;1231:4;:11;:15;:71;;;;;1003:3;1250:52;;1261:4;1250:25;;;;;;;;;;;;:::i;:::-;:52;;;;1066:243;-1:-1:-1;;1066:243:2:o;4531:119:30:-;4588:55;4597:16;:14;:16::i;:::-;12169:3:10;4588:8:30;:55::i;37719:1128:55:-;37882:7;37891:16;38437:21;38460:25;38489:44;38514:18;38489:24;:44::i;:::-;38436:97;;;;38545:19;38566:27;38597:106;38636:8;38658:13;38685:8;38597:25;:106::i;:::-;38544:159;;;;38800:11;38813:26;38825:10;38837:1;38813:11;:26::i;:::-;38792:48;;;;;;;;37719:1128;;;;;;:::o;30111:354:28:-;30234:14;;30302:21;;30258:66;;30234:14;;30258:35;:66::i;:::-;30340:9;30335:124;30359:6;30355:1;:10;30335:124;;;30399:49;30418:7;30426:1;30418:10;;;;;;;;;;;;;;30430:14;30445:1;30430:17;;;;;;;;;;;;;;30399:18;:49::i;:::-;30386:7;30394:1;30386:10;;;;;;;;;;;;;;;;;:62;30367:3;;30335:124;;3934:104:26;4010:21;4016:6;4024;4010:5;:21::i;2038:157:36:-;2100:7;2126:62;:5;2100:7;1895:2;2126:16;:62::i;2275:149::-;2333:7;2359:58;:5;1703:2;;2359:16;:58::i;3015:234::-;3076:16;3094:15;3132:18;3144:5;3132:11;:18::i;:::-;3121:29;-1:-1:-1;3170:72:36;:5;1841:3;1951:2;3170:16;:72::i;:::-;3160:82;;3015:234;;;:::o;24702:374:55:-;24958:7;24967:16;25002:67;25018:4;25024:18;25044:14;25060:8;25002:15;:67::i;31895:356:28:-;32022:14;;32090:21;;32046:66;;32022:14;;32046:35;:66::i;:::-;32128:9;32123:122;32147:6;32143:1;:10;32123:122;;;32187:47;32204:7;32212:1;32204:10;;;;;;;;;;;;;;32216:14;32231:1;32216:17;;;;;;;;;;;;;;32187:16;:47::i;:::-;32174:7;32182:1;32174:10;;;;;;;;;;;;;;;;;:60;32155:3;;32123:122;;32257:488;32315:11;32712:10;:8;:10::i;:::-;-1:-1:-1;;;;;32712:24:28;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16696:183:59:-;16793:4;16816:56;:23;16851:20;5949:143:46;6054:14;2246:10;6046:33;;;6045:40;;5949:143::o;8058:913:58:-;8569:13;:11;:13::i;:::-;8560:5;:22;8556:35;;;8584:7;;8556:35;8601:13;8617:23;;;:16;:23;;;;;;8654:19;;8650:315;;8690:16;8708:15;8727:21;:5;:19;:21::i;:::-;8689:59;;;;8784:7;8766:15;:25;8762:193;;;8877:63;8899:5;8906:23;8923:5;8906:16;:23::i;:::-;8931:8;8877:21;:63::i;27917:1089:55:-;28026:7;28047:16;28077:7;28098;28131:23;28156:33;28193:21;:19;:21::i;:::-;28130:84;;;;28238:25;28277;28316:34;28363:94;28394:18;28414:15;28431:25;28363:30;:94::i;:::-;28224:233;;;;;;28688:18;28712:28;:26;:28::i;:::-;28687:53;;;28750:28;28795:15;28781:10;:29;:137;;28866:52;28897:10;28909:8;28866:30;:52::i;:::-;28781:137;;;28825:26;28781:137;28937:17;;28956:8;;-1:-1:-1;28966:10:55;;-1:-1:-1;28937:17:55;;-1:-1:-1;27917:1089:55;;-1:-1:-1;;;;;;27917:1089:55:o;3803:419:41:-;3963:13;;;3973:2;3963:13;;;;;;;;;3914:12;;;;3963:13;;;;;;;;;;;-1:-1:-1;3963:13:41;3938:38;;4092:1;4087:2;4076:9;4072:18;4065:29;4134:1;4129:2;4118:9;4114:18;4107:29;4177:1;4172:2;4161:9;4157:18;4149:30;4206:9;3803:419;-1:-1:-1;;;;3803:419:41:o;1701:1214::-;1895:14;1912:28;1929:10;1912:16;:28::i;:::-;1895:45;;1950:66;1959:45;1977:7;1986:6;1994:9;1959:17;:45::i;:::-;2006:9;1950:8;:66::i;:::-;2487:63;2508:15;2496:8;:27;;12277:3:10;2487:8:41;:63::i;:::-;-1:-1:-1;;;;;;;;2884:19:41;;;;;;;:10;:19;;;;;:24;;2907:1;2884:24;;;-1:-1:-1;;1701:1214:41:o;22584:1988:55:-;22774:7;22783:16;22811:32;22846:19;:8;:17;:19::i;:::-;22811:54;-1:-1:-1;22875:72:55;22892:32;22884:4;:40;;;;;;;;;6245:3:10;22875:8:55;:72::i;:::-;23061:38;23102:27;:8;:25;:27::i;:::-;23061:68;;23139:88;23175:21;:28;23205:14;:21;23139:35;:88::i;:::-;23237:52;23251:21;23274:14;23237:13;:52::i;:::-;23301:11;23318:28;:26;:28::i;:::-;23300:46;;;23356:26;23385:35;23398:21;23385:12;:35::i;:::-;23356:64;;23430:26;23459:46;23490:3;23495:9;23459:30;:46::i;:::-;23430:75;-1:-1:-1;23430:75:55;23577:20;24232:42;3234:8;23430:75;24232:28;:42::i;:::-;24211:63;;24285:35;24301:6;24309:10;24285:15;:35::i;:::-;24369:10;24330:21;24352:13;:11;:13::i;:::-;24330:36;;;;;;;;;;;;;:49;;;;;24466:44;24486:3;24491:18;24466:19;:44::i;:::-;-1:-1:-1;24529:12:55;24543:21;;-1:-1:-1;22584:1988:55;;-1:-1:-1;;;;;;;;;;22584:1988:55:o;3818:110:26:-;3897:24;3903:9;3914:6;3897:5;:24::i;4570:149:51:-;-1:-1:-1;;;;;4685:18:51;;;4659:7;4685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;17816:417:59:-;17886:7;18197:29;18215:10;18197:13;:11;:13::i;:::-;:17;;:29::i;49834:573:55:-;50339:4;50366:34;50391:8;50366:24;:34::i;7584:180:61:-;7648:71;7672:5;7679;7686:15;7703;7648:23;:71::i;:::-;7734:23;7751:5;7734:23;;;;;;:::i;2386:188:50:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;:51::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;7061:607:46;7197:44;7215:3;7206:6;:12;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;:27::i;:::-;7433:9;:40;;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;26094:164:28:-;26233:18;:16;:18::i;7724:209:58:-;7782:19;7804:17;:15;:17::i;:::-;7782:39;;7836:9;7831:96;7855:11;7851:1;:15;7831:96;;;7887:29;7914:1;7887:26;:29::i;:::-;7868:3;;7831:96;;14150:437:59;14215:7;14238:10;14234:38;;-1:-1:-1;14257:15:59;14250:22;;14234:38;14286:5;14295:1;14286:10;14282:38;;;-1:-1:-1;14305:15:59;14298:22;;14282:38;14334:5;14343:1;14334:10;14330:38;;;-1:-1:-1;14353:15:59;14346:22;;14330:38;14382:5;14391:1;14382:10;14378:38;;;-1:-1:-1;14401:15:59;14394:22;;14378:38;14430:5;14439:1;14430:10;14426:38;;;-1:-1:-1;14449:15:59;14442:22;;14426:38;14478:5;14487:1;14478:10;14474:107;;;-1:-1:-1;14497:15:59;14490:22;;1790:209:47;1852:7;1889:5;;;1904:57;1913:6;;;:26;;;1938:1;1933;1923:7;:11;;;;1904:57;945:4;1979:13;;;;-1:-1:-1;;;1790:209:47:o;2693:749:27:-;2915:7;2934:39;2948:8;2958:14;2934:13;:39::i;:::-;3004:54;3013:11;:18;;;3033:14;3048:8;3033:24;;;;;;;;;;;;;;3004:8;:54::i;:::-;2983:18;;;:75;3069:16;3088:57;2983:11;3117:8;3127:7;3136:8;3088:15;:57::i;:::-;3069:76;;3233:47;3246:8;3256:14;3271:7;3256:23;;;;;;;;;;;;;;3233:12;:47::i;:::-;3222:58;;3408:27;3426:8;3408:17;:27::i;13388:1964:55:-;13630:7;;;13666:16;;:44;;;;;;;;;13649:61;;13721:49;13735:18;13755:14;13721:13;:49::i;:::-;13801:130;13823:11;:18;;;13855:14;13870:9;:50;;13902:18;13870:50;;;13882:17;13870:50;13855:66;;;;;;;13801:130;13780:11;:18;;:151;;;;;13956:25;13995;14034:18;14066:28;14107:35;14123:18;14107:15;:35::i;:::-;13942:200;;;;;;;;14241:24;14267:26;14319:13;:11;:13::i;:::-;14297:18;:35;:596;;14627:266;14656:9;14683:11;:18;;;14719:8;14745:33;14759:18;14745:13;:33::i;:::-;14796:10;14824:17;14859:20;14627:11;:266::i;:::-;14297:596;;;14347:265;14376:9;14403:11;:18;;;14439:8;14465:32;14479:17;14465:13;:32::i;:::-;14515:10;14543:17;14578:20;14347:11;:265::i;:::-;14240:653;;;;14904:182;14947:10;14971:8;14993:20;15027:17;15058:18;14904:29;:182::i;:::-;15116:9;:206;;15257:65;15270:16;15288:14;15303:17;15288:33;;;;;;;15257:65;15116:206;;;15144:68;15159:16;15177:14;15192:18;15177:34;;;;;;;;;;;;;;15144:14;:68::i;:::-;15097:225;13388:1964;-1:-1:-1;;;;;;;;;;;;;13388:1964:55:o;1911:776:27:-;2132:7;2280:42;2303:11;:18;;;2280:22;:42::i;:::-;2259:18;;;:63;2333:39;2347:8;2357:14;2333:13;:39::i;:::-;2403:53;2412:11;:18;;;2432:14;2447:7;2432:23;;;;;;;2403:53;2382:18;;;:74;2467:17;2487:56;2382:11;2515:8;2525:7;2534:8;2487:14;:56::i;:::-;2467:76;;2629:51;2644:9;2655:14;2670:8;2655:24;;;;;;;26392:134:28;26456:63;26480:26;:24;:26::i;:::-;26509:9;26456:15;:63::i;16366:468:57:-;16618:181;16656:21;2543:1;2613:3;16618:20;:181::i;:::-;16497:106;16518:10;2613:3;2838:2;16497:20;:106::i;:::-;:302;16465:17;:334;16810:17;:15;:17::i;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;1853:201:37:-;1924:13;:19;1938:4;1924:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1924:19:37;;;;1920:128;;;1959:78;1967:12;:18;1980:4;1967:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;1989:1;1967:23;:69;;2018:12;:18;2031:4;2018:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:69;;;12222:3:10;1967:69:37;1959:7;:78::i;1944:544:29:-;2032:4;1638:42;2053:10;:8;:10::i;:::-;-1:-1:-1;;;;;2053:29:29;;;2052:63;;;;;2087:28;2106:8;2087:18;:28::i;:::-;2048:434;;;2247:10;:8;:10::i;:::-;-1:-1:-1;;;;;2233:24:29;:10;-1:-1:-1;;;;;2233:24:29;;2226:31;;;;2048:434;2410:16;:14;:16::i;:::-;-1:-1:-1;;;;;2410:27:29;;2438:8;2448:7;2465:4;2410:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4832:642:61:-;4924:18;4956:16;4986:17;5017:15;5070:83;2181:1;2411:2;5070:24;;:35;;:83;;;;;:::i;:::-;5174:24;;5057:96;;-1:-1:-1;5174:81:61;;2237:2;;5174:35;:81::i;:::-;5277:24;;5163:92;;-1:-1:-1;5277:86:61;;2295:3;2472:2;5277:35;:86::i;:::-;5383:24;;5265:98;;-1:-1:-1;5383:84:61;;2352:3;2472:2;5383:35;:84::i;:::-;5373:94;;4832:642;;;;:::o;8082:570::-;8567:78;8588:7;2352:3;2472:2;8567:20;:78::i;:::-;8470:82;8491:9;2295:3;2472:2;8470:20;:82::i;:::-;8379:76;8400:8;2237:2;2411;8379:20;:76::i;:::-;8284:80;8305:10;2181:1;2411:2;8284:20;:80::i;:::-;:171;:268;:361;8245:24;:400;-1:-1:-1;;;;8082:570:61:o;9409:124:28:-;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;47988:1050:55:-;48608:35;48649:10;:8;:10::i;:::-;-1:-1:-1;;;;;48649:24:55;;48674:11;:9;:11::i;:::-;48649:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48649:37:55;;;;;;;;;;;;:::i;:::-;48605:81;;;;48696:52;48710:18;48730:17;:15;:17::i;48696:52::-;48758:25;48786:32;48799:18;48786:12;:32::i;:::-;48758:60;;48830:18;48854:28;:26;:28::i;:::-;48829:53;;;48892:24;48919:52;48950:10;48962:8;48919:30;:52::i;:::-;48892:79;;48982:49;49002:10;49014:16;48982:19;:49::i;25825:1971::-;26012:7;26021:16;26063:25;26102;26141:18;26173:28;26214:35;26230:18;26214:15;:35::i;:::-;26049:200;;;;;;;;26265:197;26475:6;:26;;26494:7;26475:26;;;26484:7;26475:26;26265:237;;26514:17;26533:29;26566:184;26593:8;26615:10;26639:17;26670:20;26704:14;26732:8;26566:13;:184;;:::i;:::-;26513:237;;;;26911:68;26982:6;:40;;27008:14;26982:40;;;26991:14;26982:40;26911:111;;27032:49;27047:8;27057:12;27071:9;27032:14;:49::i;:::-;27091:26;27120:39;27130:17;27149:9;27120;:39;;:::i;:::-;27091:68;;27334:182;27377:10;27401:8;27423:20;27457:17;27488:18;27334:29;:182::i;:::-;27749:9;27760:28;27772:12;27786:1;27760:11;:28::i;:::-;27741:48;;;;;;;;;;;;;25825:1971;;;;;;;:::o;12340:261:59:-;12458:7;12467:16;12507:52;12525:18;12544:13;:11;:13::i;:::-;12525:33;;;;;;;;;;;;;;12507:17;:52::i;:::-;12561:32;12574:18;12561:12;:32::i;:::-;12499:95;;;;12340:261;;;:::o;4998:6138:57:-;5183:7;5192;6628:30;6672:37;6723:28;6764:47;6785:8;6795:15;6764:20;:47::i;:::-;6614:197;;;;;;9748:35;9812:25;9787:22;:50;9786:133;;9918:1;9786:133;;;9878:25;9853:22;:50;9786:133;9748:171;;9929:42;10007:22;9975:29;:54;9974:141;;10114:1;9974:141;;;10077:22;10045:29;:54;9974:141;9929:186;;10461:33;10497:140;10576:51;4359:1:17;10576:29:57;:51::i;:::-;10497:57;:27;10533:20;10497:35;:57::i;:140::-;10461:176;;10648:31;10682:148;10768:52;4446:1:17;10768:29:57;:52::i;:::-;10682:64;:34;10725:20;10682:42;:64::i;:148::-;11055:51;;;;;11108:20;;-1:-1:-1;4998:6138:57;;-1:-1:-1;;;;;;;;;4998:6138:57:o;1470:619:35:-;1610:7;1984:98;1997:46;2006:11;2019:23;1997:8;:46::i;:::-;2045:36;:23;:34;:36::i;2402:148:49:-;2464:7;2483:38;2492:6;;;5318:1:10;2483:8:49;:38::i;:::-;2542:1;2538;:5;;;;;;;2402:148;-1:-1:-1;;;2402:148:49:o;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;5268:399:30;5424:7;5433:16;5461:19;5483:27;:8;:25;:27::i;:::-;5461:49;;5521:27;5551:66;5582:8;5592:11;5605;5551:30;:66::i;:::-;5636:11;;;;-1:-1:-1;5268:399:30;;-1:-1:-1;;;;;5268:399:30:o;13695:426:59:-;13808:39;13902:7;:14;13919:1;13902:18;13888:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13888:33:59;;13863:58;;13936:9;13931:184;13955:22;:29;13951:1;:33;13931:184;;;14038:13;:11;:13::i;:::-;14033:1;:18;:71;;14066:7;14078:13;:11;:13::i;:::-;14074:1;:17;:29;;14102:1;14098;:5;14074:29;;;14094:1;14074:29;14066:38;;;;;;;;;;;;;;14033:71;;;14054:9;14033:71;14005:22;14028:1;14005:25;;;;;;;;;;;;;;;;;:99;13986:3;;13931:184;;;;13695:426;;;;:::o;9200:411:51:-;9275:68;-1:-1:-1;;;;;9284:21:51;;;;10506:3:10;9275:8:51;:68::i;:::-;9354:49;9375:7;9392:1;9396:6;9354:20;:49::i;:::-;-1:-1:-1;;;;;9435:18:51;;:9;:18;;;;;;;;;;;:65;;9458:6;11950:3:10;9435:22:51;:65::i;:::-;-1:-1:-1;;;;;9414:18:51;;:9;:18;;;;;;;;;;:86;9510:42;9526:25;9544:6;9526:13;:11;:13::i;:::-;:17;;:25::i;:::-;9510:15;:42::i;:::-;9593:1;-1:-1:-1;;;;;9567:37:51;9576:7;-1:-1:-1;;;;;9567:37:51;;9597:6;9567:37;;;;;;:::i;:::-;;;;;;;;9200:411;;:::o;2989:682:47:-;3049:7;3068:38;3077:6;;;5318:1:10;3068:8:47;:38::i;:::-;3121:6;3117:548;;-1:-1:-1;3150:1:47;3143:8;;3117:548;945:4;3202:7;;;;3223:51;;3202:1;:7;:1;3232:13;;;3223:51;3648:1;3643;3631:9;:13;3630:19;;;;;;3653:1;3629:25;3622:32;;;;;3286:1706:57;3500:7;3521:16;3551:7;3584:21;3607:25;3636:44;3661:18;3636:24;:44::i;:::-;3583:97;;;;3854:43;3911;3967:89;4003:8;4013:15;4030:25;3967:35;:89::i;:::-;3840:216;;;;4369:25;4397:128;4453:13;4480:35;4397:42;:128::i;:::-;4369:156;-1:-1:-1;4540:21:57;;4536:87;;4577:35;4594:17;4577:16;:35::i;:::-;4904:33;;;;;4939:8;;-1:-1:-1;4904:33:57;;-1:-1:-1;3286:1706:57;-1:-1:-1;;;;;3286:1706:57:o;3199:183:50:-;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;:::i;2921:876:41:-;3066:4;3082:60;3091:9;:16;3111:2;3091:22;12334:3:10;3082:8:41;:60::i;:::-;3427:4;3412:20;;;3406:27;3472:4;3457:20;;;3451:27;3525:4;3510:20;;3504:27;3579:26;;3153:9;3579:26;;;;;;;;;3406:27;;3451;;3496:36;;;3579:26;;;;3589:6;;3496:36;;3406:27;;3451;;3579:26;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3579:26:41;;-1:-1:-1;;3579:26:41;;;-1:-1:-1;;;;;;;3728:30:41;;;;;;:61;;;3782:7;-1:-1:-1;;;;;3762:27:41;:16;-1:-1:-1;;;;;3762:27:41;;3728:61;3720:70;2921:876;-1:-1:-1;;;;;;;;2921:876:41:o;979:122:1:-;1039:8;1077:4;1066:28;;;;;;;;;;;;:::i;1249:168::-;1317:26;1382:4;1371:39;;;;;;;;;;;;:::i;11795:361:59:-;11866:16;11894:34;11962:1;11945:7;:14;:18;11931:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11931:33:59;;11894:70;;11979:9;11974:141;11998:17;:24;11994:1;:28;11974:141;;;12066:7;12078:13;:11;:13::i;:::-;12074:1;:17;:29;;12098:1;12102;12098:5;12074:29;;;12094:1;12074:29;12066:38;;;;;;;;;;;;;;12043:17;12061:1;12043:20;;;;;;;;;;;;;;;;;:61;12024:3;;11974:141;;8583:297:51;8658:49;8687:1;8691:7;8700:6;8658:20;:49::i;:::-;8718:42;8734:25;8752:6;8734:13;:11;:13::i;8718:42::-;-1:-1:-1;;;;;8791:18:51;;:9;:18;;;;;;;;;;;:30;;8814:6;8791:22;:30::i;:::-;-1:-1:-1;;;;;8770:18:51;;:9;:18;;;;;;;;;;;:51;;;;8836:37;;8770:18;;:9;8836:37;;;;8866:6;;8836:37;:::i;17664:525:57:-;18121:4;18148:34;18173:8;18148:24;:34::i;3388:427:50:-;3790:9;;3765:44::o;29363:579:28:-;29443:7;29894:41;29913:6;29921:13;29894:18;:41::i;1962:357:62:-;2206:16;2174:21;1211:22:37;1228:4;1211:16;:22::i;:::-;2241:71:62::1;2263:7;2272:20;2294:7;2303:8;2241:21;:71::i;:::-;2234:78:::0;1962:357;-1:-1:-1;;;;;;1962:357:62:o;31566:156:28:-;31650:7;31676:39;31693:6;31701:13;31676:16;:39::i;26620:240::-;26686:7;26804:49;26817:35;:22;:20;:22::i;:::-;:33;:35::i;:::-;26804:6;;:12;:49::i;11304:383:59:-;11365:7;11564:54;11582:13;:11;:13::i;:::-;11573:5;:22;;5640:3:10;11564:8:59;:54::i;:::-;11644:13;:11;:13::i;:::-;11636:5;:21;:44;;11668:12;:5;11678:1;11668:9;:12::i;:::-;11636:44;;18906:844:55;19161:7;19170;19208:9;:535;;19499:244;19551:6;19579:8;19609;19639:10;19671:12;19705:20;19499:30;:244::i;:::-;19208:535;;;19236:244;19288:6;19316:8;19346;19376:10;19408:12;19442:20;19236:30;:244::i;:::-;19189:554;;;;18906:844;;;;;;;;;;:::o;15596:841::-;15850:7;15859;15897:9;:533;;16187:243;16239:6;16267:8;16297:7;16326:10;16358:12;16392:20;16187:30;:243::i;15897:533::-;15925:243;15977:6;16005:8;16035:7;16064:10;16096:12;16130:20;15925:30;:243::i;13606:2484:57:-;14462:29;14494:52;14525:10;14537:8;14494:30;:52::i;:::-;14462:84;-1:-1:-1;14626:25:57;14654:45;:18;14681:17;14654:26;:45::i;:::-;14626:73;-1:-1:-1;14709:24:57;14736:47;:20;14626:73;14736:28;:47::i;:::-;14709:74;;15226:16;15202:21;:40;15198:821;;;15291:40;;;15258:30;15525:168;15555:85;15291:40;15588:51;15258:30;15588:29;:51::i;:::-;15555:8;:85::i;:::-;15658:21;15525:12;:168::i;:::-;15487:206;-1:-1:-1;15712:31:57;;15708:301;;15763:25;15791:149;15855:18;15895:27;15791:42;:149::i;:::-;15763:177;;15959:35;15976:17;15959:16;:35::i;:::-;15708:301;;15198:821;;;16029:54;16049:10;16061:21;16029:19;:54::i;30669:160:28:-;30755:7;30781:41;30800:6;30808:13;30781:18;:41::i;26960:283::-;27031:7;27142:17;27162:36;27175:22;:20;:22::i;:::-;27162:6;;:12;:36::i;:::-;27142:56;-1:-1:-1;27215:21:28;:6;27142:56;27215:10;:21::i;1600:356:62:-;1843:17;1811:21;1211:22:37;1228:4;1211:16;:22::i;:::-;1879:70:62::1;1900:7;1909:20;1931:7;1940:8;1879:20;:70::i;9206:210:58:-:0;9252:19;9274:17;:15;:17::i;:::-;9252:39;;9306:9;9301:109;9325:11;9321:1;:15;9301:109;;;9361:19;9378:1;9361:16;:19::i;:::-;9357:42;;;9382:17;9397:1;9382:14;:17::i;:::-;9338:3;;9301:109;;33387:1184:55;33641:7;33650:16;33678:32;33713:19;:8;:17;:19::i;:::-;33678:54;-1:-1:-1;33754:55:55;33746:4;:63;;;;;;;;;33742:823;;;33848:254;33897:17;33936:20;33978:10;34010:8;34040:14;34076:8;33848:27;:254::i;:::-;33825:277;;;;;;;33742:823;34131:59;34123:4;:67;;;;;;;;;34119:446;;;34213:66;34241:17;34260:8;34270;34213:27;:66::i;34119:446::-;34308:58;34300:4;:66;;;;;;;;;34296:269;;;34389:99;34416:17;34435:20;34457:10;34469:8;34479;34389:26;:99::i;34296:269::-;34519:35;8698:3:10;34519:7:55;:35::i;:::-;33387:1184;;;;;;;;;;;:::o;29113:1183::-;29367:7;29376:16;29404:32;29439:19;:8;:17;:19::i;:::-;29404:54;-1:-1:-1;29480:55:55;29472:4;:63;;;;;;;;;29468:822;;;29574:254;29623:17;29662:20;29704:10;29736:8;29766:14;29802:8;29574:27;:254::i;29468:822::-;29857:59;29849:4;:67;;;;;;;;;29845:445;;;29939:69;29970:17;29989:8;29999;29939:30;:69::i;29845:445::-;30037:54;30029:4;:62;;;;;;;;;30025:265;;;30114:99;30141:17;30160:20;30182:10;30194:8;30204;30114:26;:99::i;30025:265::-;30244:35;7111:3:10;30244:7:55;:35::i;49224:423::-;49433:15;;49502:16;;49458:61;;49433:15;;49458:35;:61::i;:::-;49535:9;49530:111;49554:6;49550:1;:10;49530:111;;;49595:35;49604:8;49613:1;49604:11;;;;;;;;;;;;;;49617:9;49627:1;49617:12;;;;;;;;;;;;;;49595:8;:35;;:::i;:::-;49581:8;49590:1;49581:11;;;;;;;;;;;;;;;;;:49;49562:3;;49530:111;;;;49224:423;;;;:::o;11142:2145:57:-;11284:30;11328:37;11379:28;11602:142;11646:15;11675:36;11696:8;11706:4;11675:20;:36::i;:::-;11602:30;:142::i;:::-;11577:167;;11956:20;:18;:20::i;:::-;11952:1329;;;12294:57;12325:15;12342:8;12294:30;:57::i;:::-;12262:89;;12388:29;12365:52;;11952:1329;;;12438:21;:19;:21::i;:::-;12434:847;;;12672:22;12640:54;;12731:57;12762:15;12779:8;12731:30;:57::i;:::-;12708:80;;12434:847;;;13008:167;13056:15;13089:37;13110:8;13120:5;13089:20;:37::i;13008:167::-;12976:199;;13213:57;13244:15;13261:8;13213:30;:57::i;:::-;13190:80;;12434:847;11142:2145;;;;;:::o;5813:112:47:-;5867:7;945:4;5894:1;:7;5893:25;;5917:1;5893:25;;;-1:-1:-1;945:4:47;5906:7;;5813:112::o;1364:158:2:-;1432:19;1492:4;1481:34;;;;;;;;;;;;:::i;5673:1420:30:-;5835:27;6856:16;6875:32;:11;6895;6875:19;:32::i;:::-;6856:51;;6945:8;:15;6931:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6931:30:30;;6918:43;;6976:9;6971:116;6995:8;:15;6991:1;:19;6971:116;;;7047:29;7067:8;7047;7056:1;7047:11;;;;;;;;;;;;;;:19;;:29;;;;:::i;:::-;7031:10;7042:1;7031:13;;;;;;;;;;;;;;;;;:45;7012:3;;6971:116;;;;5673:1420;;;;;;:::o;1404:121:54:-;1462:7;1488:30;1492:1;1495;5172::10;1488:3:54;:30::i;3870:94:51:-;3937:12;:20;3870:94::o;11381:220:58:-;11467:4;11503:52;11515:39;11503:11;:52::i;:::-;11491:8;:64;11490:104;;;;11560:34;11585:8;11560:24;:34::i;11201:466:55:-;11419:7;11457:203;11489:5;11525:7;:14;;;11557:18;11593:17;11628:18;11457:14;:203::i;21034:1002::-;21287:7;21296;21500:27;21544:8;:15;21530:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21530:30:55;;21500:60;;21593:9;21570:10;21581:8;21570:20;;;;;;;;;;;;;:32;;;;;21613:17;21633:216;21687:10;21711:8;21733:10;21757:12;21783:20;21817:22;:20;:22::i;:::-;21633:40;:216::i;:::-;21613:236;;21881:33;21904:9;21881:8;21890;21881:18;;;;;;;;;;;;;;:22;;:33;;;;:::i;:::-;21860:8;21869;21860:18;;;;;;;;;;;;;;;;;:54;21924:26;21953:27;:12;21970:9;21953:16;:27::i;:::-;21999:9;;;;-1:-1:-1;21034:1002:55;;-1:-1:-1;;;;;;;;;21034:1002:55:o;20028:724::-;20281:7;20290;20309:17;20329:236;20382:10;20406:8;20428;20450:9;20473:12;20499:20;20533:22;:20;:22::i;:::-;20329:39;:236::i;:::-;20309:256;;20597:33;20620:9;20597:8;20606;20597:18;;;;;;;:33;20576:8;20585;20576:18;;;;;;;;;;;;;;;;;:54;20640:26;20669:27;:12;20686:9;20669:16;:27::i;:::-;20715:9;;;;-1:-1:-1;20028:724:55;;-1:-1:-1;;;;;;;;20028:724:55:o;17956:708::-;18205:7;18214;18233:16;18252:232;18305:10;18329:8;18351:7;18372:6;18392:12;18418:20;18452:22;:20;:22::i;:::-;18252:39;:232::i;:::-;18233:251;;18515:31;18537:8;18515;18524:7;18515:17;;;;;;;;;;;;;;:21;;:31;;;;:::i;:::-;18495:8;18504:7;18495:17;;;;;;;;;;;;;;;;;:51;18556:26;18585:24;:12;18602:6;18585:16;:24::i;16706:983::-;16957:7;16966;17170:26;17213:8;:15;17199:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17199:30:55;;17170:59;;17260:8;17239:9;17249:7;17239:18;;;;;;;;;;;;;:29;;;;;17279:14;17296:215;17350:10;17374:8;17396:9;17419:12;17445:20;17479:22;:20;:22::i;:::-;17296:40;:215::i;:::-;17279:232;;17542:31;17564:8;17542;17551:7;17542:17;;;;;;;:31;17522:8;17531:7;17522:17;;;;;;;;;;;;;;;;;:51;17583:26;17612:24;:12;17629:6;17612:16;:24::i;2005:617:47:-;2065:7;2102:5;;;2117:57;2126:6;;;:26;;;2151:1;2146;2136:7;:11;;;;2117:57;2189:12;2185:431;;2224:1;2217:8;;;;;2185:431;945:4;-1:-1:-1;;2582:11:47;;2581:19;;10453:463:55;10670:7;10708:201;10740:4;10774:7;:14;;;10806:18;10842:17;10877:18;10708:14;:201::i;15593:175:59:-;15662:4;15685:76;:23;4198:1;15720:40;;15685:34;:76::i;3871:161:58:-;3929:13;3945:23;;;:16;:23;;;;;;4004:21;3945:23;4004:19;:21::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;1107:122:1:-;1167:8;1205:4;1194:28;;;;;;;;;;;;:::i;35353:987:55:-;35621:7;35630:16;35659:27;35688:22;35714:33;:8;:31;:33::i;:::-;35658:89;;;;35757:71;35793:10;:17;35812:8;:15;35757:35;:71::i;:::-;35911:55;35925:10;35937:28;35950:14;35937:12;:28::i;35911:55::-;35977:19;35999:216;36053:10;36077:8;36099:10;36123:12;36149:20;36183:22;:20;:22::i;35999:216::-;35977:238;;36225:65;36249:14;36234:11;:29;;6300:3:10;36225:8:55;:65::i;:::-;36309:11;36322:10;;-1:-1:-1;35353:987:55;;-1:-1:-1;;;;;;;;35353:987:55:o;34845:410::-;35006:7;35015:16;35043:19;35065:33;:8;:31;:33::i;:::-;35043:55;;35108:27;35138:67;35169:8;35179:12;35193:11;35138:30;:67::i;36438:1143::-;36664:7;36673:16;36803:19;36824:18;36846:32;:8;:30;:32::i;:::-;36802:76;;;;36989:60;37011:8;:15;36998:10;:28;5640:3:10;36989:8:55;:60::i;:::-;37134:27;37178:8;:15;37164:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37164:30:55;;37134:60;;37291:240;37344:10;37368:8;37390:10;37414:11;37439:12;37465:20;37499:22;:20;:22::i;37291:240::-;37266:10;37277;37266:22;;;;;;;;;;;;;;;;;:265;37550:11;;;;-1:-1:-1;36438:1143:55;;-1:-1:-1;;;;;;;36438:1143:55:o;30906:989::-;31174:7;31183:16;31212:26;31240:23;31267:33;:8;:31;:33::i;:::-;31211:89;;;;31310:70;31346:8;:15;31363:9;:16;31310:35;:70::i;:::-;31463:54;31477:9;31488:28;31501:14;31488:12;:28::i;31463:54::-;31528:20;31551:215;31605:10;31629:8;31651:9;31674:12;31700:20;31734:22;:20;:22::i;31551:215::-;31528:238;;31777:68;31802:15;31786:12;:31;;6356:3:10;31777:8:55;:68::i;30368:427::-;30532:7;30541:16;30569:20;30592:36;:8;:34;:36::i;:::-;30569:59;;30638:26;30667:78;30708:8;30718:12;30732;30667:40;:78::i;31993:1221::-;32219:7;32228:16;32359:20;32381:18;32403:32;:8;:30;:32::i;:::-;32358:77;;;;32621:60;32643:8;:15;32630:10;:28;5640:3:10;32621:8:55;:60::i;:::-;32768:26;32811:8;:15;32797:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32797:30:55;;32768:59;;32923:241;32976:10;33000:8;33022:10;33046:12;33072;33098:20;33132:22;:20;:22::i;9635:737:58:-;9827:15;;9763:16;;;9827:15;9888:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9888:36:58;;9852:72;;9940:9;9935:397;9959:21;9955:1;:25;9935:397;;;10001:20;10029:13;:11;:13::i;:::-;10024:1;:18;;:30;;10053:1;10024:30;;;10045:1;10049;10045:5;10024:30;10001:53;;10090:48;10125:12;10090:34;:48::i;:::-;:121;;;;10159:17;:51;;;;;10180:30;10197:12;10180:16;:30::i;:::-;10090:231;;10310:8;10319:1;10310:11;;;;;;;;;;;;;;10090:231;;;10230:61;10247:8;10256:1;10247:11;;;;;;;;;;;;;;10260:16;:30;10277:12;10260:30;;;;;;;;;;;;10230:16;:61::i;:::-;10068:16;10085:1;10068:19;;;;;;;;;;;;;;;;;:253;-1:-1:-1;9982:3:58;;9935:397;;;-1:-1:-1;10349:16:58;9635:737;-1:-1:-1;;;;9635:737:58:o;16049:98:59:-;16125:15;16049:98;:::o;15859:100::-;15936:16;15859:100;:::o;8801:341:61:-;8887:4;8935:60;8947:47;8935:11;:60::i;:::-;8923:8;:72;8922:163;;;-1:-1:-1;9025:59:61;9037:46;9025:11;:59::i;:::-;9013:8;:71;8922:163;:213;;;;9101:34;9126:8;9101:24;:34::i;11901:905:55:-;12122:7;12194:25;12222:32;12235:18;12222:12;:32::i;:::-;12194:60;;12264:15;12282:32;12296:17;12282:13;:32::i;:::-;12264:50;;12324:16;12343:33;12357:18;12343:13;:33::i;:::-;12324:52;;12388:18;12412:28;:26;:28::i;:::-;12387:53;;;12450:17;12470:52;12501:10;12513:8;12470:30;:52::i;:::-;12450:72;;12537:9;12533:267;;;12569:91;12596:10;12608:8;12618:7;12627:8;12637:11;12650:9;12569:26;:91::i;:::-;12562:98;;;;;;;;;12533:267;12698:91;12725:10;12737:8;12747:7;12756:8;12766:11;12779:9;12698:26;:91::i;15566:2527:60:-;15828:7;;;16086:113;16110:8;:15;16106:1;:19;16086:113;;;16160:28;16176:8;16185:1;16176:11;;;;;;;;;;;;;;16160;:15;;:28;;;;:::i;:::-;16146:42;-1:-1:-1;16127:3:60;;16086:113;;;;16282:40;16339:10;:17;16325:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16325:32:60;;16282:75;;16367:33;16419:9;16414:337;16438:8;:15;16434:1;:19;16414:337;;;16474:21;16498:30;16516:11;16498:8;16507:1;16498:11;;;;;;;;;;;;;;:17;;:30;;;;:::i;:::-;16474:54;;16571:49;16608:8;16617:1;16608:11;;;;;;;;;;;;;;16571:30;16587:10;16598:1;16587:13;;;;;;;;;;;;;;16571:8;16580:1;16571:11;;;;;;;:30;:36;;:49::i;:::-;16542:23;16566:1;16542:26;;;;;;;;;;;;;:78;;;;;16662;16692:47;16725:13;16692:23;16716:1;16692:26;;;;;;;;;;;;;;:32;;:47;;;;:::i;:::-;16662:25;;:29;:78::i;:::-;16634:106;-1:-1:-1;;16455:3:60;;16414:337;;;;16864:28;16909:8;:15;16895:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16895:30:60;;16864:61;;16940:9;16935:911;16959:8;:15;16955:1;:19;16935:911;;;17183:24;17253:23;17277:1;17253:26;;;;;;;;;;;;;;17225:25;:54;17221:550;;;17299:24;17326:59;17346:38;:25;:36;:38::i;:::-;17326:8;17335:1;17326:11;;;;;;;:59;17299:86;;17403:21;17427:35;17445:16;17427:10;17438:1;17427:13;;;;;;;:35;17403:59;-1:-1:-1;17608:77:60;17629:55;17403:59;945:4:47;17649:34:60;;;17629:19;:55::i;:::-;17608:16;;:20;:77::i;:::-;17589:96;;17221:550;;;;;17743:10;17754:1;17743:13;;;;;;;;;;;;;;17724:32;;17221:550;17802:33;17818:16;17802:8;17811:1;17802:11;;;;;;;:33;17785:11;17797:1;17785:14;;;;;;;;;;;;;;;;;:50;-1:-1:-1;16976:3:60;;16935:911;;;;17856:20;17879:37;17899:3;17904:11;17879:19;:37::i;:::-;17856:60;-1:-1:-1;17926:22:60;17951:38;17856:60;17972:16;17951:20;:38::i;:::-;17926:63;;18037:49;18058:27;:14;:25;:27::i;:::-;18037:14;;:20;:49::i;18099:1903::-;18380:7;;18471:77;18531:16;18471:53;18509:14;18471:31;18509:14;18490:11;18471:18;:31::i;:53::-;:59;;:77::i;:::-;18448:100;;18603:28;18634:148;18697:3;18714:8;18736:12;18762:10;18634:49;:148::i;:::-;18603:179;;18792:27;18822:46;18847:20;18822:8;18831:10;18822:20;;;;;;;:46;18792:76;;19013:19;19051:9;19046:113;19070:8;:15;19066:1;:19;19046:113;;;19120:28;19136:8;19145:1;19136:11;;;;;;;19120:28;19106:42;-1:-1:-1;19087:3:60;;19046:113;;;;19314:21;19338:41;19367:11;19338:8;19347:10;19338:20;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;19314:65;;19389:25;19417:26;:13;:24;:26::i;:::-;19389:54;-1:-1:-1;19654:21:60;19678:44;:19;19389:54;19678:25;:44::i;:::-;19654:68;-1:-1:-1;19732:24:60;19759:38;:19;19654:68;19759:23;:38::i;:::-;19732:65;-1:-1:-1;19916:79:60;19937:57;:13;945:4:47;19959:34:60;;;19937:21;:57::i;:::-;19916:16;;:20;:79::i;:::-;19909:86;;;;;;;;;;18099:1903;;;;;;;;;:::o;13693:1695::-;13975:7;;14063:78;14124:16;14063:54;14102:14;14063:32;14102:14;14082:12;14063:18;:32::i;:78::-;14040:101;;14196:28;14227:148;14290:3;14307:8;14329:12;14355:10;14227:49;:148::i;:::-;14196:179;;14385:26;14414:46;14439:8;14448:10;14439:20;;;;;;;;;;;;;;14414;:24;;:46;;;;:::i;:::-;14385:75;;14605:19;14643:9;14638:113;14662:8;:15;14658:1;:19;14638:113;;;14712:28;14728:8;14737:1;14728:11;;;;;;;14712:28;14698:42;-1:-1:-1;14679:3:60;;14638:113;;;;14905:21;14929:41;14958:11;14929:8;14938:10;14929:20;;;;;;;:41;14905:65;;14980:25;15008:26;:13;:24;:26::i;:::-;14980:54;-1:-1:-1;15044:21:60;15068:43;:18;14980:54;15068:24;:43::i;:::-;15044:67;-1:-1:-1;15121:24:60;15148:37;:18;15044:67;15148:22;:37::i;:::-;15121:64;-1:-1:-1;15304:77:60;15325:55;:13;945:4:47;15345:34:60;;;15325:19;:55::i;11034:2653::-;11295:7;;;11557:113;11581:8;:15;11577:1;:19;11557:113;;;11631:28;11647:8;11656:1;11647:11;;;;;;;11631:28;11617:42;-1:-1:-1;11598:3:60;;11557:113;;;;11753:37;11807:9;:16;11793:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11793:31:60;;11753:71;;11895:30;11944:9;11939:330;11963:8;:15;11959:1;:19;11939:330;;;11999:21;12023:32;12043:11;12023:8;12032:1;12023:11;;;;;;;:32;11999:56;;12095:50;12133:8;12142:1;12133:11;;;;;;;;;;;;;;12095:29;12111:9;12121:1;12111:12;;;;;;;;;;;;;;12095:8;12104:1;12095:11;;;;;;;:29;:37;;:50::i;:::-;12069:20;12090:1;12069:23;;;;;;;;;;;;;:76;;;;;12184:74;12211:46;12243:13;12211:20;12232:1;12211:23;;;;;;;12184:74;12159:99;-1:-1:-1;;11980:3:60;;11939:330;;;;12382:28;12427:8;:15;12413:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12413:30:60;;12382:61;;12458:9;12453:826;12477:8;:15;12473:1;:19;12453:826;;;12513:26;12680:22;12654:20;12675:1;12654:23;;;;;;;;;;;;;;:48;12650:552;;;12722:24;12749:63;12769:42;:22;945:4:47;12769:26:60;:42::i;12749:63::-;12722:90;;12830:21;12854:34;12871:16;12854:9;12864:1;12854:12;;;;;;;:34;12830:58;-1:-1:-1;13036:79:60;13057:57;12830:58;945:4:47;13079:34:60;;;13057:21;:57::i;13036:79::-;13015:100;;12650:552;;;;;13175:9;13185:1;13175:12;;;;;;;;;;;;;;13154:33;;12650:552;13233:35;13249:18;13233:8;13242:1;13233:11;;;;;;;:35;13216:11;13228:1;13216:14;;;;;;;;;;;;;;;;;:52;-1:-1:-1;12494:3:60;;12453:826;;;;13289:20;13312:37;13332:3;13337:11;13312:19;:37::i;:::-;13289:60;-1:-1:-1;13359:22:60;13384:38;13289:60;13405:16;13384:20;:38::i;:::-;13359:63;;945:4:47;13522:14:60;:31;13518:163;;;13576:55;:14;13599:31;;;13576:22;:55::i;:::-;13569:62;;;;;;;;;;13518:163;13669:1;13662:8;;;;;;;;;;2475:253:1;2573:27;2602:22;2684:4;2673:48;;;;;;;;;;;;:::i;:::-;2640:81;;;;-1:-1:-1;2475:253:1;-1:-1:-1;;;2475:253:1:o;2302:167::-;2376:19;2436:4;2425:37;;;;;;;;;;;;:::i;2089:207::-;2162:19;2183:18;2254:4;2243:46;;;;;;;;;;;;:::i;1423:253::-;1521:26;1549:23;1632:4;1621:48;;;;;;;;;;;;:::i;1897:172::-;1974:20;2036:4;2025:37;;;;;;;;;;;;:::i;22225:1259:60:-;22384:16;23211;23230:28;:12;23249:8;23230:18;:28::i;:::-;23211:47;;23269:26;23312:8;:15;23298:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23298:30:60;;23269:59;;23343:9;23338:113;23362:8;:15;23358:1;:19;23338:113;;;23413:27;23431:8;23413;23422:1;23413:11;;;;;;;:27;23398:9;23408:1;23398:12;;;;;;;;;;;;;;;;;:42;23379:3;;23338:113;;;-1:-1:-1;23468:9:60;22225:1259;-1:-1:-1;;;;;22225:1259:60:o;1682:209:1:-;1755:20;1777:18;1849:4;1838:46;;;;;;;;;;;;:::i;10472:188:58:-;10552:7;10578:75;10591:37;10600:7;10609:18;:5;:16;:18::i;10591:37::-;10630:22;:5;:20;:22::i;12351:321:28:-;12437:4;12485:47;12497:34;12485:11;:47::i;:::-;12473:8;:59;12472:143;;;-1:-1:-1;12562:52:28;12574:39;12562:11;:52::i;:::-;12550:8;:64;12472:143;:193;;;;12631:34;12656:8;12631:24;:34::i;6228:2287:60:-;6476:7;7890:41;7917:13;7890:8;7899:12;7890:22;;;;;;;:41;7865:8;7874:12;7865:22;;;;;;;;;;;;;:66;;;;;7942:23;7968:167;8031:22;8067:8;8089:9;8112:13;7968:49;:167::i;:::-;7942:193;;8426:13;8401:8;8410:12;8401:22;;;;;;;;;;;;;;:38;8376:8;8385:12;8376:22;;;;;;;;;;;;;:63;;;;;8457:51;8506:1;8457:44;8485:15;8457:8;8466:13;8457:23;;;;;;;8733:2295;8982:7;10394:43;10422:14;10394:8;10403:13;10394:23;;;;;;;:43;10368:8;10377:13;10368:23;;;;;;;;;;;;;:69;;;;;10448:22;10473:166;10536:22;10572:8;10594:9;10617:12;10473:49;:166::i;:::-;10448:191;;10940:14;10914:8;10923:13;10914:23;;;;;;;;;;;;;;:40;10888:8;10897:13;10888:23;;;;;;;;;;;;;:66;;;;;10972:49;11019:1;10972:42;10991:8;11000:12;10991:22;;;;;;;;;;;;;;10972:14;:18;;:42;;;;:::i;20136:2083::-;20354:7;20410:21;20459:8;:15;20434:22;:40;20410:64;;20484:11;20498:8;20507:1;20498:11;;;;;;;;;;;;;;20484:25;;20519:11;20547:8;:15;20533:8;20542:1;20533:11;;;;;;;;;;;;;;:29;20519:43;;20577:9;20589:1;20577:13;;20572:195;20596:8;:15;20592:1;:19;20572:195;;;20638:78;20651:53;20660:26;20669:3;20674:8;20683:1;20674:11;;;;;;;;;;;;;;20660:8;:26::i;:::-;20688:8;:15;20651:8;:53::i;:::-;20706:9;20638:12;:78::i;:::-;20632:84;;20736:20;20744:8;20753:1;20744:11;;;;;;;20736:20;20730:26;-1:-1:-1;20613:3:60;;20572:195;;;;20906:8;20915:10;20906:20;;;;;;;;;;;;;;20900:3;:26;20894:32;;20937:12;20952:30;20961:9;20972;20952:8;:30::i;:::-;20937:45;;21050:9;21062:138;21084:72;21093:46;21104:4;21110:28;21119:13;21134:3;21110:8;:28::i;21093:46::-;1372:3;21084:8;:72::i;:::-;21170:8;21179:10;21170:20;;;;;;;21062:138;21050:150;;21210:9;21222:73;21230:64;21239:38;21252:9;21263:13;21239:12;:38::i;21230:64::-;21222:3;;:7;:73::i;:::-;21210:85;-1:-1:-1;21348:24:60;;21546:41;21557:11;:4;21566:1;21557:8;:11::i;:::-;21570:16;:9;21584:1;21570:13;:16::i;21546:41::-;21523:64;;21603:9;21598:555;21622:3;21618:1;:7;21598:555;;;21665:12;21646:31;;21707:150;21735:43;21776:1;21735:36;21744:12;21758;21735:8;:36::i;:43::-;21796:47;21833:9;21796:32;21826:1;21796:25;21805:12;21819:1;21796:8;:25::i;21707:150::-;21692:165;;21891:16;21876:12;:31;21872:271;;;21966:1;21946:16;21931:12;:31;:36;21927:102;;-1:-1:-1;21998:12:60;-1:-1:-1;21991:19:60;;-1:-1:-1;;;;;;;21991:19:60;21927:102;21872:271;;;22088:1;22072:12;22053:16;:31;:36;22049:94;;-1:-1:-1;22116:12:60;-1:-1:-1;22109:19:60;;-1:-1:-1;;;;;;;22109:19:60;22049:94;21627:3;;21598:555;;;;22163:49;7828:3:10;22163:7:60;:49::i;:::-;20136:2083;;;;;;;;;;;;;;:::o;2494:103:29:-;-1:-1:-1;2562:4:29;;2494:103::o;-1:-1:-1:-;;5:130;72:20;;97:33;72:20;97:33;:::i;1102:707::-;;1219:3;1212:4;1204:6;1200:17;1196:27;1186:2;;-1:-1;;1227:12;1186:2;1274:6;1261:20;1296:80;1311:64;1368:6;1311:64;:::i;:::-;1296:80;:::i;:::-;1404:21;;;1287:89;-1:-1;1448:4;1461:14;;;;1436:17;;;1550;;;1541:27;;;;1538:36;-1:-1;1535:2;;;1587:1;;1577:12;1535:2;1612:1;1597:206;1622:6;1619:1;1616:13;1597:206;;;6497:20;;1690:50;;1754:14;;;;1782;;;;1644:1;1637:9;1597:206;;1835:722;;1963:3;1956:4;1948:6;1944:17;1940:27;1930:2;;-1:-1;;1971:12;1930:2;2011:6;2005:13;2033:80;2048:64;2105:6;2048:64;:::i;2033:80::-;2141:21;;;2024:89;-1:-1;2185:4;2198:14;;;;2173:17;;;2287;;;2278:27;;;;2275:36;-1:-1;2272:2;;;2324:1;;2314:12;2272:2;2349:1;2334:217;2359:6;2356:1;2353:13;2334:217;;;6645:13;;2427:61;;2502:14;;;;2530;;;;2381:1;2374:9;2334:217;;3104:440;;3205:3;3198:4;3190:6;3186:17;3182:27;3172:2;;-1:-1;;3213:12;3172:2;3260:6;3247:20;40277:18;40269:6;40266:30;40263:2;;;-1:-1;;40299:12;40263:2;3282:64;40440:4;-1:-1;;3198:4;40357:6;40353:17;40349:33;40430:15;3282:64;:::i;:::-;3273:73;;3366:6;3359:5;3352:21;3470:3;40440:4;3461:6;3394;3452:16;;3449:25;3446:2;;;3487:1;;3477:12;3446:2;45189:6;40440:4;3394:6;3390:17;40440:4;3428:5;3424:16;45166:30;45245:1;45227:16;;;40440:4;45227:16;45220:27;3428:5;3165:379;-1:-1;;3165:379::o;4071:156::-;4160:13;;46690:1;46680:12;;46670:2;;46706:1;;46696:12;4234:162;4317:20;;4342:49;4317:20;4342:49;:::i;4403:156::-;4492:13;;46919:1;46909:12;;46899:2;;46935:1;;46925:12;6978:241;;7082:2;7070:9;7061:7;7057:23;7053:32;7050:2;;;-1:-1;;7088:12;7050:2;85:6;72:20;97:33;124:5;97:33;:::i;7226:366::-;;;7347:2;7335:9;7326:7;7322:23;7318:32;7315:2;;;-1:-1;;7353:12;7315:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7405:63;-1:-1;7505:2;7544:22;;72:20;97:33;72:20;97:33;:::i;:::-;7513:63;;;;7309:283;;;;;:::o;7599:491::-;;;;7737:2;7725:9;7716:7;7712:23;7708:32;7705:2;;;-1:-1;;7743:12;7705:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7795:63;-1:-1;7895:2;7934:22;;72:20;97:33;72:20;97:33;:::i;:::-;7699:391;;7903:63;;-1:-1;;;8003:2;8042:22;;;;6497:20;;7699:391::o;8097:991::-;;;;;;;;8301:3;8289:9;8280:7;8276:23;8272:33;8269:2;;;-1:-1;;8308:12;8269:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;8360:63;-1:-1;8460:2;8499:22;;72:20;97:33;72:20;97:33;:::i;:::-;8468:63;-1:-1;8568:2;8607:22;;6497:20;;-1:-1;8676:2;8715:22;;6497:20;;-1:-1;8784:3;8822:22;;6773:20;6798:31;6773:20;6798:31;:::i;:::-;8263:825;;;;-1:-1;8263:825;;;;8793:61;8891:3;8931:22;;2898:20;;-1:-1;9000:3;9040:22;;;2898:20;;8263:825;-1:-1;;8263:825::o;9095:366::-;;;9216:2;9204:9;9195:7;9191:23;9187:32;9184:2;;;-1:-1;;9222:12;9184:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;9274:63;9374:2;9413:22;;;;6497:20;;-1:-1;;;9178:283::o;9468:823::-;;;;9682:2;9670:9;9661:7;9657:23;9653:32;9650:2;;;-1:-1;;9688:12;9650:2;9739:17;9733:24;9777:18;;9769:6;9766:30;9763:2;;;-1:-1;;9799:12;9763:2;9916:6;9905:9;9901:22;;;452:3;445:4;437:6;433:17;429:27;419:2;;-1:-1;;460:12;419:2;500:6;494:13;522:95;537:79;609:6;537:79;:::i;522:95::-;623:16;659:6;652:5;645:21;689:4;;706:3;702:14;695:21;;689:4;681:6;677:17;811:3;689:4;;795:6;791:17;681:6;782:27;;779:36;776:2;;;-1:-1;;818:12;776:2;-1:-1;844:10;;838:232;863:6;860:1;857:13;838:232;;;3999:6;3993:13;4011:48;4053:5;4011:48;:::i;:::-;931:76;;885:1;878:9;;;;;1021:14;;;;1049;;838:232;;;-1:-1;9976:18;;9970:25;9819:114;;-1:-1;9970:25;-1:-1;;;10004:30;;;10001:2;;;-1:-1;;10037:12;10001:2;;10067:89;10148:7;10139:6;10128:9;10124:22;10067:89;:::i;:::-;10057:99;;;10193:2;10247:9;10243:22;6645:13;10201:74;;9644:647;;;;;:::o;10298:377::-;;10427:2;10415:9;10406:7;10402:23;10398:32;10395:2;;;-1:-1;;10433:12;10395:2;10491:17;10478:31;10529:18;10521:6;10518:30;10515:2;;;-1:-1;;10551:12;10515:2;10581:78;10651:7;10642:6;10631:9;10627:22;10581:78;:::i;10682:257::-;;10794:2;10782:9;10773:7;10769:23;10765:32;10762:2;;;-1:-1;;10800:12;10762:2;2777:6;2771:13;2789:30;2813:5;2789:30;:::i;10946:241::-;;11050:2;11038:9;11029:7;11025:23;11021:32;11018:2;;;-1:-1;;11056:12;11018:2;-1:-1;2898:20;;11012:175;-1:-1;11012:175::o;11194:1235::-;;;;;;;;11434:3;11422:9;11413:7;11409:23;11405:33;11402:2;;;-1:-1;;11441:12;11402:2;2911:6;2898:20;11493:63;;11593:2;11636:9;11632:22;72:20;97:33;124:5;97:33;:::i;:::-;11601:63;-1:-1;11701:2;11740:22;;72:20;97:33;72:20;97:33;:::i;:::-;11709:63;-1:-1;11837:2;11822:18;;11809:32;11861:18;11850:30;;;11847:2;;;-1:-1;;11883:12;11847:2;11913:78;11983:7;11974:6;11963:9;11959:22;11913:78;:::i;:::-;11903:88;;12028:3;12072:9;12068:22;6497:20;12037:63;;12137:3;12181:9;12177:22;6497:20;12146:63;;12274:3;12263:9;12259:19;12246:33;12232:47;;11861:18;12291:6;12288:30;12285:2;;;-1:-1;;12321:12;12285:2;;12351:62;12405:7;12396:6;12385:9;12381:22;12351:62;:::i;:::-;12341:72;;;11396:1033;;;;;;;;;;:::o;12436:239::-;;12539:2;12527:9;12518:7;12514:23;12510:32;12507:2;;;-1:-1;;12545:12;12507:2;3047:6;3034:20;42981:66;46255:5;42970:78;46231:5;46228:34;46218:2;;-1:-1;;46266:12;12682:303;;12817:2;12805:9;12796:7;12792:23;12788:32;12785:2;;;-1:-1;;12823:12;12785:2;3656:6;3650:13;3668:53;3715:5;3668:53;:::i;13270:500::-;;;13415:2;13403:9;13394:7;13390:23;13386:32;13383:2;;;-1:-1;;13421:12;13383:2;3828:6;3815:20;3840:48;3882:5;3840:48;:::i;:::-;13473:78;-1:-1;13616:2;13601:18;;13588:32;13640:18;13629:30;;13626:2;;;-1:-1;;13662:12;13626:2;13692:62;13746:7;13737:6;13726:9;13722:22;13692:62;:::i;:::-;13682:72;;;13377:393;;;;;:::o;14180:285::-;;14306:2;14294:9;14285:7;14281:23;14277:32;14274:2;;;-1:-1;;14312:12;14274:2;14374:75;14441:7;14417:22;14374:75;:::i;14472:686::-;;;;14657:2;14645:9;14636:7;14632:23;14628:32;14625:2;;;-1:-1;;14663:12;14625:2;14725:75;14792:7;14768:22;14725:75;:::i;:::-;14715:85;;14858:2;14847:9;14843:18;14837:25;14882:18;14874:6;14871:30;14868:2;;;-1:-1;;14904:12;14868:2;14934:89;15015:7;15006:6;14995:9;14991:22;14934:89;:::i;15165:421::-;;;15308:2;15296:9;15287:7;15283:23;15279:32;15276:2;;;-1:-1;;15314:12;15276:2;15376:75;15443:7;15419:22;15376:75;:::i;:::-;15366:85;;15488:2;15542:9;15538:22;6645:13;15496:74;;15270:316;;;;;:::o;15593:557::-;;;;15753:2;15741:9;15732:7;15728:23;15724:32;15721:2;;;-1:-1;;15759:12;15721:2;15821:75;15888:7;15864:22;15821:75;:::i;:::-;15811:85;;15933:2;15987:9;15983:22;6645:13;15941:74;;16052:2;16106:9;16102:22;6645:13;16060:74;;15715:435;;;;;:::o;16157:392::-;;;16291:2;16279:9;16270:7;16266:23;16262:32;16259:2;;;-1:-1;;16297:12;16259:2;4330:6;4317:20;4342:49;4385:5;4342:49;:::i;:::-;16349:79;-1:-1;16465:2;16501:22;;2629:20;2654:30;2629:20;2654:30;:::i;16556:398::-;;;16693:2;16681:9;16672:7;16668:23;16664:32;16661:2;;;-1:-1;;16699:12;16661:2;4330:6;4317:20;4342:49;4385:5;4342:49;:::i;16961:285::-;;17087:2;17075:9;17066:7;17062:23;17058:32;17055:2;;;-1:-1;;17093:12;17055:2;17155:75;17222:7;17198:22;17155:75;:::i;17253:550::-;;;17421:2;17409:9;17400:7;17396:23;17392:32;17389:2;;;-1:-1;;17427:12;17389:2;17489:75;17556:7;17532:22;17489:75;:::i;:::-;17479:85;;17622:2;17611:9;17607:18;17601:25;17646:18;17638:6;17635:30;17632:2;;;-1:-1;;17668:12;17632:2;17698:89;17779:7;17770:6;17759:9;17755:22;17698:89;:::i;17810:686::-;;;;17995:2;17983:9;17974:7;17970:23;17966:32;17963:2;;;-1:-1;;18001:12;17963:2;18063:75;18130:7;18106:22;18063:75;:::i;18503:421::-;;;18646:2;18634:9;18625:7;18621:23;18617:32;18614:2;;;-1:-1;;18652:12;18614:2;18714:75;18781:7;18757:22;18714:75;:::i;18931:557::-;;;;19091:2;19079:9;19070:7;19066:23;19062:32;19059:2;;;-1:-1;;19097:12;19059:2;19159:75;19226:7;19202:22;19159:75;:::i;19495:897::-;;;;;19704:3;19692:9;19683:7;19679:23;19675:33;19672:2;;;-1:-1;;19711:12;19672:2;19769:17;19756:31;19807:18;;19799:6;19796:30;19793:2;;;-1:-1;;19829:12;19793:2;19924:6;19913:9;19909:22;;;4889:6;;4877:9;4872:3;4868:19;4864:32;4861:2;;;-1:-1;;4899:12;4861:2;4927:22;4889:6;4927:22;:::i;:::-;4918:31;;5031:62;5089:3;5065:22;5031:62;:::i;:::-;5013:16;5006:88;5191:64;5251:3;5158:2;5231:9;5227:22;5191:64;:::i;:::-;5158:2;5177:5;5173:16;5166:90;5354:64;5414:3;5321:2;5394:9;5390:22;5354:64;:::i;:::-;5321:2;5340:5;5336:16;5329:90;5482:2;5540:9;5536:22;6497:20;5482:2;5501:5;5497:16;5490:75;19704:3;5687:9;5683:22;2898:20;19704:3;5648:5;5644:16;5637:75;5784:3;5843:9;5839:22;6497:20;5784:3;5804:5;5800:16;5793:75;5963:49;6008:3;5929;5988:9;5984:22;5963:49;:::i;:::-;5929:3;5949:5;5945:16;5938:75;6106:49;6151:3;6072;6131:9;6127:22;6106:49;:::i;:::-;6072:3;6092:5;6088:16;6081:75;6249:3;;6238:9;6234:19;6221:33;19807:18;6266:6;6263:30;6260:2;;;-1:-1;;6296:12;6260:2;6343:58;6397:3;6388:6;6377:9;6373:22;6343:58;:::i;:::-;6249:3;6327:5;6323:18;6316:86;;;19849:92;;;;5158:2;19995:9;19991:18;19978:32;19964:46;;19807:18;20022:6;20019:30;20016:2;;;-1:-1;;20052:12;20016:2;;20082:78;20152:7;20143:6;20132:9;20128:22;20082:78;:::i;:::-;19666:726;;20072:88;;-1:-1;;;;5321:2;20236:22;;6497:20;;5482:2;20344:22;6497:20;;19666:726;-1:-1;19666:726::o;20647:263::-;;20762:2;20750:9;20741:7;20737:23;20733:32;20730:2;;;-1:-1;;20768:12;20730:2;-1:-1;6645:13;;20724:186;-1:-1;20724:186::o;20917:366::-;;;21038:2;21026:9;21017:7;21013:23;21009:32;21006:2;;;-1:-1;;21044:12;21006:2;-1:-1;;6497:20;;;21196:2;21235:22;;;6497:20;;-1:-1;21000:283::o;21290:672::-;;;;;21456:3;21444:9;21435:7;21431:23;21427:33;21424:2;;;-1:-1;;21463:12;21424:2;6651:6;6645:13;21515:74;;21626:2;21680:9;21676:22;6645:13;21634:74;;21745:2;21799:9;21795:22;6645:13;21753:74;;21864:2;21918:9;21914:22;220:13;238:33;265:5;238:33;:::i;:::-;21418:544;;;;-1:-1;21418:544;;-1:-1;;21418:544::o;21969:259::-;;22082:2;22070:9;22061:7;22057:23;22053:32;22050:2;;;-1:-1;;22088:12;22050:2;6923:6;6917:13;6935:31;6960:5;6935:31;:::i;22235:395::-;;;22365:2;22353:9;22344:7;22340:23;22336:32;22333:2;;;-1:-1;;22371:12;22333:2;6923:6;6917:13;6935:31;6960:5;6935:31;:::i;:::-;22532:2;22582:22;;;;6645:13;22423:72;;6645:13;;-1:-1;;;22327:303::o;24043:690::-;;24236:5;40923:12;41747:6;41742:3;41735:19;41784:4;;41779:3;41775:14;24248:93;;41784:4;24412:5;40598:14;-1:-1;24451:260;24476:6;24473:1;24470:13;24451:260;;;24537:13;;24923:37;;23015:14;;;;41475;;;;24498:1;24491:9;24451:260;;;-1:-1;24717:10;;24167:566;-1:-1;;;;;24167:566::o;25627:343::-;;25769:5;40923:12;41747:6;41742:3;41735:19;-1:-1;45334:101;45348:6;45345:1;45342:13;45334:101;;;41784:4;45415:11;;;;;45409:18;45396:11;;;;;45389:39;45363:10;45334:101;;;45450:6;45447:1;45444:13;45441:2;;;-1:-1;41784:4;45506:6;41779:3;45497:16;;45490:27;45441:2;-1:-1;45787:2;45767:14;-1:-1;;45763:28;25926:39;;;;41784:4;25926:39;;25717:253;-1:-1;;25717:253::o;27941:387::-;24923:37;;;42981:66;42970:78;28192:2;28183:12;;25218:56;28292:11;;;28083:245::o;28335:291::-;;45189:6;45184:3;45179;45166:30;45227:16;;45220:27;;;45227:16;28479:147;-1:-1;28479:147::o;28633:659::-;27486:66;27466:87;;27451:1;27572:11;;24923:37;;;;29144:12;;;24923:37;29255:12;;;28878:414::o;29299:222::-;-1:-1;;;;;43353:54;;;;23114:37;;29426:2;29411:18;;29397:124::o;29528:412::-;29726:2;29740:47;;;40923:12;;29711:18;;;41735:19;;;29528:412;;29726:2;40598:14;;;;41775;;;;29528:412;23680:302;23705:6;23702:1;23699:13;23680:302;;;23766:13;;-1:-1;;;;;43353:54;26068:70;;41475:14;;;;22833;;;;23727:1;23720:9;23680:302;;;-1:-1;29793:137;;29697:243;-1:-1;;;;;;29697:243::o;29947:370::-;;30124:2;30145:17;30138:47;30199:108;30124:2;30113:9;30109:18;30293:6;30199:108;:::i;30324:629::-;;30579:2;30600:17;30593:47;30654:108;30579:2;30568:9;30564:18;30748:6;30654:108;:::i;:::-;30810:9;30804:4;30800:20;30795:2;30784:9;30780:18;30773:48;30835:108;30938:4;30929:6;30835:108;:::i;30960:210::-;42804:13;;42797:21;24806:34;;31081:2;31066:18;;31052:118::o;31177:432::-;42804:13;;42797:21;24806:34;;31512:2;31497:18;;24923:37;;;;31595:2;31580:18;;24923:37;31354:2;31339:18;;31325:284::o;31616:222::-;24923:37;;;31743:2;31728:18;;31714:124::o;31845:444::-;24923:37;;;-1:-1;;;;;43353:54;;;32192:2;32177:18;;23114:37;43353:54;32275:2;32260:18;;23114:37;32028:2;32013:18;;31999:290::o;32296:780::-;24923:37;;;-1:-1;;;;;43353:54;;;32728:2;32713:18;;23114:37;43353:54;;;;32811:2;32796:18;;23114:37;32894:2;32879:18;;24923:37;32977:3;32962:19;;24923:37;;;;33061:3;33046:19;;24923:37;32563:3;32548:19;;32534:542::o;33083:668::-;24923:37;;;33487:2;33472:18;;24923:37;;;;33570:2;33555:18;;24923:37;;;;33653:2;33638:18;;24923:37;-1:-1;;;;;43353:54;33736:3;33721:19;;23114:37;33322:3;33307:19;;33293:458::o;33758:417::-;;24953:5;24930:3;24923:37;33931:2;34049;34038:9;34034:18;34027:48;34089:76;33931:2;33920:9;33916:18;34151:6;34089:76;:::i;34182:363::-;24923:37;;;-1:-1;;;;;43353:54;34531:2;34516:18;;26068:70;34352:2;34337:18;;34323:222::o;34552:548::-;24923:37;;;43569:4;43558:16;;;;34920:2;34905:18;;27894:35;35003:2;34988:18;;24923:37;35086:2;35071:18;;24923:37;34759:3;34744:19;;34730:370::o;35926:310::-;;36073:2;36094:17;36087:47;36148:78;36073:2;36062:9;36058:18;36212:6;36148:78;:::i;36472:481::-;;24953:5;24930:3;24923:37;36677:2;36795;36784:9;36780:18;36773:48;36835:108;36677:2;36666:9;36662:18;36929:6;36835:108;:::i;36960:704::-;;24953:5;24930:3;24923:37;37221:3;37340:2;37329:9;37325:18;37318:48;37380:108;37221:3;37210:9;37206:19;37474:6;37380:108;:::i;:::-;37567:2;37552:18;;24923:37;;;;-1:-1;37650:2;37635:18;24923:37;37372:116;37192:472;-1:-1;;37192:472::o;37671:432::-;24923:37;;;42804:13;;42797:21;38006:2;37991:18;;24806:34;38089:2;38074:18;;24923:37;37848:2;37833:18;;37819:284::o;38110:333::-;24923:37;;;38429:2;38414:18;;24923:37;38265:2;38250:18;;38236:207::o;38450:556::-;24923:37;;;38826:2;38811:18;;24923:37;;;;38909:2;38894:18;;24923:37;38992:2;38977:18;;24923:37;38661:3;38646:19;;38632:374::o;39013:214::-;43569:4;43558:16;;;;27894:35;;39136:2;39121:18;;39107:120::o;39234:256::-;39296:2;39290:9;39322:17;;;39397:18;39382:34;;39418:22;;;39379:62;39376:2;;;39454:1;;39444:12;39376:2;39296;39463:22;39274:216;;-1:-1;39274:216::o;39497:319::-;;39671:18;39663:6;39660:30;39657:2;;;-1:-1;;39693:12;39657:2;-1:-1;39738:4;39726:17;;;39791:15;;39594:222::o;45804:117::-;-1:-1;;;;;45891:5;43353:54;45866:5;45863:35;45853:2;;45912:1;;45902:12;45928:111;46009:5;42804:13;42797:21;45987:5;45984:32;45974:2;;46030:1;;46020:12;46722:110;46807:1;46800:5;46797:12;46787:2;;46823:1;;46813:12;47189:113;43569:4;47272:5;43558:16;47249:5;47246:33;47236:2;;47293:1;;47283:12" + }, + "methodIdentifiers": { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": "ddf4627b", + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "beforeJoinExit(uint256[])": "cd6ceda8", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getActualSupply()": "876f303b", + "getAmplificationParameter()": "6daccffa", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getLastJoinExitData()": "3c975d51", + "getMinimumBpt()": "04842d4c", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeePercentageCache(uint256)": "70464016", + "getProtocolFeesCollector()": "d2946c2b", + "getProtocolSwapFeeDelegation()": "15b0015b", + "getRate()": "679aefce", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getTokenRate(address)": "54dea00a", + "getTokenRateCache(address)": "7f1260d1", + "getVault()": "8d928af8", + "getVirtualSupply()": "de82cd34", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isOwnerOnlyAction(bytes32)": "e78af078", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "mockCacheTokenRateIfNecessary(uint256)": "c6e9407e", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "onSwap((uint8,address,address,uint256,bytes32,uint256,address,address,bytes),uint256[],uint256,uint256)": "01ec954a", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setFailureCode(uint8,uint256)": "7b549244", + "setFailureMode(uint8,bool)": "1ea046c1", + "setSwapFeePercentage(uint256)": "38e9922e", + "setTokenRateCacheDuration(address,uint256)": "f4b7964d", + "startAmplificationParameterUpdate(uint256,uint256)": "2f1a0bc9", + "stopAmplificationParameterUpdate()": "eb0f24d6", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a", + "updateProtocolFeePercentageCache()": "0da0669c", + "updateTokenRateCache(address)": "2df2c7c0", + "version()": "54fd4d50" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeePercentagesProvider\",\"name\":\"protocolFeeProvider\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRateCacheDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"exemptFromYieldProtocolFeeFlags\",\"type\":\"bool[]\"},{\"internalType\":\"uint256\",\"name\":\"amplificationParameter\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowDuration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"internalType\":\"struct ComposableStablePool.NewPoolParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentValue\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeePercentageCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"TokenRateCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRateProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cacheDuration\",\"type\":\"uint256\"}],\"name\":\"TokenRateProviderSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"registeredBalances\",\"type\":\"uint256[]\"}],\"name\":\"beforeJoinExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"preJoinExitSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"currentAmp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preJoinExitInvariant\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActualSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmplificationParameter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isUpdating\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"precision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastJoinExitData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastJoinExitAmplification\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitInvariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumBpt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getProtocolFeePercentageCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolSwapFeeDelegation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRateCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expires\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVirtualSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"name\":\"isOwnerOnlyAction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"mockCacheTokenRateIfNecessary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum IVault.SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IPoolSwapStructs.SwapRequest\",\"name\":\"swapRequest\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum MockFailureModes.FailureMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"errorCode\",\"type\":\"uint256\"}],\"name\":\"setFailureCode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum MockFailureModes.FailureMode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"failed\",\"type\":\"bool\"}],\"name\":\"setFailureMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setTokenRateCacheDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rawEndValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"startAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateProtocolFeePercentageCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateTokenRateCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getActualSupply()\":{\"details\":\"Returns the effective BPT supply. In other pools, this would be the same as `totalSupply`, but there are two key differences here: - this pool pre-mints BPT and holds it in the Vault as a token, and as such we need to subtract the Vault's balance to get the total \\\"circulating supply\\\". This is called the 'virtualSupply'. - the Pool owes debt to the Protocol in the form of unminted BPT, which will be minted immediately before the next join or exit. We need to take these into account since, even if they don't yet exist, they will effectively be included in any Pool operation that involves BPT. In the vast majority of cases, this function should be used instead of `totalSupply()`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getMinimumBpt()\":{\"details\":\"This amount is minted and immediately burned on pool initialization, so that the total supply (and therefore post-exit token balances), can never be zero. This keeps the math well-behaved when liquidity is low. (It also provides an easy way to check whether a pool has been initialized, to ensure this is only done once.)\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeePercentageCache(uint256)\":{\"details\":\"Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the ProtocolFeePercentagesProvider.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getProtocolSwapFeeDelegation()\":{\"details\":\"Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider.\"},\"getRate()\":{\"details\":\"This function returns the appreciation of BPT relative to the underlying tokens, as an 18 decimal fixed point number. It is simply the ratio of the invariant to the BPT supply. The total supply is initialized to equal the invariant, so this value starts at one. During Pool operation the invariant always grows and shrinks either proportionally to the total supply (in scenarios with no price impact, e.g. proportional joins), or grows faster and shrinks more slowly than it (whenever swap fees are collected or the token rates increase). Therefore, the rate is a monotonically increasing function. WARNING: since this function reads balances directly from the Vault, it is potentially subject to manipulation via reentrancy. However, this can only happen if one of the tokens in the Pool contains some form of callback behavior in the `transferFrom` function (like ERC777 tokens do). These tokens are strictly incompatible with the Vault and Pool design, and are not safe to be used.\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"getTokenRate(address)\":{\"details\":\"Returns the rate for a given token. All token rates are fixed-point values with 18 decimals. If there is no rate provider for the provided token, it returns FixedPoint.ONE.\"},\"getTokenRateCache(address)\":{\"details\":\"Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate provider.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"setTokenRateCacheDuration(address,uint256)\":{\"details\":\"Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. Note this function also updates the current cached value.\",\"params\":{\"duration\":\"Number of seconds until the current token rate is fetched again.\"}},\"startAmplificationParameterUpdate(uint256,uint256)\":{\"details\":\"Begin changing the amplification parameter to `rawEndValue` over time. The value will change linearly until `endTime` is reached, when it will be `rawEndValue`. NOTE: Internally, the amplification parameter is represented using higher precision. The values returned by `getAmplificationParameter` have to be corrected to account for this when comparing to `rawEndValue`.\"},\"stopAmplificationParameterUpdate()\":{\"details\":\"Stops the amplification parameter change process, keeping the current value.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"},\"updateProtocolFeePercentageCache()\":{\"details\":\"Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated). Updates the cache to the latest value set by governance.\"},\"updateTokenRateCache(address)\":{\"details\":\"Forces a rate cache hit for a token. It will revert if the requested token does not have an associated rate provider.\"},\"version()\":{\"details\":\"Returns a JSON representation of the contract version containing name, version number and task ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getLastJoinExitData()\":{\"notice\":\"Return the amplification factor and invariant as of the most recent join or exit (including BPT swaps)\"},\"getMinimumBpt()\":{\"notice\":\"Return the minimum BPT balance, required to avoid minimum token balances.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockComposableStablePool.sol\":\"MockComposableStablePool\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol\":{\"keccak256\":\"0x809d1ab36b1c4190aeffd3bad9c8a54880a9524c679e770ef185323dafaf6833\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3a7d7e901eafecae0f4a8829bbb952cda0928f55290d368ab1370c92284d1469\",\"dweb:/ipfs/QmWDpNu8sZEwK3nmetwoaXrASta5RWqGZb7Z4TqHnMu7a1\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol\":{\"keccak256\":\"0x19103ec3d00cbdbe25ef95721ba669cfcfaf046a60447a1b49986026e61fc57c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6765d86f532928df96af43990b5bccd20a0d2965707cb5e9d5afda9580be3fe4\",\"dweb:/ipfs/QmZmhVpWcGpFk9u4iy4srKs248c9FdAzjjmdMATexpqa6j\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol\":{\"keccak256\":\"0x7f11733a5cd8f81c123c02f79d94ead7b65217021ebddafda10e796a25e1ef41\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7333060b9ff67e1fe734903d45b0c69ff8308b744f7c2fb8fbf630ae9d589bd6\",\"dweb:/ipfs/Qmf4rZHqsjfKDk5cSp38fv24SS8bAYJxYYQzn63TV6aPCo\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol\":{\"keccak256\":\"0xcd8cfa91f7e0c2bdbe1dceb37caddf211ce411e51de567594434da9ad2edc5e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://58db2ea702a5eb370172402784e7e260337b61d1f8d5338142a1bde1b6718c4d\",\"dweb:/ipfs/QmZBogEchmaq3CEadrFidyWczyyuLT987wjZRHwAb6nPWg\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":{\"keccak256\":\"0x65f93b8bac780e69e0ec41db98645323401686649dc61f9fa24d015d11084dfe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46b2c14982f82375159bb984548fd3bf4764972dd5cc0b2d40de82d0f3ccd28f\",\"dweb:/ipfs/QmPYfeoLCDwwDE6TDNRrnSQWniMgwuZSNJQ2Ycm3uRuBPs\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":{\"keccak256\":\"0x81972e1a01bb50f6ebed2d0aaeea8044f59adfd3b08dc17233919b28c41e838b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://385cc839791c8db486aa8b53cd0791f98786e88379f981b898b163f0f4a68e37\",\"dweb:/ipfs/QmP6SNqUMKtwgQUXuZzQAmUjxVKvojudz7fRFBzhcXqGdp\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol\":{\"keccak256\":\"0x5583324539a5115ad86d9e7995970aec52e58ab1da1296598965d4355959874c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://14c31fdef3401d5df9f68db7ce68e811f619630f6ef0b4f20f98d0e46fce453f\",\"dweb:/ipfs/QmVonqayfhsEPf28czLuce6bWMUWQPpcZxpK26LMYkpQML\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePool.sol\":{\"keccak256\":\"0x33631e52895167c71319b8f2590a1255db7001d76357b5f653369ae03a139789\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9ec51134aa4526891bb985d13f6291aa77f6ff5a87b877ece740fff4236790f2\",\"dweb:/ipfs/QmWZvDES1o9jJmbb7REBigcnCJk7N9MvEnw7KEH1BaSRCD\"]},\"contracts/ComposableStablePoolProtocolFees.sol\":{\"keccak256\":\"0x71f593c69691edcea6b6debecc9c0629676033f4eadb3a059b1f7286cacf812e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f4952f66e9a2e1c60573e3cef1e340ee067aa28fae2be88f39ef1f48afc96c8e\",\"dweb:/ipfs/QmP6sKJV93SQYoPuxJRAhasxMPzuXz2G2PeA6DRhuThLFE\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/StablePoolAmplification.sol\":{\"keccak256\":\"0x35131a0fda0168332354ea2da753a595cedcdbc2663b83281fb86adbd10e2b15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c4a52f1ed61716bf879e3d232c47060196602de456fced19722bd38e2c967dc\",\"dweb:/ipfs/QmStzAS76tvSSvbofjV8EB9VrbcF7h8DwygTZGpuqzAavm\"]},\"contracts/test/MockComposableStablePool.sol\":{\"keccak256\":\"0xe6a5477105e65990f1b89afb968bde78071ebe952c38cebc5553963626578e13\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4aed6ea4a890224348f5ce004443a7a3e56b6579da7e67b2d2051e031fcab50\",\"dweb:/ipfs/QmdUDo6fisfHHiaJ1KtbpUQYFKjXaanPHg1YG1DHmHBqf8\"]}},\"version\":1}" + } + }, + "contracts/test/MockComposableStablePoolProtocolFees.sol": { + "MockComposableStablePoolProtocolFees": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IProtocolFeePercentagesProvider", + "name": "protocolFeeProvider", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "contract IRateProvider[]", + "name": "tokenRateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolFeePercentage", + "type": "uint256" + } + ], + "name": "ProtocolFeePercentageCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "TokenRateCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRateProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cacheDuration", + "type": "uint256" + } + ], + "name": "TokenRateProviderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitAmp", + "type": "uint256" + } + ], + "name": "getGrowthInvariants", + "outputs": [ + { + "internalType": "uint256", + "name": "swapFeeGrowthInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalNonExemptGrowthInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalGrowthInvariant", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastJoinExitData", + "outputs": [ + { + "internalType": "uint256", + "name": "lastJoinExitAmplification", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitInvariant", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "feeType", + "type": "uint256" + } + ], + "name": "getProtocolFeePercentageCache", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastJoinExitAmp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitInvariant", + "type": "uint256" + } + ], + "name": "getProtocolPoolOwnershipPercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolSwapFeeDelegation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRateCache", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "registeredBalances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastJoinExitAmp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastPostJoinExitInvariant", + "type": "uint256" + } + ], + "name": "payProtocolFeesBeforeJoinExit", + "outputs": [ + { + "internalType": "uint256", + "name": "virtualSupply", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setTokenRateCacheDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newSupply", + "type": "uint256" + } + ], + "name": "setTotalSupply", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentAmp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "preJoinExitInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "preJoinExitSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "postJoinExitSupply", + "type": "uint256" + } + ], + "name": "updateInvariantAfterJoinExit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "currentAmp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "postJoinExitInvariant", + "type": "uint256" + } + ], + "name": "updatePostJoinExit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateProtocolFeePercentageCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "updateTokenRateCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6105006040523480156200001257600080fd5b506040516200596c3803806200596c833981016040819052620000359162001924565b84600019604051806060016040528087815260200186815260200185815250604051806060016040528062000071893062000d8960201b60201c565b8152602001878152602001858152508960006040518060400160405280601581526020017f4d6f636b537461626c65506f6f6c53746f726167650000000000000000000000815250604051806040016040528060088152602001671353d0d2d7d0941560c21b815250620000ec8c3062000d8960201b60201c565b8c516001016001600160401b03811180156200010757600080fd5b5060405190808252806020026020018201604052801562000132578160200160208202803683370190505b5064e8d4a510006000806000828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200018792919062001677565b5080516200019d90600490602084019062001677565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b1661012052506200021b90506276a70083111561019462000f23565b6200022f62278d0082111561019562000f23565b429091016101408190520161016052855162000251906002111560c862000f23565b6200026b6200025f62000f38565b8751111560c962000f23565b620002818662000f3d60201b6200131c1760201c565b6200028c8462000f49565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f90620002bd908d9060040162001abe565b602060405180830381600087803b158015620002d857600080fd5b505af1158015620002ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003139190620018ec565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620003489084908b908b9060040162001a22565b600060405180830381600087803b1580156200036357600080fd5b505af115801562000378573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bf57600080fd5b505afa158015620003d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fa919062001905565b60601b6001600160601b0319166101a052505089515198506200042e97505060028811955060c8945062000f239350505050565b620004536001820383602001515184604001515162000fdd60201b620013261760201c565b6101c0819052815180516000906200046757fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200049e57fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004d557fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b81525050600381116200050b57600062000524565b8151805160039081106200051b57fe5b60200260200101515b60601b6001600160601b0319166102605260048111620005465760006200055f565b8151805160049081106200055657fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005815760006200059a565b8151805160059081106200059157fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005d39190600090620005bf57fe5b602002602001015162000ffd60201b60201c565b6102c05281518051620005ed91906001908110620005bf57fe5b6102e052815180516200060791906002908110620005bf57fe5b61030052600381116200061c57600062000632565b620006328260000151600381518110620005bf57fe5b6103205260048111620006475760006200065d565b6200065d8260000151600481518110620005bf57fe5b61034052600581116200067257600062000688565b620006888260000151600581518110620005bf57fe5b61036052815151600019015b600081118015620006c557508251805130919083908110620006b257fe5b60200260200101516001600160a01b0316115b15620006d5576000190162000694565b6101e08190528251516060906001600160401b0381118015620006f757600080fd5b5060405190808252806020026020018201604052801562000722578160200160208202803683370190505b50905060008080805b8751518110156200094557858110156200086157876020015181815181106200075057fe5b60200260200101518582815181106200076557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007ce60006001600160a01b0316868381518110620007a157fe5b60200260200101516001600160a01b031614158260060186620010d160201b62001343179092919060201c565b935087604001518181518110620007e157fe5b60200260200101511562000856576200082d60006001600160a01b03168683815181106200080b57fe5b60200260200101516001600160a01b0316141561015562000f2360201b60201c565b6200084a60018286620010d160201b62001343179092919060201c565b9350600192506200085b565b600191505b6200093c565b8581146200093c57876020015160018203815181106200087d57fe5b60200260200101518582815181106200089257fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008ce60006001600160a01b0316868381518110620007a157fe5b935087604001516001820381518110620008e457fe5b60200260200101511562000937576200090e60006001600160a01b03168683815181106200080b57fe5b6200092b60018286620010d160201b62001343179092919060201c565b9350600192506200093c565b600191505b6001016200072b565b50811560f890811b610460528115901b61048052835184906000906200096757fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200099a57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009cd57fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b81525050600384511162000a0457600062000a1b565b8360038151811062000a1257fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a3e57600062000a55565b8360048151811062000a4c57fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a7857600062000a8f565b8360058151811062000a8657fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000ad29550929350919062000fdd811b6200132617901c565b805160609062000ae3903062000d89565b8051909150600019015b60008111801562000b235750306001600160a01b031682828151811062000b1057fe5b60200260200101516001600160a01b0316115b1562000b33576000190162000aed565b6000805b84515181101562000c4c578281141562000b5057600191505b60208501518051828401916000918490811062000b6957fe5b60200260200101516001600160a01b03161462000c425762000bc3818760200151848151811062000b9657fe5b60200260200101518860400151858151811062000baf57fe5b6020026020010151620010fa60201b60201c565b8560200151828151811062000bd457fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000c1857fe5b602002602001015160405162000c2f919062001ad3565b60405180910390a362000c4281620011f5565b5060010162000b37565b5050505050600019811460f881901b6104c0526001600160601b0319606084901b166104a05262000c7f83600262001234565b62000c8c83600362001234565b801562000ca65762000ca083600062001234565b62000d65565b60405163178b2b9360e21b815262000d3a906001600160a01b03851690635e2cae4c9062000cda9060009060040162001ad3565b60206040518083038186803b15801562000cf357600080fd5b505afa15801562000d08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d2e9190620018ec565b83111561025862000f23565b60006000805160206200594c8339815191528360405162000d5c919062001ad3565b60405180910390a25b8062000d72578162000d75565b60005b6104e0525062001b45975050505050505050565b606082516001016001600160401b038111801562000da657600080fd5b5060405190808252806020026020018201604052801562000dd1578160200160208202803683370190505b50905082516000141562000e1457818160008151811062000dee57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000f1d565b82515b60008111801562000e505750826001600160a01b031684600183038151811062000e3d57fe5b60200260200101516001600160a01b0316115b1562000e9d5783600182038151811062000e6657fe5b602002602001015182828151811062000e7b57fe5b6001600160a01b03909216602092830291909101909101526000190162000e17565b60005b8181101562000eec5784818151811062000eb657fe5b602002602001015183828151811062000ecb57fe5b6001600160a01b039092166020928302919091019091015260010162000ea0565b508282828151811062000efb57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000f345762000f3481620013df565b5050565b600690565b8062000f3481620013f4565b62000f6262000f576200147b565b82101560cb62000f23565b62000f7b62000f7062001484565b82111560ca62000f23565b62000f9d8160c0603f6008546200149060201b6200136a17909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9062000fd290839062001ad3565b60405180910390a150565b62000ff8828414801562000ff057508183145b606762000f23565b505050565b60006001600160a01b038216301415620010215750670de0b6b3a7640000620010cc565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200105d57600080fd5b505afa15801562001072573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010989190620019ff565b60ff1690506000620010b7601283620014b560201b6200138d1760201c565b905080600a0a670de0b6b3a764000002925050505b919050565b60006001821b1984168284620010e9576000620010ec565b60015b60ff16901b17949350505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200113657600080fd5b505afa1580156200114b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011719190620018ec565b600085815260096020908152604090912054919250620011a090829084908690620013a3620014cd821b17901c565b60008681526009602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620011e690859062001ad3565b60405180910390a25050505050565b600081815260096020908152604090912054906200121e908290620013e362001529821b17901c565b6000928352600960205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200126590859060040162001ad3565b60206040518083038186803b1580156200127e57600080fd5b505afa15801562001293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b99190620018ec565b905081620012fd57620012d7816200155460201b620013fb1760201c565b600a80546001600160401b0319166001600160401b0392909216919091179055620013b1565b600282141562001353576200131d816200155460201b620013fb1760201c565b600a80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620013b1565b6003821415620013a45762001373816200155460201b620013fb1760201c565b600a80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620013b1565b620013b16101bb620013df565b816000805160206200594c83398151915282604051620013d2919062001ad3565b60405180910390a2505050565b620013f1816210905360ea1b62001572565b50565b6002815110156200140557620013f1565b6000816000815181106200141557fe5b602002602001015190506000600190505b825181101562000ff85760008382815181106200143f57fe5b6020026020010151905062001470816001600160a01b0316846001600160a01b031610606562000f2360201b60201c565b915060010162001426565b64e8d4a5100090565b67016345785d8a000090565b60006200149f848484620015d3565b506001901b60001901811b1992909216911b1790565b6000620014c783831115600162000f23565b50900390565b6000620014e2606084901c1561014962000f23565b6200152142830160e060206200150b8660c083838c8c600060606200136a62001490871b17861c565b6200149060201b6200136a17909392919060201c565b949350505050565b600062000f1d6200153a836200162e565b606080856200149060201b6200136a17909392919060201c565b60006200156e6001600160401b038311156101ba62000f23565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b620015e46101008310606462000f23565b6200161d600182101580156200161557506200161160ff84610100036200164e60201b620014181760201c565b8211155b606462000f23565b62000ff883821c156101b462000f23565b600062000f1d60006060846200166860201b62001430179092919060201c565b60008183106200165f578162001661565b825b9392505050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620016ba57805160ff1916838001178555620016ea565b82800160010185558215620016ea579182015b82811115620016ea578251825591602001919060010190620016cd565b506200156e9291505b808211156200156e5760008155600101620016f3565b600082601f8301126200171a578081fd5b8151620017316200172b8262001b03565b62001adc565b8181529150602080830190848101818402860182018710156200175357600080fd5b6000805b8581101562001783578251801515811462001770578283fd5b8552938301939183019160010162001757565b50505050505092915050565b600082601f830112620017a0578081fd5b8151620017b16200172b8262001b03565b818152915060208083019084810181840286018201871015620017d357600080fd5b60005b84811015620017ff578151620017ec8162001b2f565b84529282019290820190600101620017d6565b505050505092915050565b600082601f8301126200181b578081fd5b81516200182c6200172b8262001b03565b8181529150602080830190848101818402860182018710156200184e57600080fd5b60005b84811015620017ff578151620018678162001b2f565b8452928201929082019060010162001851565b600082601f8301126200188b578081fd5b81516200189c6200172b8262001b03565b818152915060208083019084810181840286018201871015620018be57600080fd5b60005b84811015620017ff57815184529282019290820190600101620018c1565b805162000f1d8162001b2f565b600060208284031215620018fe578081fd5b5051919050565b60006020828403121562001917578081fd5b8151620016618162001b2f565b60008060008060008060c087890312156200193d578182fd5b620019498888620018df565b95506200195a8860208901620018df565b60408801519095506001600160401b038082111562001977578384fd5b620019858a838b016200178f565b955060608901519150808211156200199b578384fd5b620019a98a838b016200180a565b94506080890151915080821115620019bf578384fd5b620019cd8a838b016200187a565b935060a0890151915080821115620019e3578283fd5b50620019f289828a0162001709565b9150509295509295509295565b60006020828403121562001a11578081fd5b815160ff8116811462001661578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001a6e5762001a5b855162001b23565b8352938301939183019160010162001a46565b505084810360408601528551808252908201925081860190845b8181101562001ab05762001a9d835162001b23565b8552938301939183019160010162001a88565b509298975050505050505050565b602081016003831062001acd57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001afb57600080fd5b604052919050565b60006001600160401b0382111562001b19578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620013f157600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6104a05160601c6104c05160f81c6104e051613c6762001ce560003980610bc452508061085b5250806107db52806108065280610831525080612eec525080612ec85250806124a1528061315052508061181f5250806117ef5250806117bf52508061178f52508061175f52508061172f525050505050505080611a8a525080611a48525080611a065250806119c4525080611982525080611940525080610e12525080611703525080611060525080610a575250806116da5250806116b6525080610ee4525080610ec0525080610e4a52508061267f5250806126c15250806126a05250613c676000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80637f1260d1116101c8578063ab7759f111610104578063d5c096c4116100a2578063ed24911d1161007c578063ed24911d146106d3578063f465d912146106db578063f4b7964d146106ee578063f7ea7a3d1461070157610362565b8063d5c096c4146106a5578063dd62ed3e146106b8578063ddf4627b146106cb57610362565b8063b7b814fc116100de578063b7b814fc1461066f578063c37bb32c14610677578063d2946c2b1461068a578063d505accf1461069257610362565b8063ab7759f114610632578063ac392da614610645578063b35056b81461066757610362565b80638d928af811610171578063a27ff18a1161014b578063a27ff18a146105f1578063a457c2d714610604578063a9059cbb14610617578063aaabadc51461062a57610362565b80638d928af8146105ce57806390193b7c146105d657806395d89b41146105e957610362565b8063851c1bb3116101a2578063851c1bb31461059357806387ec6817146105a6578063893d20e8146105b957610362565b80637f1260d11461056057806382687a56146105835780638456cb591461058b57610362565b806338fff2d0116102a257806355c6762811610240578063704640161161021a578063704640161461050657806370a082311461051957806374f3b0091461052c5780637ecebe001461054d57610362565b806355c67628146104ca5780636028bfd4146104d257806364499362146104f357610362565b80633f4ba83a1161027c5780633f4ba83a1461049457806350dd6ed91461049c57806354a844ba146104af57806354dea00a146104b757610362565b806338fff2d014610463578063395093511461046b5780633c975d511461047e57610362565b80631dd746ea1161030f5780632df2c7c0116102e95780632df2c7c014610420578063313ce567146104335780633644e5151461044857806338e9922e1461045057610362565b80631dd746ea146103e3578063238a2d59146103f857806323b872dd1461040d57610362565b806315b0015b1161034057806315b0015b146103af57806318160ddd146103b75780631c0de051146103cc57610362565b806306fdde0314610367578063095ea7b3146103855780630da0669c146103a5575b600080fd5b61036f610714565b60405161037c9190613b36565b60405180910390f35b610398610393366004613521565b6107aa565b60405161037c9190613a3d565b6103ad6107c1565b005b610398610859565b6103bf61087d565b60405161037c9190613a60565b6103d4610883565b60405161037c93929190613a48565b6103eb6108ac565b60405161037c91906139fc565b6104006108bb565b60405161037c91906139af565b61039861041b366004613471565b610956565b6103ad61042e36600461341d565b6109ca565b61043b610a26565b60405161037c9190613bd8565b6103bf610a2f565b6103ad61045e366004613748565b610a39565b6103bf610a55565b610398610479366004613521565b610a79565b610486610ab4565b60405161037c929190613b99565b6103ad610adf565b6103ad6104aa3660046136fa565b610af1565b6103ad610b0f565b6103bf6104c536600461341d565b610b21565b6103bf610b3c565b6104e56104e03660046135fb565b610b4f565b60405161037c929190613b80565b6103ad610501366004613778565b610b86565b6103bf610514366004613748565b610b9a565b6103bf61052736600461341d565b610c60565b61053f61053a3660046135fb565b610c7b565b60405161037c929190613a0f565b6103bf61055b36600461341d565b610da3565b61057361056e36600461341d565b610dae565b60405161037c9493929190613bbd565b6103bf610e10565b6103ad610e34565b6103bf6105a136600461369e565b610e46565b6104e56105b43660046135fb565b610e98565b6105c1610ebe565b60405161037c919061399b565b6105c1610ee2565b6103bf6105e436600461341d565b610f06565b61036f610f21565b6103bf6105ff36600461358f565b610f82565b610398610612366004613521565b610f9a565b610398610625366004613521565b610fd8565b6105c1610fe5565b61039861064036600461341d565b610fef565b61065861065336600461354c565b611002565b60405161037c93929190613ba7565b61039861101f565b6103ad611030565b6104e561068536600461358f565b611042565b6105c161105e565b6103ad6106a03660046134b1565b611082565b61053f6106b33660046135fb565b61110d565b6103bf6106c6366004613439565b611230565b6103bf61126d565b6103bf611273565b6103ad6106e93660046137d8565b61127d565b6103ad6106fc366004613521565b611287565b6103ad61070f366004613748565b611313565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050905090565b60006107b733848461143f565b5060015b92915050565b6107c9610857565b6107d1610859565b15610801576108017f000000000000000000000000000000000000000000000000000000000000000060006114a7565b61082c7f000000000000000000000000000000000000000000000000000000000000000060026114a7565b6108577f000000000000000000000000000000000000000000000000000000000000000060036114a7565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b6000806000610890611697565b15925061089b6116b4565b91506108a56116d8565b9050909192565b60606108b66116fc565b905090565b606060006108c7611701565b905060608167ffffffffffffffff811180156108e257600080fd5b5060405190808252806020026020018201604052801561090c578160200160208202803683370190505b50905060005b8281101561094f5761092381611725565b82828151811061092f57fe5b6001600160a01b0390921660209283029190910190910152600101610912565b5091505090565b6000806109638533611230565b9050610987336001600160a01b038716148061097f5750838210155b61019e61184e565b61099285858561185c565b336001600160a01b038616148015906109ad57506000198114155b156109bf576109bf853385840361143f565b506001949350505050565b60006109d58261193c565b905060006109e282611725565b90506109fb6001600160a01b038216151561015561184e565b600082815260096020526040812054610a1390611aca565b9050610a20838383611ad9565b50505050565b60055460ff1690565b60006108b6611273565b610a41611bbc565b610a49611c02565b610a5281611c15565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107b7918590610aaf9086611c8e565b61143f565b600b546000908190610ac98160e96017611430565b9250610ad881600060e9611430565b9150509091565b610ae7611bbc565b6108576000611ca0565b610af9611bbc565b610b01611c02565b610b0b8282611d31565b5050565b610b17611bbc565b6108576001611e3f565b6000610b34610b2f8361193c565b611e96565b90505b919050565b6008546000906108b69060c0603f611430565b60006060610b658651610b60611701565b611ee9565b610b7a89898989898989611ef6611f35611f9e565b97509795505050505050565b610b938585858585612153565b5050505050565b6000610ba461101f565b15610bb157506000610b37565b81610bfd57610bbe610859565b610be8577f0000000000000000000000000000000000000000000000000000000000000000610bf6565b600a5467ffffffffffffffff165b9050610b37565b6002821415610c255750600a5468010000000000000000900467ffffffffffffffff16610b37565b6003821415610c555750600a54700100000000000000000000000000000000900467ffffffffffffffff16610b37565b610b376101bb6121d3565b6001600160a01b031660009081526020819052604090205490565b60608088610ca5610c8a610ee2565b6001600160a01b0316336001600160a01b03161460cd61184e565b610cba610cb0610a55565b82146101f461184e565b60606000610cc7866121fd565b15610cef57610cd461222c565b610ce689610ce061087d565b8861223f565b92509050610d41565b610cf761226b565b6060610d016116fc565b9050610d0d8a82612273565b610d318d8d8d8d8d610d1d61101f565b610d27578d610d2a565b60005b878e611ef6565b93509150610d3f8382611f35565b505b610d4b8b826122dc565b81895167ffffffffffffffff81118015610d6457600080fd5b50604051908082528060200260200182016040528015610d8e578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610b3482610f06565b600080600080600060096000610dc38861193c565b81526020810191909152604001600020549050610de481151561015561184e565b610ded816122e6565b9450610df8816122f4565b9350610e0381612302565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b610e3c611bbc565b6108576001611ca0565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610e7b929190613925565b604051602081830303815290604052805190602001209050919050565b60006060610ea98651610b60611701565b610b7a89898989898989611ef6612324611f9e565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107a05780601f10610775576101008083540402835291602001916107a0565b600080610f9085858561238d565b5095945050505050565b600080610fa73385611230565b9050808310610fc157610fbc3385600061143f565b610fce565b610fce338585840361143f565b5060019392505050565b60006107b733848461185c565b60006108b6612420565b6000610b34610ffd8361193c565b61249a565b600080600061101185856124c6565b9250925092505b9250925092565b6008546000906108b69060ff612547565b611038611bbc565b6108576000611e3f565b60006060611051858585612551565b5090969095509350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886110b18c610f06565b896040516020016110c796959493929190613a88565b6040516020818303038152906040528051906020012090506110f888826110ef8787876125a9565b886101f86125e8565b61110388888861143f565b5050505050505050565b6060808861111c610c8a610ee2565b611127610cb0610a55565b61112f61226b565b60606111396116fc565b905061114361087d565b6111f057600060606111588d8d8d868b611ef6565b9150915061117161116761263f565b83101560cc61184e565b611183600061117e61263f565b612646565b6111968b61118f61263f565b8403612646565b6111a08184612324565b808a5167ffffffffffffffff811180156111b957600080fd5b506040519080825280602002602001820160405280156111e3578160200160208202803683370190505b5095509550505050610d96565b6111fa8882612273565b600060606112228d8d8d8d8d61120e61101f565b611218578d61121b565b60005b898e611ef6565b915091506111968b83612646565b600061123a610ee2565b6001600160a01b0316826001600160a01b0316141561125c57506000196107bb565b6112668383612650565b90506107bb565b60001981565b60006108b661267b565b610b0b8282612718565b61128f611bbc565b600061129a8361193c565b905060006112a782611725565b90506112c06001600160a01b038216151561015561184e565b6112cb828285611ad9565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516113059190613a60565b60405180910390a350505050565b610a528161273e565b80610b0b81612743565b61133e828414801561133757508183145b606761184e565b505050565b60006001821b198416828461135957600061135c565b60015b60ff16901b17949350505050565b60006113778484846127bc565b506001901b60001901811b1992909216911b1790565b600061139d83831115600161184e565b50900390565b60006113b6606084901c1561014961184e565b6113db42830160e060206113d38660c083838c8c6000606061136a565b92919061136a565b949350505050565b6000610b346113f1836122e6565b839060608061136a565b600061141467ffffffffffffffff8311156101ba61184e565b5090565b60008183106114275781611429565b825b9392505050565b6001901b6000190191901c1690565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061149a908590613a60565b60405180910390a3505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c3263906114ef908590600401613a60565b60206040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190613760565b90508161158d5761154f816113fb565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9290921691909117905561165a565b60028214156115ea5761159f816113fb565b600a805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff90921691909117905561165a565b600382141561164f576115fc816113fb565b600a805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff90921691909117905561165a565b61165a6101bb6121d3565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a8260405161168a9190613a60565b60405180910390a2505050565b60006116a16116d8565b4211806108b657505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008161175357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b816001141561178357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b81600214156117b357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b81600314156117e357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b816004141561181357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b816005141561184357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b610b376101356121d3565b81610b0b57610b0b816121d3565b6118736001600160a01b038416151561019861184e565b61188a6001600160a01b038316151561019961184e565b61189583838361133e565b6001600160a01b0383166000908152602081905260409020546118bb90826101a0612803565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546118ea9082611c8e565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061149a908590613a60565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561198057506000610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156119c257506001610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a0457506002610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a4657506003610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a8857506004610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561184357506005610b37565b6000610b348260c06020611430565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1457600080fd5b505afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613760565b600085815260096020526040902054909150611b698183856113a3565b60008681526009602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611bad908590613a60565b60405180910390a25050505050565b6000611beb6000357fffffffff0000000000000000000000000000000000000000000000000000000016610e46565b9050610a52611bfa8233612819565b61019161184e565b610857611c0d611697565b61019261184e565b611c2a611c20612902565b82101560cb61184e565b611c3f611c3561290b565b82111560ca61184e565b600854611c50908260c0603f61136a565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90611c83908390613a60565b60405180910390a150565b6000828201611429848210158361184e565b8015611cc057611cbb611cb16116b4565b421061019361184e565b611cd5565b611cd5611ccb6116d8565b42106101a961184e565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490611c83908390613a3d565b6000611d3b610a55565b90506000611d47610ee2565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401611d74929190613b01565b60806040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc491906137f9565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250611e11915085908790600401613ae8565b600060405180830381600087803b158015611e2b57600080fd5b505af1158015611103573d6000803e3d6000fd5b600854611e4e908260ff611343565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c890611e81908390613a3d565b60405180910390a180610a5257610a52610857565b6000611ea0610e10565b821415611eb65750670de0b6b3a7640000610b37565b6000828152600960205260409020548015611ed957611ed4816122e6565b611429565b670de0b6b3a76400009392505050565b610b0b818314606761184e565b600060606040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613b49565b60405180910390fd5b81518151611f44908290611ee9565b60005b81811015610a2057611f7f848281518110611f5e57fe5b6020026020010151848381518110611f7257fe5b6020026020010151612917565b848281518110611f8b57fe5b6020908102919091010152600101611f47565b33301461208d576000306001600160a01b0316600036604051611fc2929190613955565b6000604051808303816000865af19150503d8060008114611fff576040519150601f19603f3d011682016040523d82523d6000602084013e612004565b606091505b50509050806000811461201357fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb00000000000000000000000000000000000000000000000000000000811461206f573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61209561226b565b606061209f6116fc565b90506120ab8782612273565b600060606120c38c8c8c8c8c8c898d8d63ffffffff16565b915091506120d581848663ffffffff16565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b600061215f8686612968565b9050600061216d8385612917565b9050600061217b8683612aca565b9050808311156121c95780830360006121a561219f8361219a84610b9a565b612b00565b86612b1a565b905080156121c65760006121b98783612b3a565b90506121c481612b52565b505b50505b6111038884612718565b610a52817f42414c0000000000000000000000000000000000000000000000000000000000612b63565b6000808251118015610b34575060ff8016828060200190518101906122229190613839565b60ff161492915050565b61085761223761101f565b6101b661184e565b60006060600061224e84612bde565b9050606061225d878784612bf4565b919791965090945050505050565b610857611c02565b81518151612282908290611ee9565b60005b81811015610a20576122bd84828151811061229c57fe5b60200260200101518483815181106122b057fe5b6020026020010151612aca565b8482815181106122c957fe5b6020908102919091010152600101612285565b610b0b8282612ca3565b6000610b3482826060611430565b6000610b3482606080611430565b60008061230e83611aca565b915061231d8360e06020611430565b9050915091565b81518151612333908290611ee9565b60005b81811015610a205761236e84828151811061234d57fe5b602002602001015184838151811061236157fe5b6020026020010151612d6f565b84828151811061237a57fe5b6020908102919091010152600101612336565b600080600080600061239f88886124c6565b92509250925060008684116123b55760006123b9565b8684035b905060008484116123cb5760006123cf565b8484035b905060006123f06123e06000610b9a565b6123ea8587612917565b90612aca565b9050600061240b6124016002610b9a565b6123ea8588612917565b919091019b939a509298505050505050505050565b600061242a610ee2565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b691906136de565b6000610b347f000000000000000000000000000000000000000000000000000000000000000083612547565b60008060006124df846124da876001612dbd565b612968565b92506124e9612ec6565b15612502576124f88486612968565b9150819050611018565b61250a612eea565b156125235782915061251c8486612968565b9050611018565b612532846124da876000612dbd565b915061253e8486612968565b90509250925092565b1c60019081161490565b60006060600080606061256388612f0e565b91509150600080612575838a8a61238d565b9150915060006125858584612b3a565b905080156125965761259681612b52565b9390930199919850919650945050505050565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b60006125f385612f47565b9050612609612603878387612f63565b8361184e565b612618428410156101b861184e565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b620f424090565b610b0b8282613030565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006126e86130bd565b306040516020016126fd959493929190613abc565b60405160208183030381529060405280519060200120905090565b61272581600060e96130c1565b6127328360e960176130c1565b17600b55610b0b6130d4565b600255565b60028151101561275257610a52565b60008160008151811061276157fe5b602002602001015190506000600190505b825181101561133e57600083828151811061278957fe5b602002602001015190506127b2816001600160a01b0316846001600160a01b031610606561184e565b9150600101612772565b6127cb6101008310606461184e565b6127f4600182101580156127ed57506127e960ff8461010003611418565b8211155b606461184e565b61133e83821c156101b461184e565b6000612812848411158361184e565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612838610ebe565b6001600160a01b03161415801561285357506128538361310a565b1561287b57612860610ebe565b6001600160a01b0316336001600160a01b03161490506107bb565b612883612420565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016128b293929190613a69565b60206040518083038186803b1580156128ca57600080fd5b505afa1580156128de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126691906135db565b64e8d4a5100090565b67016345785d8a000090565b6000612926821515600461184e565b82612933575060006107bb565b670de0b6b3a7640000838102906129569085838161294d57fe5b0414600561184e565b82818161295f57fe5b049150506107bb565b80516000908190815b818110156129a95761299f85828151811061298857fe5b602002602001015184611c8e90919063ffffffff16565b9250600101612971565b50816129ba576000925050506107bb565b600082868302825b60ff811015612ab3578260005b86811015612a1057612a066129e48387612b00565b612a018c84815181106129f357fe5b60200260200101518a612b00565b612b1a565b91506001016129cf565b50839450612a69612a48612a42612a27848a612b00565b612a3c612a34888d612b00565b6103e8612b1a565b90611c8e565b86612b00565b612a01612a588960010185612b00565b612a3c612a346103e889038a612b00565b935084841115612a9157600185850311612a8c57839750505050505050506107bb565b612aaa565b600184860311612aaa57839750505050505050506107bb565b506001016129c2565b50612abf6101416121d3565b505050505092915050565b6000828202612aee841580612ae7575083858381612ae457fe5b04145b600361184e565b670de0b6b3a764000090049392505050565b6000828202611429841580612ae7575083858381612ae457fe5b6000612b29821515600461184e565b818381612b3257fe5b049392505050565b6000611429612b498484612b00565b612a0184613115565b610a52612b5d61105e565b82612646565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000818060200190518101906114299190613855565b60606000612c028385612917565b9050845167ffffffffffffffff81118015612c1c57600080fd5b50604051908082528060200260200182016040528015612c46578160200160208202803683370190505b50915060005b8551811015612c9a57612c7b82878381518110612c6557fe5b6020026020010151612aca90919063ffffffff16565b838281518110612c8757fe5b6020908102919091010152600101612c4c565b50509392505050565b612cba6001600160a01b038316151561019b61184e565b612cc68260008361133e565b6001600160a01b038216600090815260208190526040902054612cec90826101b2612803565b6001600160a01b038316600090815260208190526040902055612d1f612d1a82612d1461087d565b9061313b565b61273e565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d639190613a60565b60405180910390a35050565b6000612d7e821515600461184e565b82612d8b575060006107bb565b670de0b6b3a764000083810290612da59085838161294d57fe5b826001820381612db157fe5b046001019150506107bb565b8151606090818167ffffffffffffffff81118015612dda57600080fd5b50604051908082528060200260200182016040528015612e04578160200160208202803683370190505b50905060005b82811015612ebd576000612e1c610e10565b821015612e295781612e2e565b816001015b9050612e398161249a565b80612e505750858015612e505750612e5081613149565b612e6d57868281518110612e6057fe5b6020026020010151612e9d565b612e9d878381518110612e7c57fe5b60200260200101516009600084815260200190815260200160002054613178565b838381518110612ea957fe5b602090810291909101015250600101612e0a565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006060612f3583612f1e610e10565b81518110612f2857fe5b6020026020010151613193565b612f3e846131a7565b91509150915091565b6000612f5161267b565b82604051602001610e7b929190613965565b6000612f7582516041146101b961184e565b60208281015160408085015160608601518251600080825295019283905292939092811a91600190612fae908990859088908890613b18565b6020604051602081039080840390855afa158015612fd0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116158015906130245750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b61303c6000838361133e565b61304b612d1a82612a3c61087d565b6001600160a01b03821660009081526020819052604090205461306e9082611c8e565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612d63908590613a60565b4690565b60006130ce8484846127bc565b50501b90565b60006130de611701565b905060005b81811015610b0b576130f481613149565b156131025761310281613250565b6001016130e3565b6000610b348261327e565b6000670de0b6b3a7640000821061312d576000610b34565b50670de0b6b3a76400000390565b600061142983836001612803565b6000610b347f000000000000000000000000000000000000000000000000000000000000000060068401612547565b600061142961318a8461219a856122f4565b612a01846122e6565b6000610b34826131a161087d565b9061138d565b606080600183510367ffffffffffffffff811180156131c557600080fd5b506040519080825280602002602001820160405280156131ef578160200160208202803683370190505b50905060005b81518110156132495783613207610e10565b82106132165781600101613218565b815b8151811061322257fe5b602002602001015182828151811061323657fe5b60209081029190910101526001016131f5565b5092915050565b600081815260096020526040902054613268816113e3565b6000928352600960205260409092209190915550565b60006132a97ff4b7964d00000000000000000000000000000000000000000000000000000000610e46565b821480610b345750610b348260006132e07f38e9922e00000000000000000000000000000000000000000000000000000000610e46565b82148061331457506133117f50dd6ed900000000000000000000000000000000000000000000000000000000610e46565b82145b80610b3457506000610b34565b600082601f830112613331578081fd5b813567ffffffffffffffff811115613347578182fd5b6020808202613357828201613be6565b8381529350818401858301828701840188101561337357600080fd5b600092505b84831015612abf578035825260019290920191908301908301613378565b600082601f8301126133a6578081fd5b813567ffffffffffffffff8111156133bc578182fd5b6133ed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613be6565b915080825283602082850101111561340457600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561342e578081fd5b813561142981613c0d565b6000806040838503121561344b578081fd5b823561345681613c0d565b9150602083013561346681613c0d565b809150509250929050565b600080600060608486031215613485578081fd5b833561349081613c0d565b925060208401356134a081613c0d565b929592945050506040919091013590565b600080600080600080600060e0888a0312156134cb578283fd5b87356134d681613c0d565b965060208801356134e681613c0d565b95506040880135945060608801359350608088013561350481613c22565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613533578182fd5b823561353e81613c0d565b946020939093013593505050565b6000806040838503121561355e578182fd5b823567ffffffffffffffff811115613574578283fd5b61358085828601613321565b95602094909401359450505050565b6000806000606084860312156135a3578283fd5b833567ffffffffffffffff8111156135b9578384fd5b6135c586828701613321565b9660208601359650604090950135949350505050565b6000602082840312156135ec578081fd5b81518015158114611429578182fd5b600080600080600080600060e0888a031215613615578283fd5b87359650602088013561362781613c0d565b9550604088013561363781613c0d565b9450606088013567ffffffffffffffff80821115613653578485fd5b61365f8b838c01613321565b955060808a0135945060a08a0135935060c08a0135915080821115613682578283fd5b5061368f8a828b01613396565b91505092959891949750929550565b6000602082840312156136af578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611429578182fd5b6000602082840312156136ef578081fd5b815161142981613c0d565b6000806040838503121561370c578182fd5b823561371781613c0d565b9150602083013567ffffffffffffffff811115613732578182fd5b61373e85828601613396565b9150509250929050565b600060208284031215613759578081fd5b5035919050565b600060208284031215613771578081fd5b5051919050565b600080600080600060a0868803121561378f578283fd5b85359450602086013567ffffffffffffffff8111156137ac578384fd5b6137b888828901613321565b959895975050505060408401359360608101359360809091013592509050565b600080604083850312156137ea578182fd5b50508035926020909101359150565b6000806000806080858703121561380e578182fd5b845193506020850151925060408501519150606085015161382e81613c0d565b939692955090935050565b60006020828403121561384a578081fd5b815161142981613c22565b60008060408385031215613867578182fd5b825161387281613c22565b6020939093015192949293505050565b6000815180845260208085019450808401835b838110156138b157815187529582019590820190600101613895565b509495945050505050565b60008151808452815b818110156138e1576020818501810151868301820152016138c5565b818111156138f25782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156139f05783516001600160a01b0316835292840192918401916001016139cb565b50909695505050505050565b6000602082526114296020830184613882565b600060408252613a226040830185613882565b8281036020840152613a348185613882565b95945050505050565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526113db60408301846138bc565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261142960208301846138bc565b6020808252600f908201527f4e4f545f494d504c454d454e5445440000000000000000000000000000000000604082015260600190565b6000838252604060208301526113db6040830184613882565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715613c0557600080fd5b604052919050565b6001600160a01b0381168114610a5257600080fd5b60ff81168114610a5257600080fdfea26469706673582212204a830479d41da3261efb4ecabd8812dcac007da4e7d8761aea157b897329a0d864736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a", + "opcodes": "PUSH2 0x500 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x596C CODESIZE SUB DUP1 PUSH3 0x596C DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x1924 JUMP JUMPDEST DUP5 PUSH1 0x0 NOT PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x71 DUP10 ADDRESS PUSH3 0xD89 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE POP DUP10 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x15 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D6F636B537461626C65506F6F6C53746F726167650000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x1353D0D2D7D09415 PUSH1 0xC2 SHL DUP2 MSTORE POP PUSH3 0xEC DUP13 ADDRESS PUSH3 0xD89 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP13 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x107 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x132 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH5 0xE8D4A51000 PUSH1 0x0 DUP1 PUSH1 0x0 DUP3 DUP3 DUP10 DUP10 DUP14 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SHL DUP5 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP8 DUP8 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x187 SWAP3 SWAP2 SWAP1 PUSH3 0x1677 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x19D SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x1677 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x100 MSTORE SWAP2 SWAP1 SHL AND PUSH2 0x120 MSTORE POP PUSH3 0x21B SWAP1 POP PUSH3 0x76A700 DUP4 GT ISZERO PUSH2 0x194 PUSH3 0xF23 JUMP JUMPDEST PUSH3 0x22F PUSH3 0x278D00 DUP3 GT ISZERO PUSH2 0x195 PUSH3 0xF23 JUMP JUMPDEST TIMESTAMP SWAP1 SWAP2 ADD PUSH2 0x140 DUP2 SWAP1 MSTORE ADD PUSH2 0x160 MSTORE DUP6 MLOAD PUSH3 0x251 SWAP1 PUSH1 0x2 GT ISZERO PUSH1 0xC8 PUSH3 0xF23 JUMP JUMPDEST PUSH3 0x26B PUSH3 0x25F PUSH3 0xF38 JUMP JUMPDEST DUP8 MLOAD GT ISZERO PUSH1 0xC9 PUSH3 0xF23 JUMP JUMPDEST PUSH3 0x281 DUP7 PUSH3 0xF3D PUSH1 0x20 SHL PUSH3 0x131C OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x28C DUP5 PUSH3 0xF49 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9B2760F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x9B2760F SWAP1 PUSH3 0x2BD SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH3 0x1ABE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x2ED JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x313 SWAP2 SWAP1 PUSH3 0x18EC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3354E3E9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x66A9C7D2 SWAP1 PUSH3 0x348 SWAP1 DUP5 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH3 0x1A22 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x363 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x378 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x180 DUP2 DUP2 MSTORE POP POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD2946C2B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x3FA SWAP2 SWAP1 PUSH3 0x1905 JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x1A0 MSTORE POP POP DUP10 MLOAD MLOAD SWAP9 POP PUSH3 0x42E SWAP8 POP POP PUSH1 0x2 DUP9 GT SWAP6 POP PUSH1 0xC8 SWAP5 POP PUSH3 0xF23 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH3 0x453 PUSH1 0x1 DUP3 SUB DUP4 PUSH1 0x20 ADD MLOAD MLOAD DUP5 PUSH1 0x40 ADD MLOAD MLOAD PUSH3 0xFDD PUSH1 0x20 SHL PUSH3 0x1326 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH3 0x467 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x200 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x49E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x4D5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x240 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP2 GT PUSH3 0x50B JUMPI PUSH1 0x0 PUSH3 0x524 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x3 SWAP1 DUP2 LT PUSH3 0x51B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x260 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x546 JUMPI PUSH1 0x0 PUSH3 0x55F JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x4 SWAP1 DUP2 LT PUSH3 0x556 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x280 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x581 JUMPI PUSH1 0x0 PUSH3 0x59A JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x5 SWAP1 DUP2 LT PUSH3 0x591 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x2A0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5D3 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x5BF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0xFFD PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2C0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5ED SWAP2 SWAP1 PUSH1 0x1 SWAP1 DUP2 LT PUSH3 0x5BF JUMPI INVALID JUMPDEST PUSH2 0x2E0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x607 SWAP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 LT PUSH3 0x5BF JUMPI INVALID JUMPDEST PUSH2 0x300 MSTORE PUSH1 0x3 DUP2 GT PUSH3 0x61C JUMPI PUSH1 0x0 PUSH3 0x632 JUMP JUMPDEST PUSH3 0x632 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x5BF JUMPI INVALID JUMPDEST PUSH2 0x320 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x647 JUMPI PUSH1 0x0 PUSH3 0x65D JUMP JUMPDEST PUSH3 0x65D DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0x5BF JUMPI INVALID JUMPDEST PUSH2 0x340 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x672 JUMPI PUSH1 0x0 PUSH3 0x688 JUMP JUMPDEST PUSH3 0x688 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0x5BF JUMPI INVALID JUMPDEST PUSH2 0x360 MSTORE DUP2 MLOAD MLOAD PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0x6C5 JUMPI POP DUP3 MLOAD DUP1 MLOAD ADDRESS SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH3 0x6B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x6D5 JUMPI PUSH1 0x0 NOT ADD PUSH3 0x694 JUMP JUMPDEST PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP3 MLOAD MLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x6F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x722 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0x945 JUMPI DUP6 DUP2 LT ISZERO PUSH3 0x861 JUMPI DUP8 PUSH1 0x20 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x750 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x765 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x7CE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7A1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP3 PUSH1 0x6 ADD DUP7 PUSH3 0x10D1 PUSH1 0x20 SHL PUSH3 0x1343 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x7E1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x856 JUMPI PUSH3 0x82D PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x80B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x155 PUSH3 0xF23 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x84A PUSH1 0x1 DUP3 DUP7 PUSH3 0x10D1 PUSH1 0x20 SHL PUSH3 0x1343 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x85B JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH3 0x93C JUMP JUMPDEST DUP6 DUP2 EQ PUSH3 0x93C JUMPI DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x87D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x892 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x8CE PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7A1 JUMPI INVALID JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x8E4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x937 JUMPI PUSH3 0x90E PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x80B JUMPI INVALID JUMPDEST PUSH3 0x92B PUSH1 0x1 DUP3 DUP7 PUSH3 0x10D1 PUSH1 0x20 SHL PUSH3 0x1343 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x93C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH3 0x72B JUMP JUMPDEST POP DUP2 ISZERO PUSH1 0xF8 SWAP1 DUP2 SHL PUSH2 0x460 MSTORE DUP2 ISZERO SWAP1 SHL PUSH2 0x480 MSTORE DUP4 MLOAD DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x967 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x380 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x99A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x9CD JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3C0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP5 MLOAD GT PUSH3 0xA04 JUMPI PUSH1 0x0 PUSH3 0xA1B JUMP JUMPDEST DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0xA12 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x3E0 MSTORE DUP4 MLOAD PUSH1 0x4 LT PUSH3 0xA3E JUMPI PUSH1 0x0 PUSH3 0xA55 JUMP JUMPDEST DUP4 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0xA4C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x400 MSTORE DUP4 MLOAD PUSH1 0x5 LT PUSH3 0xA78 JUMPI PUSH1 0x0 PUSH3 0xA8F JUMP JUMPDEST DUP4 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0xA86 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x420 MSTORE POP POP PUSH2 0x440 MSTORE POP POP DUP3 MLOAD MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD MLOAD PUSH1 0x40 DUP7 ADD MLOAD MLOAD PUSH3 0xAD2 SWAP6 POP SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH3 0xFDD DUP2 SHL PUSH3 0x1326 OR SWAP1 SHR JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH3 0xAE3 SWAP1 ADDRESS PUSH3 0xD89 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xB23 JUMPI POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xB10 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xB33 JUMPI PUSH1 0x0 NOT ADD PUSH3 0xAED JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0xC4C JUMPI DUP3 DUP2 EQ ISZERO PUSH3 0xB50 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP1 MLOAD DUP3 DUP5 ADD SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0xB69 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH3 0xC42 JUMPI PUSH3 0xBC3 DUP2 DUP8 PUSH1 0x20 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH3 0xB96 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xBAF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x10FA PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xBD4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xC18 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH3 0xC2F SWAP2 SWAP1 PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH3 0xC42 DUP2 PUSH3 0x11F5 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH3 0xB37 JUMP JUMPDEST POP POP POP POP POP PUSH1 0x0 NOT DUP2 EQ PUSH1 0xF8 DUP2 SWAP1 SHL PUSH2 0x4C0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP5 SWAP1 SHL AND PUSH2 0x4A0 MSTORE PUSH3 0xC7F DUP4 PUSH1 0x2 PUSH3 0x1234 JUMP JUMPDEST PUSH3 0xC8C DUP4 PUSH1 0x3 PUSH3 0x1234 JUMP JUMPDEST DUP1 ISZERO PUSH3 0xCA6 JUMPI PUSH3 0xCA0 DUP4 PUSH1 0x0 PUSH3 0x1234 JUMP JUMPDEST PUSH3 0xD65 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x178B2B93 PUSH1 0xE2 SHL DUP2 MSTORE PUSH3 0xD3A SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH4 0x5E2CAE4C SWAP1 PUSH3 0xCDA SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xCF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xD08 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xD2E SWAP2 SWAP1 PUSH3 0x18EC JUMP JUMPDEST DUP4 GT ISZERO PUSH2 0x258 PUSH3 0xF23 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x594C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP4 PUSH1 0x40 MLOAD PUSH3 0xD5C SWAP2 SWAP1 PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 JUMPDEST DUP1 PUSH3 0xD72 JUMPI DUP2 PUSH3 0xD75 JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH2 0x4E0 MSTORE POP PUSH3 0x1B45 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xDA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xDD1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 MLOAD PUSH1 0x0 EQ ISZERO PUSH3 0xE14 JUMPI DUP2 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xDEE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xF1D JUMP JUMPDEST DUP3 MLOAD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xE50 JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH3 0xE3D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xE9D JUMPI DUP4 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xE66 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xE7B JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x0 NOT ADD PUSH3 0xE17 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xEEC JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xEB6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xECB JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH3 0xEA0 JUMP JUMPDEST POP DUP3 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xEFB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH3 0xF34 JUMPI PUSH3 0xF34 DUP2 PUSH3 0x13DF JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST DUP1 PUSH3 0xF34 DUP2 PUSH3 0x13F4 JUMP JUMPDEST PUSH3 0xF62 PUSH3 0xF57 PUSH3 0x147B JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH3 0xF23 JUMP JUMPDEST PUSH3 0xF7B PUSH3 0xF70 PUSH3 0x1484 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH3 0xF23 JUMP JUMPDEST PUSH3 0xF9D DUP2 PUSH1 0xC0 PUSH1 0x3F PUSH1 0x8 SLOAD PUSH3 0x1490 PUSH1 0x20 SHL PUSH3 0x136A OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH3 0xFD2 SWAP1 DUP4 SWAP1 PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH3 0xFF8 DUP3 DUP5 EQ DUP1 ISZERO PUSH3 0xFF0 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH3 0xF23 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0x1021 JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH3 0x10CC JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x105D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1072 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1098 SWAP2 SWAP1 PUSH3 0x19FF JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH3 0x10B7 PUSH1 0x12 DUP4 PUSH3 0x14B5 PUSH1 0x20 SHL PUSH3 0x138D OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA EXP PUSH8 0xDE0B6B3A7640000 MUL SWAP3 POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH3 0x10E9 JUMPI PUSH1 0x0 PUSH3 0x10EC JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x1136 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x114B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x1171 SWAP2 SWAP1 PUSH3 0x18EC JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH3 0x11A0 SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH3 0x13A3 PUSH3 0x14CD DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH3 0x11E6 SWAP1 DUP6 SWAP1 PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 PUSH3 0x121E SWAP1 DUP3 SWAP1 PUSH3 0x13E3 PUSH3 0x1529 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1A7C3263 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH3 0x1265 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x127E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x1293 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x12B9 SWAP2 SWAP1 PUSH3 0x18EC JUMP JUMPDEST SWAP1 POP DUP2 PUSH3 0x12FD JUMPI PUSH3 0x12D7 DUP2 PUSH3 0x1554 PUSH1 0x20 SHL PUSH3 0x13FB OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x13B1 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH3 0x1353 JUMPI PUSH3 0x131D DUP2 PUSH3 0x1554 PUSH1 0x20 SHL PUSH3 0x13FB OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH1 0x1 PUSH1 0x40 SHL PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x13B1 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH3 0x13A4 JUMPI PUSH3 0x1373 DUP2 PUSH3 0x1554 PUSH1 0x20 SHL PUSH3 0x13FB OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH3 0x13B1 JUMP JUMPDEST PUSH3 0x13B1 PUSH2 0x1BB PUSH3 0x13DF JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 MLOAD PUSH1 0x20 PUSH3 0x594C DUP4 CODECOPY DUP2 MLOAD SWAP2 MSTORE DUP3 PUSH1 0x40 MLOAD PUSH3 0x13D2 SWAP2 SWAP1 PUSH3 0x1AD3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH3 0x13F1 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x1572 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH3 0x1405 JUMPI PUSH3 0x13F1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x1415 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0xFF8 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x143F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH3 0x1470 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH3 0xF23 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH3 0x1426 JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x149F DUP5 DUP5 DUP5 PUSH3 0x15D3 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x14C7 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH3 0xF23 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x14E2 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH3 0xF23 JUMP JUMPDEST PUSH3 0x1521 TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH3 0x150B DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH3 0x136A PUSH3 0x1490 DUP8 SHL OR DUP7 SHR JUMP JUMPDEST PUSH3 0x1490 PUSH1 0x20 SHL PUSH3 0x136A OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0xF1D PUSH3 0x153A DUP4 PUSH3 0x162E JUMP JUMPDEST PUSH1 0x60 DUP1 DUP6 PUSH3 0x1490 PUSH1 0x20 SHL PUSH3 0x136A OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 PUSH3 0x156E PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT ISZERO PUSH2 0x1BA PUSH3 0xF23 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH3 0x15E4 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0xF23 JUMP JUMPDEST PUSH3 0x161D PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0x1615 JUMPI POP PUSH3 0x1611 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0x164E PUSH1 0x20 SHL PUSH3 0x1418 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0xF23 JUMP JUMPDEST PUSH3 0xFF8 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0xF23 JUMP JUMPDEST PUSH1 0x0 PUSH3 0xF1D PUSH1 0x0 PUSH1 0x60 DUP5 PUSH3 0x1668 PUSH1 0x20 SHL PUSH3 0x1430 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0x165F JUMPI DUP2 PUSH3 0x1661 JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x16BA JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x16EA JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x16EA JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x16EA JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x16CD JUMP JUMPDEST POP PUSH3 0x156E SWAP3 SWAP2 POP JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x156E JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x16F3 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x171A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1731 PUSH3 0x172B DUP3 PUSH3 0x1B03 JUMP JUMPDEST PUSH3 0x1ADC JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1753 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH3 0x1783 JUMPI DUP3 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x1770 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1757 JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x17A0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x17B1 PUSH3 0x172B DUP3 PUSH3 0x1B03 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x17D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x17FF JUMPI DUP2 MLOAD PUSH3 0x17EC DUP2 PUSH3 0x1B2F JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x17D6 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x181B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x182C PUSH3 0x172B DUP3 PUSH3 0x1B03 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x184E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x17FF JUMPI DUP2 MLOAD PUSH3 0x1867 DUP2 PUSH3 0x1B2F JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1851 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x188B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x189C PUSH3 0x172B DUP3 PUSH3 0x1B03 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x18BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x17FF JUMPI DUP2 MLOAD DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x18C1 JUMP JUMPDEST DUP1 MLOAD PUSH3 0xF1D DUP2 PUSH3 0x1B2F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x18FE JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1917 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1661 DUP2 PUSH3 0x1B2F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xC0 DUP8 DUP10 SUB SLT ISZERO PUSH3 0x193D JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH3 0x1949 DUP9 DUP9 PUSH3 0x18DF JUMP JUMPDEST SWAP6 POP PUSH3 0x195A DUP9 PUSH1 0x20 DUP10 ADD PUSH3 0x18DF JUMP JUMPDEST PUSH1 0x40 DUP9 ADD MLOAD SWAP1 SWAP6 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x1977 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x1985 DUP11 DUP4 DUP12 ADD PUSH3 0x178F JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x199B JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x19A9 DUP11 DUP4 DUP12 ADD PUSH3 0x180A JUMP JUMPDEST SWAP5 POP PUSH1 0x80 DUP10 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x19BF JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH3 0x19CD DUP11 DUP4 DUP12 ADD PUSH3 0x187A JUMP JUMPDEST SWAP4 POP PUSH1 0xA0 DUP10 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x19E3 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH3 0x19F2 DUP10 DUP3 DUP11 ADD PUSH3 0x1709 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP3 SWAP6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1A11 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0x1661 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP9 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1A6E JUMPI PUSH3 0x1A5B DUP6 MLOAD PUSH3 0x1B23 JUMP JUMPDEST DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1A46 JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1AB0 JUMPI PUSH3 0x1A9D DUP4 MLOAD PUSH3 0x1B23 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1A88 JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH3 0x1ACD JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x1AFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x1B19 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x13F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH1 0x60 SHR PUSH2 0x220 MLOAD PUSH1 0x60 SHR PUSH2 0x240 MLOAD PUSH1 0x60 SHR PUSH2 0x260 MLOAD PUSH1 0x60 SHR PUSH2 0x280 MLOAD PUSH1 0x60 SHR PUSH2 0x2A0 MLOAD PUSH1 0x60 SHR PUSH2 0x2C0 MLOAD PUSH2 0x2E0 MLOAD PUSH2 0x300 MLOAD PUSH2 0x320 MLOAD PUSH2 0x340 MLOAD PUSH2 0x360 MLOAD PUSH2 0x380 MLOAD PUSH1 0x60 SHR PUSH2 0x3A0 MLOAD PUSH1 0x60 SHR PUSH2 0x3C0 MLOAD PUSH1 0x60 SHR PUSH2 0x3E0 MLOAD PUSH1 0x60 SHR PUSH2 0x400 MLOAD PUSH1 0x60 SHR PUSH2 0x420 MLOAD PUSH1 0x60 SHR PUSH2 0x440 MLOAD PUSH2 0x460 MLOAD PUSH1 0xF8 SHR PUSH2 0x480 MLOAD PUSH1 0xF8 SHR PUSH2 0x4A0 MLOAD PUSH1 0x60 SHR PUSH2 0x4C0 MLOAD PUSH1 0xF8 SHR PUSH2 0x4E0 MLOAD PUSH2 0x3C67 PUSH3 0x1CE5 PUSH1 0x0 CODECOPY DUP1 PUSH2 0xBC4 MSTORE POP DUP1 PUSH2 0x85B MSTORE POP DUP1 PUSH2 0x7DB MSTORE DUP1 PUSH2 0x806 MSTORE DUP1 PUSH2 0x831 MSTORE POP DUP1 PUSH2 0x2EEC MSTORE POP DUP1 PUSH2 0x2EC8 MSTORE POP DUP1 PUSH2 0x24A1 MSTORE DUP1 PUSH2 0x3150 MSTORE POP DUP1 PUSH2 0x181F MSTORE POP DUP1 PUSH2 0x17EF MSTORE POP DUP1 PUSH2 0x17BF MSTORE POP DUP1 PUSH2 0x178F MSTORE POP DUP1 PUSH2 0x175F MSTORE POP DUP1 PUSH2 0x172F MSTORE POP POP POP POP POP POP POP DUP1 PUSH2 0x1A8A MSTORE POP DUP1 PUSH2 0x1A48 MSTORE POP DUP1 PUSH2 0x1A06 MSTORE POP DUP1 PUSH2 0x19C4 MSTORE POP DUP1 PUSH2 0x1982 MSTORE POP DUP1 PUSH2 0x1940 MSTORE POP DUP1 PUSH2 0xE12 MSTORE POP DUP1 PUSH2 0x1703 MSTORE POP DUP1 PUSH2 0x1060 MSTORE POP DUP1 PUSH2 0xA57 MSTORE POP DUP1 PUSH2 0x16DA MSTORE POP DUP1 PUSH2 0x16B6 MSTORE POP DUP1 PUSH2 0xEE4 MSTORE POP DUP1 PUSH2 0xEC0 MSTORE POP DUP1 PUSH2 0xE4A MSTORE POP DUP1 PUSH2 0x267F MSTORE POP DUP1 PUSH2 0x26C1 MSTORE POP DUP1 PUSH2 0x26A0 MSTORE POP PUSH2 0x3C67 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x362 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7F1260D1 GT PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xAB7759F1 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xD5C096C4 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xED24911D GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6D3 JUMPI DUP1 PUSH4 0xF465D912 EQ PUSH2 0x6DB JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0xF7EA7A3D EQ PUSH2 0x701 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6A5 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x6CB JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0xB7B814FC GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x66F JUMPI DUP1 PUSH4 0xC37BB32C EQ PUSH2 0x677 JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x692 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x632 JUMPI DUP1 PUSH4 0xAC392DA6 EQ PUSH2 0x645 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x667 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0xA27FF18A GT PUSH2 0x14B JUMPI DUP1 PUSH4 0xA27FF18A EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x62A JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x5CE JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5E9 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x593 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x5B9 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x58B JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x38FFF2D0 GT PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x55C67628 GT PUSH2 0x240 JUMPI DUP1 PUSH4 0x70464016 GT PUSH2 0x21A JUMPI DUP1 PUSH4 0x70464016 EQ PUSH2 0x506 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x52C JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x54D JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x55C67628 EQ PUSH2 0x4CA JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x64499362 EQ PUSH2 0x4F3 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0x27C JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x4B7 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x47E JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA GT PUSH2 0x30F JUMPI DUP1 PUSH4 0x2DF2C7C0 GT PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x450 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x40D JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x15B0015B GT PUSH2 0x340 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x3CC JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x367 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x3A5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x36F PUSH2 0x714 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3B36 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x398 PUSH2 0x393 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0x7AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3A3D JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x7C1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x398 PUSH2 0x859 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x87D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH2 0x3D4 PUSH2 0x883 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3A48 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH2 0x400 PUSH2 0x8BB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x39AF JUMP JUMPDEST PUSH2 0x398 PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x3471 JUMP JUMPDEST PUSH2 0x956 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0x9CA JUMP JUMPDEST PUSH2 0x43B PUSH2 0xA26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3BD8 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xA2F JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x45E CALLDATASIZE PUSH1 0x4 PUSH2 0x3748 JUMP JUMPDEST PUSH2 0xA39 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0xA79 JUMP JUMPDEST PUSH2 0x486 PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP3 SWAP2 SWAP1 PUSH2 0x3B99 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0xADF JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x4AA CALLDATASIZE PUSH1 0x4 PUSH2 0x36FA JUMP JUMPDEST PUSH2 0xAF1 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0xB0F JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x4C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xB21 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xB3C JUMP JUMPDEST PUSH2 0x4E5 PUSH2 0x4E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0xB4F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP3 SWAP2 SWAP1 PUSH2 0x3B80 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x501 CALLDATASIZE PUSH1 0x4 PUSH2 0x3778 JUMP JUMPDEST PUSH2 0xB86 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x514 CALLDATASIZE PUSH1 0x4 PUSH2 0x3748 JUMP JUMPDEST PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x527 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xC60 JUMP JUMPDEST PUSH2 0x53F PUSH2 0x53A CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0xC7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP3 SWAP2 SWAP1 PUSH2 0x3A0F JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x55B CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xDA3 JUMP JUMPDEST PUSH2 0x573 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xDAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3BBD JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xE10 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0xE34 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x5A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x369E JUMP JUMPDEST PUSH2 0xE46 JUMP JUMPDEST PUSH2 0x4E5 PUSH2 0x5B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0xE98 JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x399B JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0xEE2 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x5E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xF06 JUMP JUMPDEST PUSH2 0x36F PUSH2 0xF21 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x358F JUMP JUMPDEST PUSH2 0xF82 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0xF9A JUMP JUMPDEST PUSH2 0x398 PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0xFD8 JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0xFE5 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x640 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xFEF JUMP JUMPDEST PUSH2 0x658 PUSH2 0x653 CALLDATASIZE PUSH1 0x4 PUSH2 0x354C JUMP JUMPDEST PUSH2 0x1002 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3BA7 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x101F JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x1030 JUMP JUMPDEST PUSH2 0x4E5 PUSH2 0x685 CALLDATASIZE PUSH1 0x4 PUSH2 0x358F JUMP JUMPDEST PUSH2 0x1042 JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0x105E JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x6A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x34B1 JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x53F PUSH2 0x6B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0x110D JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x6C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3439 JUMP JUMPDEST PUSH2 0x1230 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x126D JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x1273 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x6E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x37D8 JUMP JUMPDEST PUSH2 0x127D JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x6FC CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0x1287 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x70F CALLDATASIZE PUSH1 0x4 PUSH2 0x3748 JUMP JUMPDEST PUSH2 0x1313 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7A0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x775 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7A0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x783 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7B7 CALLER DUP5 DUP5 PUSH2 0x143F JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x7C9 PUSH2 0x857 JUMP JUMPDEST PUSH2 0x7D1 PUSH2 0x859 JUMP JUMPDEST ISZERO PUSH2 0x801 JUMPI PUSH2 0x801 PUSH32 0x0 PUSH1 0x0 PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x82C PUSH32 0x0 PUSH1 0x2 PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x857 PUSH32 0x0 PUSH1 0x3 PUSH2 0x14A7 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x890 PUSH2 0x1697 JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x89B PUSH2 0x16B4 JUMP JUMPDEST SWAP2 POP PUSH2 0x8A5 PUSH2 0x16D8 JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x8B6 PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x8C7 PUSH2 0x1701 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x90C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x94F JUMPI PUSH2 0x923 DUP2 PUSH2 0x1725 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x92F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x912 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x963 DUP6 CALLER PUSH2 0x1230 JUMP JUMPDEST SWAP1 POP PUSH2 0x987 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0x97F JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x184E JUMP JUMPDEST PUSH2 0x992 DUP6 DUP6 DUP6 PUSH2 0x185C JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x9AD JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x9BF JUMPI PUSH2 0x9BF DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x143F JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D5 DUP3 PUSH2 0x193C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9E2 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP PUSH2 0x9FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xA13 SWAP1 PUSH2 0x1ACA JUMP JUMPDEST SWAP1 POP PUSH2 0xA20 DUP4 DUP4 DUP4 PUSH2 0x1AD9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B6 PUSH2 0x1273 JUMP JUMPDEST PUSH2 0xA41 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0xA49 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0xA52 DUP2 PUSH2 0x1C15 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x7B7 SWAP2 DUP6 SWAP1 PUSH2 0xAAF SWAP1 DUP7 PUSH2 0x1C8E JUMP JUMPDEST PUSH2 0x143F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xAC9 DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1430 JUMP JUMPDEST SWAP3 POP PUSH2 0xAD8 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1430 JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xAE7 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x0 PUSH2 0x1CA0 JUMP JUMPDEST PUSH2 0xAF9 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0xB01 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x1D31 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xB17 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x1 PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH2 0xB2F DUP4 PUSH2 0x193C JUMP JUMPDEST PUSH2 0x1E96 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x8B6 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xB65 DUP7 MLOAD PUSH2 0xB60 PUSH2 0x1701 JUMP JUMPDEST PUSH2 0x1EE9 JUMP JUMPDEST PUSH2 0xB7A DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1EF6 PUSH2 0x1F35 PUSH2 0x1F9E JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB93 DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x2153 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA4 PUSH2 0x101F JUMP JUMPDEST ISZERO PUSH2 0xBB1 JUMPI POP PUSH1 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH2 0xBFD JUMPI PUSH2 0xBBE PUSH2 0x859 JUMP JUMPDEST PUSH2 0xBE8 JUMPI PUSH32 0x0 PUSH2 0xBF6 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xC25 JUMPI POP PUSH1 0xA SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xC55 JUMPI POP PUSH1 0xA SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xB37 JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x1BB PUSH2 0x21D3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xCA5 PUSH2 0xC8A PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x184E JUMP JUMPDEST PUSH2 0xCBA PUSH2 0xCB0 PUSH2 0xA55 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xCC7 DUP7 PUSH2 0x21FD JUMP JUMPDEST ISZERO PUSH2 0xCEF JUMPI PUSH2 0xCD4 PUSH2 0x222C JUMP JUMPDEST PUSH2 0xCE6 DUP10 PUSH2 0xCE0 PUSH2 0x87D JUMP JUMPDEST DUP9 PUSH2 0x223F JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xD41 JUMP JUMPDEST PUSH2 0xCF7 PUSH2 0x226B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xD01 PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP PUSH2 0xD0D DUP11 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH2 0xD31 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xD1D PUSH2 0x101F JUMP JUMPDEST PUSH2 0xD27 JUMPI DUP14 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x1EF6 JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xD3F DUP4 DUP3 PUSH2 0x1F35 JUMP JUMPDEST POP JUMPDEST PUSH2 0xD4B DUP12 DUP3 PUSH2 0x22DC JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xD64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD8E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH2 0xF06 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x9 PUSH1 0x0 PUSH2 0xDC3 DUP9 PUSH2 0x193C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0xDE4 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x184E JUMP JUMPDEST PUSH2 0xDED DUP2 PUSH2 0x22E6 JUMP JUMPDEST SWAP5 POP PUSH2 0xDF8 DUP2 PUSH2 0x22F4 JUMP JUMPDEST SWAP4 POP PUSH2 0xE03 DUP2 PUSH2 0x2302 JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0xE3C PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x1 PUSH2 0x1CA0 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE7B SWAP3 SWAP2 SWAP1 PUSH2 0x3925 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xEA9 DUP7 MLOAD PUSH2 0xB60 PUSH2 0x1701 JUMP JUMPDEST PUSH2 0xB7A DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1EF6 PUSH2 0x2324 PUSH2 0x1F9E JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7A0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x775 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7A0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF90 DUP6 DUP6 DUP6 PUSH2 0x238D JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFA7 CALLER DUP6 PUSH2 0x1230 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0xFC1 JUMPI PUSH2 0xFBC CALLER DUP6 PUSH1 0x0 PUSH2 0x143F JUMP JUMPDEST PUSH2 0xFCE JUMP JUMPDEST PUSH2 0xFCE CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x143F JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7B7 CALLER DUP5 DUP5 PUSH2 0x185C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B6 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH2 0xFFD DUP4 PUSH2 0x193C JUMP JUMPDEST PUSH2 0x249A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1011 DUP6 DUP6 PUSH2 0x24C6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x8B6 SWAP1 PUSH1 0xFF PUSH2 0x2547 JUMP JUMPDEST PUSH2 0x1038 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x0 PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1051 DUP6 DUP6 DUP6 PUSH2 0x2551 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x10B1 DUP13 PUSH2 0xF06 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10C7 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3A88 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x10F8 DUP9 DUP3 PUSH2 0x10EF DUP8 DUP8 DUP8 PUSH2 0x25A9 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x25E8 JUMP JUMPDEST PUSH2 0x1103 DUP9 DUP9 DUP9 PUSH2 0x143F JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x111C PUSH2 0xC8A PUSH2 0xEE2 JUMP JUMPDEST PUSH2 0x1127 PUSH2 0xCB0 PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x112F PUSH2 0x226B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1139 PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP PUSH2 0x1143 PUSH2 0x87D JUMP JUMPDEST PUSH2 0x11F0 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1158 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x1EF6 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1171 PUSH2 0x1167 PUSH2 0x263F JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1183 PUSH1 0x0 PUSH2 0x117E PUSH2 0x263F JUMP JUMPDEST PUSH2 0x2646 JUMP JUMPDEST PUSH2 0x1196 DUP12 PUSH2 0x118F PUSH2 0x263F JUMP JUMPDEST DUP5 SUB PUSH2 0x2646 JUMP JUMPDEST PUSH2 0x11A0 DUP2 DUP5 PUSH2 0x2324 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x11B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x11E3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x11FA DUP9 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1222 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x120E PUSH2 0x101F JUMP JUMPDEST PUSH2 0x1218 JUMPI DUP14 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x1EF6 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1196 DUP12 DUP4 PUSH2 0x2646 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x123A PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x125C JUMPI POP PUSH1 0x0 NOT PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x1266 DUP4 DUP4 PUSH2 0x2650 JUMP JUMPDEST SWAP1 POP PUSH2 0x7BB JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B6 PUSH2 0x267B JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x2718 JUMP JUMPDEST PUSH2 0x128F PUSH2 0x1BBC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x129A DUP4 PUSH2 0x193C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12A7 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x12CB DUP3 DUP3 DUP6 PUSH2 0x1AD9 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1305 SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0xA52 DUP2 PUSH2 0x273E JUMP JUMPDEST DUP1 PUSH2 0xB0B DUP2 PUSH2 0x2743 JUMP JUMPDEST PUSH2 0x133E DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1337 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x184E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x1359 JUMPI PUSH1 0x0 PUSH2 0x135C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1377 DUP5 DUP5 DUP5 PUSH2 0x27BC JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139D DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x184E JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B6 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x13DB TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x13D3 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x136A JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x136A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH2 0x13F1 DUP4 PUSH2 0x22E6 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x136A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1414 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x184E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1427 JUMPI DUP2 PUSH2 0x1429 JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x149A SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x14EF SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1507 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x151B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x153F SWAP2 SWAP1 PUSH2 0x3760 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x158D JUMPI PUSH2 0x154F DUP2 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x165A JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x15EA JUMPI PUSH2 0x159F DUP2 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x165A JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x164F JUMPI PUSH2 0x15FC DUP2 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x165A JUMP JUMPDEST PUSH2 0x165A PUSH2 0x1BB PUSH2 0x21D3 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x168A SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16A1 PUSH2 0x16D8 JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x8B6 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1753 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1783 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x17B3 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x17E3 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1813 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1843 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x135 PUSH2 0x21D3 JUMP JUMPDEST DUP2 PUSH2 0xB0B JUMPI PUSH2 0xB0B DUP2 PUSH2 0x21D3 JUMP JUMPDEST PUSH2 0x1873 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x188A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1895 DUP4 DUP4 DUP4 PUSH2 0x133E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x18BB SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x2803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x18EA SWAP1 DUP3 PUSH2 0x1C8E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x149A SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1980 JUMPI POP PUSH1 0x0 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x19C2 JUMPI POP PUSH1 0x1 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1A04 JUMPI POP PUSH1 0x2 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1A46 JUMPI POP PUSH1 0x3 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1A88 JUMPI POP PUSH1 0x4 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1843 JUMPI POP PUSH1 0x5 PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B4C SWAP2 SWAP1 PUSH2 0x3760 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1B69 DUP2 DUP4 DUP6 PUSH2 0x13A3 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x1BAD SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BEB PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xE46 JUMP JUMPDEST SWAP1 POP PUSH2 0xA52 PUSH2 0x1BFA DUP3 CALLER PUSH2 0x2819 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x857 PUSH2 0x1C0D PUSH2 0x1697 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1C2A PUSH2 0x1C20 PUSH2 0x2902 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1C3F PUSH2 0x1C35 PUSH2 0x290B JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x184E JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1C50 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x136A JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x1C83 SWAP1 DUP4 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x1429 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x184E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1CC0 JUMPI PUSH2 0x1CBB PUSH2 0x1CB1 PUSH2 0x16B4 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1CD5 JUMP JUMPDEST PUSH2 0x1CD5 PUSH2 0x1CCB PUSH2 0x16D8 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x1C83 SWAP1 DUP4 SWAP1 PUSH2 0x3A3D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D3B PUSH2 0xA55 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1D47 PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D74 SWAP3 SWAP2 SWAP1 PUSH2 0x3B01 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DC4 SWAP2 SWAP1 PUSH2 0x37F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x1E11 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3AE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1E4E SWAP1 DUP3 PUSH1 0xFF PUSH2 0x1343 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x1E81 SWAP1 DUP4 SWAP1 PUSH2 0x3A3D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xA52 JUMPI PUSH2 0xA52 PUSH2 0x857 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EA0 PUSH2 0xE10 JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x1EB6 JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1ED9 JUMPI PUSH2 0x1ED4 DUP2 PUSH2 0x22E6 JUMP JUMPDEST PUSH2 0x1429 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB0B DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F2C SWAP1 PUSH2 0x3B49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1F44 SWAP1 DUP3 SWAP1 PUSH2 0x1EE9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH2 0x1F7F DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1F5E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F72 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2917 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1F8B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1F47 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x208D JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x1FC2 SWAP3 SWAP2 SWAP1 PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1FFF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2004 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2013 JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x206F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x2095 PUSH2 0x226B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x209F PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP PUSH2 0x20AB DUP8 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x20C3 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x20D5 DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x215F DUP7 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x216D DUP4 DUP6 PUSH2 0x2917 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x217B DUP7 DUP4 PUSH2 0x2ACA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x21C9 JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x21A5 PUSH2 0x219F DUP4 PUSH2 0x219A DUP5 PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x2B00 JUMP JUMPDEST DUP7 PUSH2 0x2B1A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x21C6 JUMPI PUSH1 0x0 PUSH2 0x21B9 DUP8 DUP4 PUSH2 0x2B3A JUMP JUMPDEST SWAP1 POP PUSH2 0x21C4 DUP2 PUSH2 0x2B52 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x1103 DUP9 DUP5 PUSH2 0x2718 JUMP JUMPDEST PUSH2 0xA52 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x2B63 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xB34 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2222 SWAP2 SWAP1 PUSH2 0x3839 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x857 PUSH2 0x2237 PUSH2 0x101F JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x224E DUP5 PUSH2 0x2BDE JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x225D DUP8 DUP8 DUP5 PUSH2 0x2BF4 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x857 PUSH2 0x1C02 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2282 SWAP1 DUP3 SWAP1 PUSH2 0x1EE9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH2 0x22BD DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x229C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22B0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2ACA JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x22C9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2285 JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x2CA3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 DUP3 PUSH1 0x60 PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH1 0x60 DUP1 PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x230E DUP4 PUSH2 0x1ACA JUMP JUMPDEST SWAP2 POP PUSH2 0x231D DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1430 JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2333 SWAP1 DUP3 SWAP1 PUSH2 0x1EE9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH2 0x236E DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x234D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2361 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2D6F JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x237A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2336 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x239F DUP9 DUP9 PUSH2 0x24C6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x23B5 JUMPI PUSH1 0x0 PUSH2 0x23B9 JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x23CB JUMPI PUSH1 0x0 PUSH2 0x23CF JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23F0 PUSH2 0x23E0 PUSH1 0x0 PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x23EA DUP6 DUP8 PUSH2 0x2917 JUMP JUMPDEST SWAP1 PUSH2 0x2ACA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x240B PUSH2 0x2401 PUSH1 0x2 PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x23EA DUP6 DUP9 PUSH2 0x2917 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x242A PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2476 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B6 SWAP2 SWAP1 PUSH2 0x36DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH32 0x0 DUP4 PUSH2 0x2547 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x24DF DUP5 PUSH2 0x24DA DUP8 PUSH1 0x1 PUSH2 0x2DBD JUMP JUMPDEST PUSH2 0x2968 JUMP JUMPDEST SWAP3 POP PUSH2 0x24E9 PUSH2 0x2EC6 JUMP JUMPDEST ISZERO PUSH2 0x2502 JUMPI PUSH2 0x24F8 DUP5 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x1018 JUMP JUMPDEST PUSH2 0x250A PUSH2 0x2EEA JUMP JUMPDEST ISZERO PUSH2 0x2523 JUMPI DUP3 SWAP2 POP PUSH2 0x251C DUP5 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP1 POP PUSH2 0x1018 JUMP JUMPDEST PUSH2 0x2532 DUP5 PUSH2 0x24DA DUP8 PUSH1 0x0 PUSH2 0x2DBD JUMP JUMPDEST SWAP2 POP PUSH2 0x253E DUP5 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x2563 DUP9 PUSH2 0x2F0E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x2575 DUP4 DUP11 DUP11 PUSH2 0x238D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2585 DUP6 DUP5 PUSH2 0x2B3A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2596 JUMPI PUSH2 0x2596 DUP2 PUSH2 0x2B52 JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F3 DUP6 PUSH2 0x2F47 JUMP JUMPDEST SWAP1 POP PUSH2 0x2609 PUSH2 0x2603 DUP8 DUP4 DUP8 PUSH2 0x2F63 JUMP JUMPDEST DUP4 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x2618 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x184E JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x3030 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x26E8 PUSH2 0x30BD JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x26FD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3ABC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2725 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x30C1 JUMP JUMPDEST PUSH2 0x2732 DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x30C1 JUMP JUMPDEST OR PUSH1 0xB SSTORE PUSH2 0xB0B PUSH2 0x30D4 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2752 JUMPI PUSH2 0xA52 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2761 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x133E JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2789 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x27B2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x184E JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2772 JUMP JUMPDEST PUSH2 0x27CB PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x27F4 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x27ED JUMPI POP PUSH2 0x27E9 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1418 JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x133E DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2812 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x184E JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x2838 PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2853 JUMPI POP PUSH2 0x2853 DUP4 PUSH2 0x310A JUMP JUMPDEST ISZERO PUSH2 0x287B JUMPI PUSH2 0x2860 PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x2883 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28B2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3A69 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1266 SWAP2 SWAP1 PUSH2 0x35DB JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2926 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x184E JUMP JUMPDEST DUP3 PUSH2 0x2933 JUMPI POP PUSH1 0x0 PUSH2 0x7BB JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2956 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x294D JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x184E JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x295F JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x7BB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x29A9 JUMPI PUSH2 0x299F DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2988 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x1C8E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2971 JUMP JUMPDEST POP DUP2 PUSH2 0x29BA JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x7BB JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2AB3 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x2A10 JUMPI PUSH2 0x2A06 PUSH2 0x29E4 DUP4 DUP8 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A01 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29F3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2B1A JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x29CF JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x2A69 PUSH2 0x2A48 PUSH2 0x2A42 PUSH2 0x2A27 DUP5 DUP11 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A3C PUSH2 0x2A34 DUP9 DUP14 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x2B1A JUMP JUMPDEST SWAP1 PUSH2 0x1C8E JUMP JUMPDEST DUP7 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A01 PUSH2 0x2A58 DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A3C PUSH2 0x2A34 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x2B00 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2A8C JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x2AAA JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x7BB JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29C2 JUMP JUMPDEST POP PUSH2 0x2ABF PUSH2 0x141 PUSH2 0x21D3 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x2AEE DUP5 ISZERO DUP1 PUSH2 0x2AE7 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2AE4 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x184E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1429 DUP5 ISZERO DUP1 PUSH2 0x2AE7 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2AE4 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x2B29 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x184E JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x2B32 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1429 PUSH2 0x2B49 DUP5 DUP5 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A01 DUP5 PUSH2 0x3115 JUMP JUMPDEST PUSH2 0xA52 PUSH2 0x2B5D PUSH2 0x105E JUMP JUMPDEST DUP3 PUSH2 0x2646 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1429 SWAP2 SWAP1 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C02 DUP4 DUP6 PUSH2 0x2917 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2C1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C46 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x2C9A JUMPI PUSH2 0x2C7B DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2C65 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2ACA SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2C87 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2C4C JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2CBA PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x184E JUMP JUMPDEST PUSH2 0x2CC6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x133E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2CEC SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x2803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x2D1F PUSH2 0x2D1A DUP3 PUSH2 0x2D14 PUSH2 0x87D JUMP JUMPDEST SWAP1 PUSH2 0x313B JUMP JUMPDEST PUSH2 0x273E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2D63 SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D7E DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x184E JUMP JUMPDEST DUP3 PUSH2 0x2D8B JUMPI POP PUSH1 0x0 PUSH2 0x7BB JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2DA5 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x294D JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x2DB1 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x7BB JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2DDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2E04 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2EBD JUMPI PUSH1 0x0 PUSH2 0x2E1C PUSH2 0xE10 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x2E29 JUMPI DUP2 PUSH2 0x2E2E JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x2E39 DUP2 PUSH2 0x249A JUMP JUMPDEST DUP1 PUSH2 0x2E50 JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x2E50 JUMPI POP PUSH2 0x2E50 DUP2 PUSH2 0x3149 JUMP JUMPDEST PUSH2 0x2E6D JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E60 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2E9D JUMP JUMPDEST PUSH2 0x2E9D DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2E7C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x9 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3178 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EA9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2E0A JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x2F35 DUP4 PUSH2 0x2F1E PUSH2 0xE10 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F28 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3193 JUMP JUMPDEST PUSH2 0x2F3E DUP5 PUSH2 0x31A7 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F51 PUSH2 0x267B JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE7B SWAP3 SWAP2 SWAP1 PUSH2 0x3965 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F75 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x2FAE SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x3B18 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3024 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x303C PUSH1 0x0 DUP4 DUP4 PUSH2 0x133E JUMP JUMPDEST PUSH2 0x304B PUSH2 0x2D1A DUP3 PUSH2 0x2A3C PUSH2 0x87D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x306E SWAP1 DUP3 PUSH2 0x1C8E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x2D63 SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30CE DUP5 DUP5 DUP5 PUSH2 0x27BC JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30DE PUSH2 0x1701 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB0B JUMPI PUSH2 0x30F4 DUP2 PUSH2 0x3149 JUMP JUMPDEST ISZERO PUSH2 0x3102 JUMPI PUSH2 0x3102 DUP2 PUSH2 0x3250 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x30E3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x312D JUMPI PUSH1 0x0 PUSH2 0xB34 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1429 DUP4 DUP4 PUSH1 0x1 PUSH2 0x2803 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2547 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1429 PUSH2 0x318A DUP5 PUSH2 0x219A DUP6 PUSH2 0x22F4 JUMP JUMPDEST PUSH2 0x2A01 DUP5 PUSH2 0x22E6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH2 0x31A1 PUSH2 0x87D JUMP JUMPDEST SWAP1 PUSH2 0x138D JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x31C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x31EF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3249 JUMPI DUP4 PUSH2 0x3207 PUSH2 0xE10 JUMP JUMPDEST DUP3 LT PUSH2 0x3216 JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3218 JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3222 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3236 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x31F5 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3268 DUP2 PUSH2 0x13E3 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32A9 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0xE46 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xB34 JUMPI POP PUSH2 0xB34 DUP3 PUSH1 0x0 PUSH2 0x32E0 PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0xE46 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x3314 JUMPI POP PUSH2 0x3311 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0xE46 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xB34 JUMPI POP PUSH1 0x0 PUSH2 0xB34 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3331 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3347 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MUL PUSH2 0x3357 DUP3 DUP3 ADD PUSH2 0x3BE6 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP4 POP DUP2 DUP5 ADD DUP6 DUP4 ADD DUP3 DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x3373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x2ABF JUMPI DUP1 CALLDATALOAD DUP3 MSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3378 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x33A6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x33BC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x33ED PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x3BE6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x342E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1429 DUP2 PUSH2 0x3C0D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x344B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3456 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3466 DUP2 PUSH2 0x3C0D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3485 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3490 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34A0 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x34CB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x34D6 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x34E6 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x3504 DUP2 PUSH2 0x3C22 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3533 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x353E DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x355E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3574 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x3580 DUP6 DUP3 DUP7 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x35A3 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x35B9 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x35C5 DUP7 DUP3 DUP8 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35EC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1429 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3615 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3627 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x3637 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3653 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x365F DUP12 DUP4 DUP13 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3682 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x368F DUP11 DUP3 DUP12 ADD PUSH2 0x3396 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36AF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1429 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36EF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1429 DUP2 PUSH2 0x3C0D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x370C JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3717 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3732 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x373E DUP6 DUP3 DUP7 ADD PUSH2 0x3396 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3759 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3771 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x378F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x37AC JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x37B8 DUP9 DUP3 DUP10 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP6 SWAP9 SWAP6 SWAP8 POP POP POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP4 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP4 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x37EA JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x380E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x382E DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x384A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1429 DUP2 PUSH2 0x3C22 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3867 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x3872 DUP2 PUSH2 0x3C22 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38B1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3895 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x38E1 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x38C5 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x38F2 JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x39F0 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x39CB JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1429 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3882 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x3A22 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3882 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3A34 DUP2 DUP6 PUSH2 0x3882 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x13DB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x38BC JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1429 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x38BC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH32 0x4E4F545F494D504C454D454E5445440000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x13DB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3882 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A DUP4 DIV PUSH26 0xD41DA3261EFB4ECABD8812DCAC007DA4E7D8761AEA157B897329 LOG0 0xD8 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER PUSH12 0xFB689528FA96EC1AD670AD6D PUSH1 0x64 0xBE BYTE 0xE9 PUSH12 0xFD5D2EE35C837FD0FE0C1195 SWAP11 ", + "sourceMap": "877:4315:63:-:0;;;965:1348;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1811:19;-1:-1:-1;;1599:176:63;;;;;;;;1637:6;1599:176;;;;1676:18;1599:176;;;;1737:23;1599:176;;;1303:238;;;;;;;;1353:35;1367:6;1382:4;1353:13;;;:35;;:::i;:::-;1303:238;;;;1426:18;1303:238;;;;1495:31;1303:238;;;1917:5;1936:33;4845:2186:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4845:2186:28;;;2044:35:63;2058:6;2073:4;2044:13;;;:35;;:::i;:::-;2107:6;:13;2123:1;2107:17;-1:-1:-1;;;;;2093:32:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2093:32:63;;2139:4;2194:1;2209;2232;5893:19:28;5914:20;5807:4;5813:6;5821:5;5858;5767:10;-1:-1:-1;;;;;5759:19:28;5751:28;;1749:9:26;1301:4:52;2020:280:50;;;;;;;;;;;;;-1:-1:-1;;;2020:280:50;;;1713:9:26;1724:11;2126:5:51;2118;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;-1:-1:-1;;2168:14:51;2180:2;2168:14;;;-1:-1:-1;2100:22:50;;;;;;;2085:37;;2150:25;;;;;2132:43;;-1:-1:-1;2198:95:50;2185:108;;2049:46:38;;-1:-1:-1;;;;;;1724:14:29;;;;;;2168::51;1724::29;1770::26;;;;::::2;::::0;-1:-1:-1;2578:93:45;;-1:-1:-1;2284:7:45;2587:49;;;10056:3:10;2578:8:45;:93::i;:::-;2681:96;2352:7;2690:51;;;10120:3:10;2681:8:45;:96::i;:::-;2817:15;:37;;;2865:40;;;;2938:41;2915:64;;5959:13:28;;5950:57:::4;::::0;3201:1:::4;-1:-1:-1::0;5959:28:28::4;5921:3:10;5950:8:28;:57::i;:::-;6017:61;6043:15;:13;:15::i;:::-;6026:13:::0;;:32:::4;;5969:3:10;6017:8:28;:61::i;:::-;6626:40;6659:6;6626:32;;;;;:40;;:::i;:::-;6677;6699:17:::0;6677:21:::4;:40::i;:::-;6745:34;::::0;-1:-1:-1;;;6745:34:28;;6728:14:::4;::::0;-1:-1:-1;;;;;6745:18:28;::::4;::::0;::::4;::::0;:34:::4;::::0;6764:14;;6745:34:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6790:51;::::0;-1:-1:-1;;;6790:51:28;;6728;;-1:-1:-1;;;;;;6790:20:28;::::4;::::0;::::4;::::0;:51:::4;::::0;6728;;6819:6;;6827:13;;6790:51:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;6951:6;6941:16;;;;::::0;::::4;6992:5;-1:-1:-1::0;;;;;6992:30:28::4;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6967:57;::::0;-1:-1:-1;;;;;;6967:57:28;::::4;::::0;-1:-1:-1;;4590:23:59;;:30;;-1:-1:-1;4630:62:59;;-1:-1:-1;;1568:1:59;4639:33;;;-1:-1:-1;5921:3:10;;-1:-1:-1;4630:8:59;;-1:-1:-1;;;;4630:62:59:i;:::-;4702:179;4765:1;4751:11;:15;4780:6;:25;;;:32;4826:6;:38;;;:45;4702:35;;;;;:179;;:::i;:::-;4892:26;;;;5054:23;;:26;;:23;;:26;;;;;;;;;;-1:-1:-1;;;;;5044:36:59;;;-1:-1:-1;;;;;5044:36:59;;;;;;;5100:6;:23;;;5124:1;5100:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5090:36:59;;;-1:-1:-1;;;;;5090:36:59;;;;;;;5146:6;:23;;;5170:1;5146:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5136:36:59;;;-1:-1:-1;;;;;5136:36:59;;;;;;;5206:1;5192:11;:15;:56;;5246:1;5192:56;;;5210:23;;:26;;5234:1;;5210:26;;;;;;;;;;;;5192:56;5182:66;;-1:-1:-1;;;;;;5182:66:59;;;5282:1;5268:15;;:56;;5322:1;5268:56;;;5286:23;;:26;;5310:1;;5286:26;;;;;;;;;;;;5268:56;5258:66;;-1:-1:-1;;;;;;5258:66:59;;;5358:1;5344:15;;:56;;5398:1;5344:56;;;5362:23;;:26;;5386:1;;5362:26;;;;;;;;;;;;5344:56;5334:66;;-1:-1:-1;;;;;;5334:66:59;;;5451:23;;:26;;5429:49;;5451:23;;;:26;;;;;;;;;;5429:21;;;:49;;:::i;:::-;5411:67;;5528:23;;:26;;5506:49;;5528:23;5552:1;;5528:26;;;;;5506:49;5488:67;;5605:23;;:26;;5583:49;;5605:23;5629:1;;5605:26;;;;;5583:49;5565:67;;5674:1;5660:15;;:71;;5730:1;5660:71;;;5678:49;5700:6;:23;;;5724:1;5700:26;;;;;;;5678:49;5642:89;;5773:1;5759:15;;:71;;5829:1;5759:71;;;5777:49;5799:6;:23;;;5823:1;5799:26;;;;;;;5777:49;5741:89;;5872:1;5858:15;;:71;;5928:1;5858:71;;;5876:49;5898:6;:23;;;5922:1;5898:26;;;;;;;5876:49;5840:89;;6412:23;;:30;-1:-1:-1;;6412:34:59;6383:248;6471:1;6460:8;:12;:64;;;;-1:-1:-1;6476:23:59;;:33;;6519:4;;6476:23;6500:8;;6476:33;;;;;;;;;;;;-1:-1:-1;;;;;6476:48:59;;6460:64;6383:248;;;-1:-1:-1;;6538:10:59;6383:248;;;6640:20;;;;7197:23;;:30;7138:36;;-1:-1:-1;;;;;7177:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7177:51:59;-1:-1:-1;7138:90:59;-1:-1:-1;7239:30:59;;;;7503:1726;7527:23;;:30;7523:34;;7503:1726;;;7586:8;7582:1;:12;7578:1641;;;7633:6;:25;;;7659:1;7633:28;;;;;;;;;;;;;;7614:13;7628:1;7614:16;;;;;;;;;;;;;:47;-1:-1:-1;;;;;7614:47:59;;;-1:-1:-1;;;;;7614:47:59;;;;;7761:162;7850:1;-1:-1:-1;;;;;7816:36:59;:13;7830:1;7816:16;;;;;;;;;;;;;;-1:-1:-1;;;;;7816:36:59;;;7904:1;4198;7874:31;7761:22;:33;;;;;;:162;;;;;:::i;:::-;7736:187;;8011:6;:38;;;8050:1;8011:41;;;;;;;;;;;;;;8007:370;;;8076:88;8119:1;-1:-1:-1;;;;;8085:36:59;:13;8099:1;8085:16;;;;;;;;;;;;;;-1:-1:-1;;;;;8085:36:59;;;9022:3:10;8076:8:59;;;:88;;:::i;:::-;8211:42;8245:4;8251:1;8211:22;:33;;;;;;:42;;;;;:::i;:::-;8186:67;;8288:4;8276:16;;8007:370;;;8354:4;8339:19;;8007:370;7578:1641;;;8406:8;8401:1;:13;8397:822;;8453:6;:25;;;8483:1;8479;:5;8453:32;;;;;;;;;;;;;;8434:13;8448:1;8434:16;;;;;;;;;;;;;:51;-1:-1:-1;;;;;8434:51:59;;;-1:-1:-1;;;;;8434:51:59;;;;;8585:162;8674:1;-1:-1:-1;;;;;8640:36:59;:13;8654:1;8640:16;;;;;;;8585:162;8560:187;;8835:6;:38;;;8878:1;8874;:5;8835:45;;;;;;;;;;;;;;8831:374;;;8904:88;8947:1;-1:-1:-1;;;;;8913:36:59;:13;8927:1;8913:16;;;;;;;8904:88;9039:42;9073:4;9079:1;9039:22;:33;;;;;;:42;;;;;:::i;:::-;9014:67;;9116:4;9104:16;;8831:374;;;9182:4;9167:19;;8831:374;7559:3;;7503:1726;;;-1:-1:-1;9257:10:59;;9239:28;;;;;;9296:13;;9277:32;;;;9452:16;;:13;;9466:1;;9452:16;;;;;;;;;;-1:-1:-1;;;;;9435:33:59;;;-1:-1:-1;;;;;9435:33:59;;;;;;;9495:13;9509:1;9495:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9478:33:59;;;-1:-1:-1;;;;;9478:33:59;;;;;;;9538:13;9552:1;9538:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9521:33:59;;;-1:-1:-1;;;;;9521:33:59;;;;;;;9605:1;9582:13;:20;:24;9581:64;;9643:1;9581:64;;;9610:13;9624:1;9610:16;;;;;;;;;;;;;;9581:64;9564:81;;-1:-1:-1;;;;;;9564:81:59;;;9673:20;;9696:1;-1:-1:-1;9672:64:59;;9734:1;9672:64;;;9701:13;9715:1;9701:16;;;;;;;;;;;;;;9672:64;9655:81;;-1:-1:-1;;;;;;9655:81:59;;;9764:20;;9787:1;-1:-1:-1;9763:64:59;;9825:1;9763:64;;;9792:13;9806:1;9792:16;;;;;;;;;;;;;;9763:64;9746:81;;-1:-1:-1;;;;;;9746:81:59;;;-1:-1:-1;;9838:48:59;;-1:-1:-1;;2581:17:58;;:24;2619;;;;;:31;2664:34;;;;:41;2532:183;;-1:-1:-1;2581:24:58;;-1:-1:-1;2619:31:58;2664:41;2532:35;;;;;:183;;:::i;:::-;2775:17;;2726:32;;2761:46;;2801:4;2761:13;:46::i;:::-;2872:23;;2726:81;;-1:-1:-1;;;2872:27:58;2843:234;2924:1;2913:8;:12;:57;;;;;2965:4;-1:-1:-1;;;;;2929:41:58;:16;2946:8;2929:26;;;;;;;;;;;;;;-1:-1:-1;;;;;2929:41:58;;2913:57;2843:234;;;-1:-1:-1;;2984:10:58;2843:234;;;3087:15;3121:9;3116:626;3140:17;;:24;3136:28;;3116:626;;;3194:8;3189:1;:13;3185:63;;;3232:1;3222:11;;3185:63;3303:24;;;;:27;;3274:11;;;;3262:9;;3274:1;;3303:27;;;;;;;;;;;;-1:-1:-1;;;;;3303:47:58;;3299:433;;3370:92;3392:1;3395:10;:24;;;3420:1;3395:27;;;;;;;;;;;;;;3424:10;:34;;;3459:1;3424:37;;;;;;;;;;;;;;3370:21;;;:92;;:::i;:::-;3510:10;:24;;;3535:1;3510:27;;;;;;;;;;;;;;-1:-1:-1;;;;;3486:91:58;3507:1;3486:91;3539:10;:34;;;3574:1;3539:37;;;;;;;;;;;;;;3486:91;;;;;;:::i;:::-;;;;;;;;3700:17;3715:1;3700:14;:17::i;:::-;-1:-1:-1;3166:3:58;;3116:626;;;-1:-1:-1;;;;;;;3418:65:34;;3494:54;;;;;;-1:-1:-1;;;;;;3558:42:34;;;;;;;3611:67;3581:19;4446:1:17;3611:23:34;:67::i;:::-;3688:65;3712:19;4485:1:17;3688:23:34;:65::i;:::-;3768:25;3764:776;;;3809:66;3833:19;4359:1:17;3809:23:34;:66::i;:::-;3764:776;;;3961:69;;-1:-1:-1;;;3961:69:34;;3906:191;;-1:-1:-1;;;;;3961:47:34;;;;;:69;;4359:1:17;;3961:69:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3932:98;;;14240:3:10;3906:8:34;:191::i;:::-;4359:1:17;-1:-1:-1;;;;;;;;;;;4503:25:34;4447:82;;;;;;:::i;:::-;;;;;;;;3764:776;4705:25;:57;;4737:25;4705:57;;;4733:1;4705:57;4671:91;;-1:-1:-1;877:4315:63;;-1:-1:-1;;;;;;;;877:4315:63;1536:425:42;1611:22;1663:6;:13;1679:1;1663:17;-1:-1:-1;;;;;1650:31:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1650:31:42;;1641:40;;1692:6;:13;1709:1;1692:18;1688:81;;;1734:5;1722:6;1729:1;1722:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1722:17:42;;;-1:-1:-1;;;;;1722:17:42;;;;;1749:13;;1688:81;1799:13;;1790:86;1818:1;1814;:5;:30;;;;;1839:5;-1:-1:-1;;;;;1823:21:42;:6;1834:1;1830;:5;1823:13;;;;;;;;;;;;;;-1:-1:-1;;;;;1823:21:42;;1814:30;1790:86;;;1863:6;1874:1;1870;:5;1863:13;;;;;;;;;;;;;;1851:6;1858:1;1851:9;;;;;;;;-1:-1:-1;;;;;1851:25:42;;;:9;;;;;;;;;;;:25;-1:-1:-1;;1846:3:42;1790:86;;;1887:9;1882:53;1906:1;1902;:5;1882:53;;;1926:6;1933:1;1926:9;;;;;;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;-1:-1:-1;;;;;1914:21:42;;;:9;;;;;;;;;;;:21;1909:3;;1882:53;;;;1953:5;1941:6;1948:1;1941:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1941:17:42;;;-1:-1:-1;;;;;1941:17:42;;;;;1536:425;;;;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;10032:224:59:-;10216:33;10032:224;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:47;;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:47;;;6030:3:10;9078:8:28;:89::i;:::-;9190:147;9224:17;4326:3;4561:2;9190:9;;:20;;;;;;:147;;;;;;:::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;27427:510:28:-;27495:7;-1:-1:-1;;;;;27518:31:28;;27544:4;27518:31;27514:83;;;-1:-1:-1;945:4:47;27565:21:28;;27514:83;27687:21;27725:5;-1:-1:-1;;;;;27711:30:28;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27687:56;;;;27818:26;27847:27;27856:2;27860:13;27847:8;;;;;:27;;:::i;:::-;27818:56;;27912:18;27908:2;:22;945:4:47;27891:39:28;27884:46;;;;27427:510;;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7470:13;7486:23;;;:16;:23;;;;;;;;;7427:33;;-1:-1:-1;7546:43:58;;7486:23;;7427:33;;7580:8;;7546:27;;;;;:43;;:::i;:::-;7520:23;;;;:16;:23;;;;;;;:69;;;;7605:34;7537:5;;7605:34;;;;7634:4;;7605:34;:::i;:::-;;;;;;;;7282:364;;;;;:::o;3871:161::-;3929:13;3945:23;;;:16;:23;;;;;;;;;;4004:21;;3945:23;;4004:19;;;;;:21;;:::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;6844:665:34:-;6988:49;;-1:-1:-1;;;6988:49:34;;6965:20;;-1:-1:-1;;;;;6988:40:34;;;;;:49;;7029:7;;6988:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6965:72;-1:-1:-1;7052:31:34;7048:383;;7116:23;:12;:21;;;;;:23;;:::i;:::-;7099:6;:40;;-1:-1:-1;;;;;;7099:40:34;-1:-1:-1;;;;;7099:40:34;;;;;;;;;;7048:383;;;4446:1:17;7160:7:34;:32;7156:275;;;7226:23;:12;:21;;;;;:23;;:::i;:::-;7208:6;:41;;-1:-1:-1;;;;;7208:41:34;;;;;;-1:-1:-1;;;;;;;;7208:41:34;;;;;;;;;7156:275;;;4485:1:17;7270:7:34;:30;7266:165;;;7332:23;:12;:21;;;;;:23;;:::i;:::-;7316:6;:39;;-1:-1:-1;;;;;7316:39:34;;;;-1:-1:-1;;;7316:39:34;-1:-1:-1;;;;;;;;7316:39:34;;;;;;;;;7266:165;;;7386:34;12459:3:10;7386:7:34;:34::i;:::-;7480:7;-1:-1:-1;;;;;;;;;;;7489:12:34;7446:56;;;;;;:::i;:::-;;;;;;;;6844:665;;;:::o;1437:126:10:-;1484:28;1492:9;-1:-1:-1;;;1484:7:10;:28::i;:::-;1437:126;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;;;:51;;:::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;9409:124:28;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2512:395:46:-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;1193:166:49:-;1251:7;1270:37;1279:6;;;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;;;;;:85;;:::i;:::-;:113;;;;;;:180;;;;;;:::i;:292::-;3692:311;3420:590;-1:-1:-1;;;;3420:590:36:o;2499:175::-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;1703:2;1895;2586:5;:16;;;;;;:81;;;;;;:::i;1410:186:53:-;1466:6;1484:75;-1:-1:-1;;;;;1493:25:53;;;12403:3:10;1484:8:53;:75::i;:::-;-1:-1:-1;1583:5:53;1410:186::o;1670:3378:10:-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;7061:607:46;7197:44;7215:3;7206:12;;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;;;;;:27;;:::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;2038:157:36:-;2100:7;2126:62;1646:1;1895:2;2126:5;:16;;;;;;:62;;;;;:::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;2020:1;2012:13;2005:20;1928:104;-1:-1:-1;;;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;877:4315:63:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;877:4315:63;;;-1:-1:-1;877:4315:63;;;;;;;;;;;;;;20:713:-1;;145:3;138:4;130:6;126:17;122:27;112:2;;-1:-1;;153:12;112:2;193:6;187:13;215:77;230:61;284:6;230:61;:::i;:::-;215:77;:::i;:::-;320:21;;;206:86;-1:-1;364:4;377:14;;;;352:17;;;466;;;457:27;;;;454:36;-1:-1;451:2;;;503:1;;493:12;451:2;528:1;;513:214;538:6;535:1;532:13;513:214;;;3197:6;3191:13;15882:5;14062:13;14055:21;15860:5;15857:32;15847:2;;528:1;;15893:12;15847:2;606:58;;678:14;;;;706;;;;560:1;553:9;513:214;;;517:14;;;;;;105:628;;;;:::o;767:767::-;;910:3;903:4;895:6;891:17;887:27;877:2;;-1:-1;;918:12;877:2;958:6;952:13;980:95;995:79;1067:6;995:79;:::i;980:95::-;1103:21;;;971:104;-1:-1;1147:4;1160:14;;;;1135:17;;;1249;;;1240:27;;;;1237:36;-1:-1;1234:2;;;1286:1;;1276:12;1234:2;1311:1;1296:232;1321:6;1318:1;1315:13;1296:232;;;3491:6;3485:13;3503:48;3545:5;3503:48;:::i;:::-;1389:76;;1479:14;;;;1507;;;;1343:1;1336:9;1296:232;;;1300:14;;;;;870:664;;;;:::o;1575:785::-;;1724:3;1717:4;1709:6;1705:17;1701:27;1691:2;;-1:-1;;1732:12;1691:2;1772:6;1766:13;1794:101;1809:85;1887:6;1809:85;:::i;1794:101::-;1923:21;;;1785:110;-1:-1;1967:4;1980:14;;;;1955:17;;;2069;;;2060:27;;;;2057:36;-1:-1;2054:2;;;2106:1;;2096:12;2054:2;2131:1;2116:238;2141:6;2138:1;2135:13;2116:238;;;4092:6;4086:13;4104:54;4152:5;4104:54;:::i;:::-;2209:82;;2305:14;;;;2333;;;;2163:1;2156:9;2116:238;;2386:722;;2514:3;2507:4;2499:6;2495:17;2491:27;2481:2;;-1:-1;;2522:12;2481:2;2562:6;2556:13;2584:80;2599:64;2656:6;2599:64;:::i;2584:80::-;2692:21;;;2575:89;-1:-1;2736:4;2749:14;;;;2724:17;;;2838;;;2829:27;;;;2826:36;-1:-1;2823:2;;;2875:1;;2865:12;2823:2;2900:1;2885:217;2910:6;2907:1;2904:13;2885:217;;;4419:13;;2978:61;;3053:14;;;;3081;;;;2932:1;2925:9;2885:217;;3563:214;3681:13;;3699:73;3681:13;3699:73;:::i;4619:263::-;;4734:2;4722:9;4713:7;4709:23;4705:32;4702:2;;;-1:-1;;4740:12;4702:2;-1:-1;3329:13;;4696:186;-1:-1;4696:186::o;4889:325::-;;5035:2;5023:9;5014:7;5010:23;5006:32;5003:2;;;-1:-1;;5041:12;5003:2;3899:6;3893:13;3911:64;3969:5;3911:64;:::i;5221:1638::-;;;;;;;5609:3;5597:9;5588:7;5584:23;5580:33;5577:2;;;-1:-1;;5616:12;5577:2;5678:79;5749:7;5725:22;5678:79;:::i;:::-;5668:89;;5812:104;5908:7;5794:2;5888:9;5884:22;5812:104;:::i;:::-;5974:2;5959:18;;5953:25;5802:114;;-1:-1;;;;;;5987:30;;;5984:2;;;-1:-1;;6020:12;5984:2;6050:104;6146:7;6137:6;6126:9;6122:22;6050:104;:::i;:::-;6040:114;;6212:2;6201:9;6197:18;6191:25;6177:39;;5998:18;6228:6;6225:30;6222:2;;;-1:-1;;6258:12;6222:2;6288:110;6390:7;6381:6;6370:9;6366:22;6288:110;:::i;:::-;6278:120;;6456:3;6445:9;6441:19;6435:26;6421:40;;5998:18;6473:6;6470:30;6467:2;;;-1:-1;;6503:12;6467:2;6533:89;6614:7;6605:6;6594:9;6590:22;6533:89;:::i;:::-;6523:99;;6680:3;6669:9;6665:19;6659:26;6645:40;;5998:18;6697:6;6694:30;6691:2;;;-1:-1;;6727:12;6691:2;;6757:86;6835:7;6826:6;6815:9;6811:22;6757:86;:::i;:::-;6747:96;;;5571:1288;;;;;;;;:::o;7136:259::-;;7249:2;7237:9;7228:7;7224:23;7220:32;7217:2;;;-1:-1;;7255:12;7217:2;4564:6;4558:13;15216:4;17114:5;15205:16;17091:5;17088:33;17078:2;;-1:-1;;17125:12;10015:770;;10313:2;10302:9;10298:18;9548:5;9525:3;9518:37;10431:2;10313;10431;10420:9;10416:18;10409:48;10471:123;8897:5;13266:12;13842:6;13837:3;13830:19;13870:14;10302:9;13870:14;8909:93;;10431:2;9088:5;12947:14;9100:21;;-1:-1;9127:290;9152:6;9149:1;9146:13;9127:290;;;15327:52;9219:6;9213:13;15327:52;:::i;:::-;9643:65;;13555:14;;;;7768;;;;9174:1;9167:9;9127:290;;;-1:-1;;10632:20;;;10627:2;10612:18;;10605:48;13266:12;;13830:19;;;13870:14;;;;-1:-1;12947:14;;;;-1:-1;8345:260;8370:6;8367:1;8364:13;8345:260;;;13960:24;8437:6;8431:13;13960:24;:::i;:::-;7857:37;;7556:14;;;;13555;;;;9174:1;8385:9;8345:260;;;-1:-1;10659:116;;10284:501;-1:-1;;;;;;;;10284:501::o;10792:264::-;10940:2;10925:18;;15772:1;15762:12;;15752:2;;15778:9;15752:2;9812:71;;;10911:145;:::o;11063:222::-;9518:37;;;11190:2;11175:18;;11161:124::o;11292:256::-;11354:2;11348:9;11380:17;;;-1:-1;;;;;11440:34;;11476:22;;;11437:62;11434:2;;;11512:1;;11502:12;11434:2;11354;11521:22;11332:216;;-1:-1;11332:216::o;11555:301::-;;-1:-1;;;;;11700:30;;11697:2;;;-1:-1;;11733:12;11697:2;-1:-1;11778:4;11766:17;;;11831:15;;11634:222::o;13898:91::-;-1:-1;;;;;15000:54;;13943:46::o;16043:147::-;-1:-1;;;;;15000:54;;16117:50;;16107:2;;16181:1;;16171:12;16101:89;877:4315:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2030": [ + { + "length": 32, + "start": 3812 + } + ], + "2531": [ + { + "length": 32, + "start": 2647 + } + ], + "2533": [ + { + "length": 32, + "start": 4192 + } + ], + "3869": [ + { + "length": 32, + "start": 3776 + } + ], + "4431": [ + { + "length": 32, + "start": 2011 + }, + { + "length": 32, + "start": 2054 + }, + { + "length": 32, + "start": 2097 + } + ], + "4455": [ + { + "length": 32, + "start": 2139 + } + ], + "4457": [ + { + "length": 32, + "start": 3012 + } + ], + "5049": [ + { + "length": 32, + "start": 3658 + } + ], + "6104": [ + { + "length": 32, + "start": 5814 + } + ], + "6106": [ + { + "length": 32, + "start": 5850 + } + ], + "8847": [ + { + "length": 32, + "start": 9888 + } + ], + "8849": [ + { + "length": 32, + "start": 9921 + } + ], + "8851": [ + { + "length": 32, + "start": 9855 + } + ], + "13180": [ + { + "length": 32, + "start": 5891 + } + ], + "13182": [ + { + "length": 32, + "start": 3602 + } + ], + "13184": [ + { + "length": 32, + "start": 6464 + } + ], + "13186": [ + { + "length": 32, + "start": 6530 + } + ], + "13188": [ + { + "length": 32, + "start": 6596 + } + ], + "13190": [ + { + "length": 32, + "start": 6662 + } + ], + "13192": [ + { + "length": 32, + "start": 6728 + } + ], + "13194": [ + { + "length": 32, + "start": 6794 + } + ], + "13208": [ + { + "length": 32, + "start": 5935 + } + ], + "13210": [ + { + "length": 32, + "start": 5983 + } + ], + "13212": [ + { + "length": 32, + "start": 6031 + } + ], + "13214": [ + { + "length": 32, + "start": 6079 + } + ], + "13216": [ + { + "length": 32, + "start": 6127 + } + ], + "13218": [ + { + "length": 32, + "start": 6175 + } + ], + "13220": [ + { + "length": 32, + "start": 9377 + }, + { + "length": 32, + "start": 12624 + } + ], + "13222": [ + { + "length": 32, + "start": 11976 + } + ], + "13224": [ + { + "length": 32, + "start": 12012 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106103625760003560e01c80637f1260d1116101c8578063ab7759f111610104578063d5c096c4116100a2578063ed24911d1161007c578063ed24911d146106d3578063f465d912146106db578063f4b7964d146106ee578063f7ea7a3d1461070157610362565b8063d5c096c4146106a5578063dd62ed3e146106b8578063ddf4627b146106cb57610362565b8063b7b814fc116100de578063b7b814fc1461066f578063c37bb32c14610677578063d2946c2b1461068a578063d505accf1461069257610362565b8063ab7759f114610632578063ac392da614610645578063b35056b81461066757610362565b80638d928af811610171578063a27ff18a1161014b578063a27ff18a146105f1578063a457c2d714610604578063a9059cbb14610617578063aaabadc51461062a57610362565b80638d928af8146105ce57806390193b7c146105d657806395d89b41146105e957610362565b8063851c1bb3116101a2578063851c1bb31461059357806387ec6817146105a6578063893d20e8146105b957610362565b80637f1260d11461056057806382687a56146105835780638456cb591461058b57610362565b806338fff2d0116102a257806355c6762811610240578063704640161161021a578063704640161461050657806370a082311461051957806374f3b0091461052c5780637ecebe001461054d57610362565b806355c67628146104ca5780636028bfd4146104d257806364499362146104f357610362565b80633f4ba83a1161027c5780633f4ba83a1461049457806350dd6ed91461049c57806354a844ba146104af57806354dea00a146104b757610362565b806338fff2d014610463578063395093511461046b5780633c975d511461047e57610362565b80631dd746ea1161030f5780632df2c7c0116102e95780632df2c7c014610420578063313ce567146104335780633644e5151461044857806338e9922e1461045057610362565b80631dd746ea146103e3578063238a2d59146103f857806323b872dd1461040d57610362565b806315b0015b1161034057806315b0015b146103af57806318160ddd146103b75780631c0de051146103cc57610362565b806306fdde0314610367578063095ea7b3146103855780630da0669c146103a5575b600080fd5b61036f610714565b60405161037c9190613b36565b60405180910390f35b610398610393366004613521565b6107aa565b60405161037c9190613a3d565b6103ad6107c1565b005b610398610859565b6103bf61087d565b60405161037c9190613a60565b6103d4610883565b60405161037c93929190613a48565b6103eb6108ac565b60405161037c91906139fc565b6104006108bb565b60405161037c91906139af565b61039861041b366004613471565b610956565b6103ad61042e36600461341d565b6109ca565b61043b610a26565b60405161037c9190613bd8565b6103bf610a2f565b6103ad61045e366004613748565b610a39565b6103bf610a55565b610398610479366004613521565b610a79565b610486610ab4565b60405161037c929190613b99565b6103ad610adf565b6103ad6104aa3660046136fa565b610af1565b6103ad610b0f565b6103bf6104c536600461341d565b610b21565b6103bf610b3c565b6104e56104e03660046135fb565b610b4f565b60405161037c929190613b80565b6103ad610501366004613778565b610b86565b6103bf610514366004613748565b610b9a565b6103bf61052736600461341d565b610c60565b61053f61053a3660046135fb565b610c7b565b60405161037c929190613a0f565b6103bf61055b36600461341d565b610da3565b61057361056e36600461341d565b610dae565b60405161037c9493929190613bbd565b6103bf610e10565b6103ad610e34565b6103bf6105a136600461369e565b610e46565b6104e56105b43660046135fb565b610e98565b6105c1610ebe565b60405161037c919061399b565b6105c1610ee2565b6103bf6105e436600461341d565b610f06565b61036f610f21565b6103bf6105ff36600461358f565b610f82565b610398610612366004613521565b610f9a565b610398610625366004613521565b610fd8565b6105c1610fe5565b61039861064036600461341d565b610fef565b61065861065336600461354c565b611002565b60405161037c93929190613ba7565b61039861101f565b6103ad611030565b6104e561068536600461358f565b611042565b6105c161105e565b6103ad6106a03660046134b1565b611082565b61053f6106b33660046135fb565b61110d565b6103bf6106c6366004613439565b611230565b6103bf61126d565b6103bf611273565b6103ad6106e93660046137d8565b61127d565b6103ad6106fc366004613521565b611287565b6103ad61070f366004613748565b611313565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050905090565b60006107b733848461143f565b5060015b92915050565b6107c9610857565b6107d1610859565b15610801576108017f000000000000000000000000000000000000000000000000000000000000000060006114a7565b61082c7f000000000000000000000000000000000000000000000000000000000000000060026114a7565b6108577f000000000000000000000000000000000000000000000000000000000000000060036114a7565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b6000806000610890611697565b15925061089b6116b4565b91506108a56116d8565b9050909192565b60606108b66116fc565b905090565b606060006108c7611701565b905060608167ffffffffffffffff811180156108e257600080fd5b5060405190808252806020026020018201604052801561090c578160200160208202803683370190505b50905060005b8281101561094f5761092381611725565b82828151811061092f57fe5b6001600160a01b0390921660209283029190910190910152600101610912565b5091505090565b6000806109638533611230565b9050610987336001600160a01b038716148061097f5750838210155b61019e61184e565b61099285858561185c565b336001600160a01b038616148015906109ad57506000198114155b156109bf576109bf853385840361143f565b506001949350505050565b60006109d58261193c565b905060006109e282611725565b90506109fb6001600160a01b038216151561015561184e565b600082815260096020526040812054610a1390611aca565b9050610a20838383611ad9565b50505050565b60055460ff1690565b60006108b6611273565b610a41611bbc565b610a49611c02565b610a5281611c15565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107b7918590610aaf9086611c8e565b61143f565b600b546000908190610ac98160e96017611430565b9250610ad881600060e9611430565b9150509091565b610ae7611bbc565b6108576000611ca0565b610af9611bbc565b610b01611c02565b610b0b8282611d31565b5050565b610b17611bbc565b6108576001611e3f565b6000610b34610b2f8361193c565b611e96565b90505b919050565b6008546000906108b69060c0603f611430565b60006060610b658651610b60611701565b611ee9565b610b7a89898989898989611ef6611f35611f9e565b97509795505050505050565b610b938585858585612153565b5050505050565b6000610ba461101f565b15610bb157506000610b37565b81610bfd57610bbe610859565b610be8577f0000000000000000000000000000000000000000000000000000000000000000610bf6565b600a5467ffffffffffffffff165b9050610b37565b6002821415610c255750600a5468010000000000000000900467ffffffffffffffff16610b37565b6003821415610c555750600a54700100000000000000000000000000000000900467ffffffffffffffff16610b37565b610b376101bb6121d3565b6001600160a01b031660009081526020819052604090205490565b60608088610ca5610c8a610ee2565b6001600160a01b0316336001600160a01b03161460cd61184e565b610cba610cb0610a55565b82146101f461184e565b60606000610cc7866121fd565b15610cef57610cd461222c565b610ce689610ce061087d565b8861223f565b92509050610d41565b610cf761226b565b6060610d016116fc565b9050610d0d8a82612273565b610d318d8d8d8d8d610d1d61101f565b610d27578d610d2a565b60005b878e611ef6565b93509150610d3f8382611f35565b505b610d4b8b826122dc565b81895167ffffffffffffffff81118015610d6457600080fd5b50604051908082528060200260200182016040528015610d8e578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610b3482610f06565b600080600080600060096000610dc38861193c565b81526020810191909152604001600020549050610de481151561015561184e565b610ded816122e6565b9450610df8816122f4565b9350610e0381612302565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b610e3c611bbc565b6108576001611ca0565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610e7b929190613925565b604051602081830303815290604052805190602001209050919050565b60006060610ea98651610b60611701565b610b7a89898989898989611ef6612324611f9e565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107a05780601f10610775576101008083540402835291602001916107a0565b600080610f9085858561238d565b5095945050505050565b600080610fa73385611230565b9050808310610fc157610fbc3385600061143f565b610fce565b610fce338585840361143f565b5060019392505050565b60006107b733848461185c565b60006108b6612420565b6000610b34610ffd8361193c565b61249a565b600080600061101185856124c6565b9250925092505b9250925092565b6008546000906108b69060ff612547565b611038611bbc565b6108576000611e3f565b60006060611051858585612551565b5090969095509350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886110b18c610f06565b896040516020016110c796959493929190613a88565b6040516020818303038152906040528051906020012090506110f888826110ef8787876125a9565b886101f86125e8565b61110388888861143f565b5050505050505050565b6060808861111c610c8a610ee2565b611127610cb0610a55565b61112f61226b565b60606111396116fc565b905061114361087d565b6111f057600060606111588d8d8d868b611ef6565b9150915061117161116761263f565b83101560cc61184e565b611183600061117e61263f565b612646565b6111968b61118f61263f565b8403612646565b6111a08184612324565b808a5167ffffffffffffffff811180156111b957600080fd5b506040519080825280602002602001820160405280156111e3578160200160208202803683370190505b5095509550505050610d96565b6111fa8882612273565b600060606112228d8d8d8d8d61120e61101f565b611218578d61121b565b60005b898e611ef6565b915091506111968b83612646565b600061123a610ee2565b6001600160a01b0316826001600160a01b0316141561125c57506000196107bb565b6112668383612650565b90506107bb565b60001981565b60006108b661267b565b610b0b8282612718565b61128f611bbc565b600061129a8361193c565b905060006112a782611725565b90506112c06001600160a01b038216151561015561184e565b6112cb828285611ad9565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516113059190613a60565b60405180910390a350505050565b610a528161273e565b80610b0b81612743565b61133e828414801561133757508183145b606761184e565b505050565b60006001821b198416828461135957600061135c565b60015b60ff16901b17949350505050565b60006113778484846127bc565b506001901b60001901811b1992909216911b1790565b600061139d83831115600161184e565b50900390565b60006113b6606084901c1561014961184e565b6113db42830160e060206113d38660c083838c8c6000606061136a565b92919061136a565b949350505050565b6000610b346113f1836122e6565b839060608061136a565b600061141467ffffffffffffffff8311156101ba61184e565b5090565b60008183106114275781611429565b825b9392505050565b6001901b6000190191901c1690565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061149a908590613a60565b60405180910390a3505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c3263906114ef908590600401613a60565b60206040518083038186803b15801561150757600080fd5b505afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f9190613760565b90508161158d5761154f816113fb565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff9290921691909117905561165a565b60028214156115ea5761159f816113fb565b600a805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff90921691909117905561165a565b600382141561164f576115fc816113fb565b600a805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff90921691909117905561165a565b61165a6101bb6121d3565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a8260405161168a9190613a60565b60405180910390a2505050565b60006116a16116d8565b4211806108b657505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008161175357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b816001141561178357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b81600214156117b357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b81600314156117e357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b816004141561181357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b816005141561184357507f0000000000000000000000000000000000000000000000000000000000000000610b37565b610b376101356121d3565b81610b0b57610b0b816121d3565b6118736001600160a01b038416151561019861184e565b61188a6001600160a01b038316151561019961184e565b61189583838361133e565b6001600160a01b0383166000908152602081905260409020546118bb90826101a0612803565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546118ea9082611c8e565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061149a908590613a60565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561198057506000610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156119c257506001610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a0457506002610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a4657506003610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611a8857506004610b37565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561184357506005610b37565b6000610b348260c06020611430565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b1457600080fd5b505afa158015611b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4c9190613760565b600085815260096020526040902054909150611b698183856113a3565b60008681526009602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611bad908590613a60565b60405180910390a25050505050565b6000611beb6000357fffffffff0000000000000000000000000000000000000000000000000000000016610e46565b9050610a52611bfa8233612819565b61019161184e565b610857611c0d611697565b61019261184e565b611c2a611c20612902565b82101560cb61184e565b611c3f611c3561290b565b82111560ca61184e565b600854611c50908260c0603f61136a565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90611c83908390613a60565b60405180910390a150565b6000828201611429848210158361184e565b8015611cc057611cbb611cb16116b4565b421061019361184e565b611cd5565b611cd5611ccb6116d8565b42106101a961184e565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490611c83908390613a3d565b6000611d3b610a55565b90506000611d47610ee2565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401611d74929190613b01565b60806040518083038186803b158015611d8c57600080fd5b505afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc491906137f9565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250611e11915085908790600401613ae8565b600060405180830381600087803b158015611e2b57600080fd5b505af1158015611103573d6000803e3d6000fd5b600854611e4e908260ff611343565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c890611e81908390613a3d565b60405180910390a180610a5257610a52610857565b6000611ea0610e10565b821415611eb65750670de0b6b3a7640000610b37565b6000828152600960205260409020548015611ed957611ed4816122e6565b611429565b670de0b6b3a76400009392505050565b610b0b818314606761184e565b600060606040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613b49565b60405180910390fd5b81518151611f44908290611ee9565b60005b81811015610a2057611f7f848281518110611f5e57fe5b6020026020010151848381518110611f7257fe5b6020026020010151612917565b848281518110611f8b57fe5b6020908102919091010152600101611f47565b33301461208d576000306001600160a01b0316600036604051611fc2929190613955565b6000604051808303816000865af19150503d8060008114611fff576040519150601f19603f3d011682016040523d82523d6000602084013e612004565b606091505b50509050806000811461201357fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb00000000000000000000000000000000000000000000000000000000811461206f573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61209561226b565b606061209f6116fc565b90506120ab8782612273565b600060606120c38c8c8c8c8c8c898d8d63ffffffff16565b915091506120d581848663ffffffff16565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b600061215f8686612968565b9050600061216d8385612917565b9050600061217b8683612aca565b9050808311156121c95780830360006121a561219f8361219a84610b9a565b612b00565b86612b1a565b905080156121c65760006121b98783612b3a565b90506121c481612b52565b505b50505b6111038884612718565b610a52817f42414c0000000000000000000000000000000000000000000000000000000000612b63565b6000808251118015610b34575060ff8016828060200190518101906122229190613839565b60ff161492915050565b61085761223761101f565b6101b661184e565b60006060600061224e84612bde565b9050606061225d878784612bf4565b919791965090945050505050565b610857611c02565b81518151612282908290611ee9565b60005b81811015610a20576122bd84828151811061229c57fe5b60200260200101518483815181106122b057fe5b6020026020010151612aca565b8482815181106122c957fe5b6020908102919091010152600101612285565b610b0b8282612ca3565b6000610b3482826060611430565b6000610b3482606080611430565b60008061230e83611aca565b915061231d8360e06020611430565b9050915091565b81518151612333908290611ee9565b60005b81811015610a205761236e84828151811061234d57fe5b602002602001015184838151811061236157fe5b6020026020010151612d6f565b84828151811061237a57fe5b6020908102919091010152600101612336565b600080600080600061239f88886124c6565b92509250925060008684116123b55760006123b9565b8684035b905060008484116123cb5760006123cf565b8484035b905060006123f06123e06000610b9a565b6123ea8587612917565b90612aca565b9050600061240b6124016002610b9a565b6123ea8588612917565b919091019b939a509298505050505050505050565b600061242a610ee2565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561246257600080fd5b505afa158015612476573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b691906136de565b6000610b347f000000000000000000000000000000000000000000000000000000000000000083612547565b60008060006124df846124da876001612dbd565b612968565b92506124e9612ec6565b15612502576124f88486612968565b9150819050611018565b61250a612eea565b156125235782915061251c8486612968565b9050611018565b612532846124da876000612dbd565b915061253e8486612968565b90509250925092565b1c60019081161490565b60006060600080606061256388612f0e565b91509150600080612575838a8a61238d565b9150915060006125858584612b3a565b905080156125965761259681612b52565b9390930199919850919650945050505050565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b60006125f385612f47565b9050612609612603878387612f63565b8361184e565b612618428410156101b861184e565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b620f424090565b610b0b8282613030565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006126e86130bd565b306040516020016126fd959493929190613abc565b60405160208183030381529060405280519060200120905090565b61272581600060e96130c1565b6127328360e960176130c1565b17600b55610b0b6130d4565b600255565b60028151101561275257610a52565b60008160008151811061276157fe5b602002602001015190506000600190505b825181101561133e57600083828151811061278957fe5b602002602001015190506127b2816001600160a01b0316846001600160a01b031610606561184e565b9150600101612772565b6127cb6101008310606461184e565b6127f4600182101580156127ed57506127e960ff8461010003611418565b8211155b606461184e565b61133e83821c156101b461184e565b6000612812848411158361184e565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612838610ebe565b6001600160a01b03161415801561285357506128538361310a565b1561287b57612860610ebe565b6001600160a01b0316336001600160a01b03161490506107bb565b612883612420565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016128b293929190613a69565b60206040518083038186803b1580156128ca57600080fd5b505afa1580156128de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126691906135db565b64e8d4a5100090565b67016345785d8a000090565b6000612926821515600461184e565b82612933575060006107bb565b670de0b6b3a7640000838102906129569085838161294d57fe5b0414600561184e565b82818161295f57fe5b049150506107bb565b80516000908190815b818110156129a95761299f85828151811061298857fe5b602002602001015184611c8e90919063ffffffff16565b9250600101612971565b50816129ba576000925050506107bb565b600082868302825b60ff811015612ab3578260005b86811015612a1057612a066129e48387612b00565b612a018c84815181106129f357fe5b60200260200101518a612b00565b612b1a565b91506001016129cf565b50839450612a69612a48612a42612a27848a612b00565b612a3c612a34888d612b00565b6103e8612b1a565b90611c8e565b86612b00565b612a01612a588960010185612b00565b612a3c612a346103e889038a612b00565b935084841115612a9157600185850311612a8c57839750505050505050506107bb565b612aaa565b600184860311612aaa57839750505050505050506107bb565b506001016129c2565b50612abf6101416121d3565b505050505092915050565b6000828202612aee841580612ae7575083858381612ae457fe5b04145b600361184e565b670de0b6b3a764000090049392505050565b6000828202611429841580612ae7575083858381612ae457fe5b6000612b29821515600461184e565b818381612b3257fe5b049392505050565b6000611429612b498484612b00565b612a0184613115565b610a52612b5d61105e565b82612646565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000818060200190518101906114299190613855565b60606000612c028385612917565b9050845167ffffffffffffffff81118015612c1c57600080fd5b50604051908082528060200260200182016040528015612c46578160200160208202803683370190505b50915060005b8551811015612c9a57612c7b82878381518110612c6557fe5b6020026020010151612aca90919063ffffffff16565b838281518110612c8757fe5b6020908102919091010152600101612c4c565b50509392505050565b612cba6001600160a01b038316151561019b61184e565b612cc68260008361133e565b6001600160a01b038216600090815260208190526040902054612cec90826101b2612803565b6001600160a01b038316600090815260208190526040902055612d1f612d1a82612d1461087d565b9061313b565b61273e565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d639190613a60565b60405180910390a35050565b6000612d7e821515600461184e565b82612d8b575060006107bb565b670de0b6b3a764000083810290612da59085838161294d57fe5b826001820381612db157fe5b046001019150506107bb565b8151606090818167ffffffffffffffff81118015612dda57600080fd5b50604051908082528060200260200182016040528015612e04578160200160208202803683370190505b50905060005b82811015612ebd576000612e1c610e10565b821015612e295781612e2e565b816001015b9050612e398161249a565b80612e505750858015612e505750612e5081613149565b612e6d57868281518110612e6057fe5b6020026020010151612e9d565b612e9d878381518110612e7c57fe5b60200260200101516009600084815260200190815260200160002054613178565b838381518110612ea957fe5b602090810291909101015250600101612e0a565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006060612f3583612f1e610e10565b81518110612f2857fe5b6020026020010151613193565b612f3e846131a7565b91509150915091565b6000612f5161267b565b82604051602001610e7b929190613965565b6000612f7582516041146101b961184e565b60208281015160408085015160608601518251600080825295019283905292939092811a91600190612fae908990859088908890613b18565b6020604051602081039080840390855afa158015612fd0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116158015906130245750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b61303c6000838361133e565b61304b612d1a82612a3c61087d565b6001600160a01b03821660009081526020819052604090205461306e9082611c8e565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612d63908590613a60565b4690565b60006130ce8484846127bc565b50501b90565b60006130de611701565b905060005b81811015610b0b576130f481613149565b156131025761310281613250565b6001016130e3565b6000610b348261327e565b6000670de0b6b3a7640000821061312d576000610b34565b50670de0b6b3a76400000390565b600061142983836001612803565b6000610b347f000000000000000000000000000000000000000000000000000000000000000060068401612547565b600061142961318a8461219a856122f4565b612a01846122e6565b6000610b34826131a161087d565b9061138d565b606080600183510367ffffffffffffffff811180156131c557600080fd5b506040519080825280602002602001820160405280156131ef578160200160208202803683370190505b50905060005b81518110156132495783613207610e10565b82106132165781600101613218565b815b8151811061322257fe5b602002602001015182828151811061323657fe5b60209081029190910101526001016131f5565b5092915050565b600081815260096020526040902054613268816113e3565b6000928352600960205260409092209190915550565b60006132a97ff4b7964d00000000000000000000000000000000000000000000000000000000610e46565b821480610b345750610b348260006132e07f38e9922e00000000000000000000000000000000000000000000000000000000610e46565b82148061331457506133117f50dd6ed900000000000000000000000000000000000000000000000000000000610e46565b82145b80610b3457506000610b34565b600082601f830112613331578081fd5b813567ffffffffffffffff811115613347578182fd5b6020808202613357828201613be6565b8381529350818401858301828701840188101561337357600080fd5b600092505b84831015612abf578035825260019290920191908301908301613378565b600082601f8301126133a6578081fd5b813567ffffffffffffffff8111156133bc578182fd5b6133ed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613be6565b915080825283602082850101111561340457600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561342e578081fd5b813561142981613c0d565b6000806040838503121561344b578081fd5b823561345681613c0d565b9150602083013561346681613c0d565b809150509250929050565b600080600060608486031215613485578081fd5b833561349081613c0d565b925060208401356134a081613c0d565b929592945050506040919091013590565b600080600080600080600060e0888a0312156134cb578283fd5b87356134d681613c0d565b965060208801356134e681613c0d565b95506040880135945060608801359350608088013561350481613c22565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613533578182fd5b823561353e81613c0d565b946020939093013593505050565b6000806040838503121561355e578182fd5b823567ffffffffffffffff811115613574578283fd5b61358085828601613321565b95602094909401359450505050565b6000806000606084860312156135a3578283fd5b833567ffffffffffffffff8111156135b9578384fd5b6135c586828701613321565b9660208601359650604090950135949350505050565b6000602082840312156135ec578081fd5b81518015158114611429578182fd5b600080600080600080600060e0888a031215613615578283fd5b87359650602088013561362781613c0d565b9550604088013561363781613c0d565b9450606088013567ffffffffffffffff80821115613653578485fd5b61365f8b838c01613321565b955060808a0135945060a08a0135935060c08a0135915080821115613682578283fd5b5061368f8a828b01613396565b91505092959891949750929550565b6000602082840312156136af578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611429578182fd5b6000602082840312156136ef578081fd5b815161142981613c0d565b6000806040838503121561370c578182fd5b823561371781613c0d565b9150602083013567ffffffffffffffff811115613732578182fd5b61373e85828601613396565b9150509250929050565b600060208284031215613759578081fd5b5035919050565b600060208284031215613771578081fd5b5051919050565b600080600080600060a0868803121561378f578283fd5b85359450602086013567ffffffffffffffff8111156137ac578384fd5b6137b888828901613321565b959895975050505060408401359360608101359360809091013592509050565b600080604083850312156137ea578182fd5b50508035926020909101359150565b6000806000806080858703121561380e578182fd5b845193506020850151925060408501519150606085015161382e81613c0d565b939692955090935050565b60006020828403121561384a578081fd5b815161142981613c22565b60008060408385031215613867578182fd5b825161387281613c22565b6020939093015192949293505050565b6000815180845260208085019450808401835b838110156138b157815187529582019590820190600101613895565b509495945050505050565b60008151808452815b818110156138e1576020818501810151868301820152016138c5565b818111156138f25782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156139f05783516001600160a01b0316835292840192918401916001016139cb565b50909695505050505050565b6000602082526114296020830184613882565b600060408252613a226040830185613882565b8281036020840152613a348185613882565b95945050505050565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526113db60408301846138bc565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261142960208301846138bc565b6020808252600f908201527f4e4f545f494d504c454d454e5445440000000000000000000000000000000000604082015260600190565b6000838252604060208301526113db6040830184613882565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715613c0557600080fd5b604052919050565b6001600160a01b0381168114610a5257600080fd5b60ff81168114610a5257600080fdfea26469706673582212204a830479d41da3261efb4ecabd8812dcac007da4e7d8761aea157b897329a0d864736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x362 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7F1260D1 GT PUSH2 0x1C8 JUMPI DUP1 PUSH4 0xAB7759F1 GT PUSH2 0x104 JUMPI DUP1 PUSH4 0xD5C096C4 GT PUSH2 0xA2 JUMPI DUP1 PUSH4 0xED24911D GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6D3 JUMPI DUP1 PUSH4 0xF465D912 EQ PUSH2 0x6DB JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0x6EE JUMPI DUP1 PUSH4 0xF7EA7A3D EQ PUSH2 0x701 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6A5 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0xDDF4627B EQ PUSH2 0x6CB JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0xB7B814FC GT PUSH2 0xDE JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x66F JUMPI DUP1 PUSH4 0xC37BB32C EQ PUSH2 0x677 JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x692 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x632 JUMPI DUP1 PUSH4 0xAC392DA6 EQ PUSH2 0x645 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x667 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 GT PUSH2 0x171 JUMPI DUP1 PUSH4 0xA27FF18A GT PUSH2 0x14B JUMPI DUP1 PUSH4 0xA27FF18A EQ PUSH2 0x5F1 JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x604 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x62A JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x5CE JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5E9 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x1A2 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x593 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x5B9 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0x560 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0x583 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x58B JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x38FFF2D0 GT PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x55C67628 GT PUSH2 0x240 JUMPI DUP1 PUSH4 0x70464016 GT PUSH2 0x21A JUMPI DUP1 PUSH4 0x70464016 EQ PUSH2 0x506 JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x519 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x52C JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x54D JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x55C67628 EQ PUSH2 0x4CA JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x64499362 EQ PUSH2 0x4F3 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0x27C JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x49C JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x4AF JUMPI DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x4B7 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x463 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x46B JUMPI DUP1 PUSH4 0x3C975D51 EQ PUSH2 0x47E JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA GT PUSH2 0x30F JUMPI DUP1 PUSH4 0x2DF2C7C0 GT PUSH2 0x2E9 JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x420 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x433 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x448 JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x450 JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x3E3 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x3F8 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x40D JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x15B0015B GT PUSH2 0x340 JUMPI DUP1 PUSH4 0x15B0015B EQ PUSH2 0x3AF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3B7 JUMPI DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x3CC JUMPI PUSH2 0x362 JUMP JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x367 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x385 JUMPI DUP1 PUSH4 0xDA0669C EQ PUSH2 0x3A5 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x36F PUSH2 0x714 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3B36 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x398 PUSH2 0x393 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0x7AA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3A3D JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x7C1 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x398 PUSH2 0x859 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x87D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH2 0x3D4 PUSH2 0x883 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3A48 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x8AC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x39FC JUMP JUMPDEST PUSH2 0x400 PUSH2 0x8BB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x39AF JUMP JUMPDEST PUSH2 0x398 PUSH2 0x41B CALLDATASIZE PUSH1 0x4 PUSH2 0x3471 JUMP JUMPDEST PUSH2 0x956 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x42E CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0x9CA JUMP JUMPDEST PUSH2 0x43B PUSH2 0xA26 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x3BD8 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xA2F JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x45E CALLDATASIZE PUSH1 0x4 PUSH2 0x3748 JUMP JUMPDEST PUSH2 0xA39 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x479 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0xA79 JUMP JUMPDEST PUSH2 0x486 PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP3 SWAP2 SWAP1 PUSH2 0x3B99 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0xADF JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x4AA CALLDATASIZE PUSH1 0x4 PUSH2 0x36FA JUMP JUMPDEST PUSH2 0xAF1 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0xB0F JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x4C5 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xB21 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xB3C JUMP JUMPDEST PUSH2 0x4E5 PUSH2 0x4E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0xB4F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP3 SWAP2 SWAP1 PUSH2 0x3B80 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x501 CALLDATASIZE PUSH1 0x4 PUSH2 0x3778 JUMP JUMPDEST PUSH2 0xB86 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x514 CALLDATASIZE PUSH1 0x4 PUSH2 0x3748 JUMP JUMPDEST PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x527 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xC60 JUMP JUMPDEST PUSH2 0x53F PUSH2 0x53A CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0xC7B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP3 SWAP2 SWAP1 PUSH2 0x3A0F JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x55B CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xDA3 JUMP JUMPDEST PUSH2 0x573 PUSH2 0x56E CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xDAE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3BBD JUMP JUMPDEST PUSH2 0x3BF PUSH2 0xE10 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0xE34 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x5A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x369E JUMP JUMPDEST PUSH2 0xE46 JUMP JUMPDEST PUSH2 0x4E5 PUSH2 0x5B4 CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0xE98 JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP2 SWAP1 PUSH2 0x399B JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0xEE2 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x5E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xF06 JUMP JUMPDEST PUSH2 0x36F PUSH2 0xF21 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x5FF CALLDATASIZE PUSH1 0x4 PUSH2 0x358F JUMP JUMPDEST PUSH2 0xF82 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x612 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0xF9A JUMP JUMPDEST PUSH2 0x398 PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0xFD8 JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0xFE5 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x640 CALLDATASIZE PUSH1 0x4 PUSH2 0x341D JUMP JUMPDEST PUSH2 0xFEF JUMP JUMPDEST PUSH2 0x658 PUSH2 0x653 CALLDATASIZE PUSH1 0x4 PUSH2 0x354C JUMP JUMPDEST PUSH2 0x1002 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x37C SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3BA7 JUMP JUMPDEST PUSH2 0x398 PUSH2 0x101F JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x1030 JUMP JUMPDEST PUSH2 0x4E5 PUSH2 0x685 CALLDATASIZE PUSH1 0x4 PUSH2 0x358F JUMP JUMPDEST PUSH2 0x1042 JUMP JUMPDEST PUSH2 0x5C1 PUSH2 0x105E JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x6A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x34B1 JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0x53F PUSH2 0x6B3 CALLDATASIZE PUSH1 0x4 PUSH2 0x35FB JUMP JUMPDEST PUSH2 0x110D JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x6C6 CALLDATASIZE PUSH1 0x4 PUSH2 0x3439 JUMP JUMPDEST PUSH2 0x1230 JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x126D JUMP JUMPDEST PUSH2 0x3BF PUSH2 0x1273 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x6E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x37D8 JUMP JUMPDEST PUSH2 0x127D JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x6FC CALLDATASIZE PUSH1 0x4 PUSH2 0x3521 JUMP JUMPDEST PUSH2 0x1287 JUMP JUMPDEST PUSH2 0x3AD PUSH2 0x70F CALLDATASIZE PUSH1 0x4 PUSH2 0x3748 JUMP JUMPDEST PUSH2 0x1313 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7A0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x775 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7A0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x783 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7B7 CALLER DUP5 DUP5 PUSH2 0x143F JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x7C9 PUSH2 0x857 JUMP JUMPDEST PUSH2 0x7D1 PUSH2 0x859 JUMP JUMPDEST ISZERO PUSH2 0x801 JUMPI PUSH2 0x801 PUSH32 0x0 PUSH1 0x0 PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x82C PUSH32 0x0 PUSH1 0x2 PUSH2 0x14A7 JUMP JUMPDEST PUSH2 0x857 PUSH32 0x0 PUSH1 0x3 PUSH2 0x14A7 JUMP JUMPDEST JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x890 PUSH2 0x1697 JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x89B PUSH2 0x16B4 JUMP JUMPDEST SWAP2 POP PUSH2 0x8A5 PUSH2 0x16D8 JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x8B6 PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x8C7 PUSH2 0x1701 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x90C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x94F JUMPI PUSH2 0x923 DUP2 PUSH2 0x1725 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x92F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x912 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x963 DUP6 CALLER PUSH2 0x1230 JUMP JUMPDEST SWAP1 POP PUSH2 0x987 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0x97F JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x184E JUMP JUMPDEST PUSH2 0x992 DUP6 DUP6 DUP6 PUSH2 0x185C JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x9AD JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x9BF JUMPI PUSH2 0x9BF DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x143F JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x9D5 DUP3 PUSH2 0x193C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9E2 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP PUSH2 0x9FB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0xA13 SWAP1 PUSH2 0x1ACA JUMP JUMPDEST SWAP1 POP PUSH2 0xA20 DUP4 DUP4 DUP4 PUSH2 0x1AD9 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B6 PUSH2 0x1273 JUMP JUMPDEST PUSH2 0xA41 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0xA49 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0xA52 DUP2 PUSH2 0x1C15 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x7B7 SWAP2 DUP6 SWAP1 PUSH2 0xAAF SWAP1 DUP7 PUSH2 0x1C8E JUMP JUMPDEST PUSH2 0x143F JUMP JUMPDEST PUSH1 0xB SLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH2 0xAC9 DUP2 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x1430 JUMP JUMPDEST SWAP3 POP PUSH2 0xAD8 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x1430 JUMP JUMPDEST SWAP2 POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH2 0xAE7 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x0 PUSH2 0x1CA0 JUMP JUMPDEST PUSH2 0xAF9 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0xB01 PUSH2 0x1C02 JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x1D31 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xB17 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x1 PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH2 0xB2F DUP4 PUSH2 0x193C JUMP JUMPDEST PUSH2 0x1E96 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x8B6 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xB65 DUP7 MLOAD PUSH2 0xB60 PUSH2 0x1701 JUMP JUMPDEST PUSH2 0x1EE9 JUMP JUMPDEST PUSH2 0xB7A DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1EF6 PUSH2 0x1F35 PUSH2 0x1F9E JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xB93 DUP6 DUP6 DUP6 DUP6 DUP6 PUSH2 0x2153 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xBA4 PUSH2 0x101F JUMP JUMPDEST ISZERO PUSH2 0xBB1 JUMPI POP PUSH1 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH2 0xBFD JUMPI PUSH2 0xBBE PUSH2 0x859 JUMP JUMPDEST PUSH2 0xBE8 JUMPI PUSH32 0x0 PUSH2 0xBF6 JUMP JUMPDEST PUSH1 0xA SLOAD PUSH8 0xFFFFFFFFFFFFFFFF AND JUMPDEST SWAP1 POP PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0xC25 JUMPI POP PUSH1 0xA SLOAD PUSH9 0x10000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0xC55 JUMPI POP PUSH1 0xA SLOAD PUSH17 0x100000000000000000000000000000000 SWAP1 DIV PUSH8 0xFFFFFFFFFFFFFFFF AND PUSH2 0xB37 JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x1BB PUSH2 0x21D3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xCA5 PUSH2 0xC8A PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x184E JUMP JUMPDEST PUSH2 0xCBA PUSH2 0xCB0 PUSH2 0xA55 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xCC7 DUP7 PUSH2 0x21FD JUMP JUMPDEST ISZERO PUSH2 0xCEF JUMPI PUSH2 0xCD4 PUSH2 0x222C JUMP JUMPDEST PUSH2 0xCE6 DUP10 PUSH2 0xCE0 PUSH2 0x87D JUMP JUMPDEST DUP9 PUSH2 0x223F JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xD41 JUMP JUMPDEST PUSH2 0xCF7 PUSH2 0x226B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xD01 PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP PUSH2 0xD0D DUP11 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH2 0xD31 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xD1D PUSH2 0x101F JUMP JUMPDEST PUSH2 0xD27 JUMPI DUP14 PUSH2 0xD2A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x1EF6 JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xD3F DUP4 DUP3 PUSH2 0x1F35 JUMP JUMPDEST POP JUMPDEST PUSH2 0xD4B DUP12 DUP3 PUSH2 0x22DC JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xD64 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD8E JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH2 0xF06 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x9 PUSH1 0x0 PUSH2 0xDC3 DUP9 PUSH2 0x193C JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0xDE4 DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x184E JUMP JUMPDEST PUSH2 0xDED DUP2 PUSH2 0x22E6 JUMP JUMPDEST SWAP5 POP PUSH2 0xDF8 DUP2 PUSH2 0x22F4 JUMP JUMPDEST SWAP4 POP PUSH2 0xE03 DUP2 PUSH2 0x2302 JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0xE3C PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x1 PUSH2 0x1CA0 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE7B SWAP3 SWAP2 SWAP1 PUSH2 0x3925 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xEA9 DUP7 MLOAD PUSH2 0xB60 PUSH2 0x1701 JUMP JUMPDEST PUSH2 0xB7A DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x1EF6 PUSH2 0x2324 PUSH2 0x1F9E JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7A0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x775 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7A0 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xF90 DUP6 DUP6 DUP6 PUSH2 0x238D JUMP JUMPDEST POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xFA7 CALLER DUP6 PUSH2 0x1230 JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0xFC1 JUMPI PUSH2 0xFBC CALLER DUP6 PUSH1 0x0 PUSH2 0x143F JUMP JUMPDEST PUSH2 0xFCE JUMP JUMPDEST PUSH2 0xFCE CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x143F JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7B7 CALLER DUP5 DUP5 PUSH2 0x185C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B6 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH2 0xFFD DUP4 PUSH2 0x193C JUMP JUMPDEST PUSH2 0x249A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1011 DUP6 DUP6 PUSH2 0x24C6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x8B6 SWAP1 PUSH1 0xFF PUSH2 0x2547 JUMP JUMPDEST PUSH2 0x1038 PUSH2 0x1BBC JUMP JUMPDEST PUSH2 0x857 PUSH1 0x0 PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1051 DUP6 DUP6 DUP6 PUSH2 0x2551 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x10B1 DUP13 PUSH2 0xF06 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x10C7 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3A88 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x10F8 DUP9 DUP3 PUSH2 0x10EF DUP8 DUP8 DUP8 PUSH2 0x25A9 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x25E8 JUMP JUMPDEST PUSH2 0x1103 DUP9 DUP9 DUP9 PUSH2 0x143F JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x111C PUSH2 0xC8A PUSH2 0xEE2 JUMP JUMPDEST PUSH2 0x1127 PUSH2 0xCB0 PUSH2 0xA55 JUMP JUMPDEST PUSH2 0x112F PUSH2 0x226B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1139 PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP PUSH2 0x1143 PUSH2 0x87D JUMP JUMPDEST PUSH2 0x11F0 JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1158 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x1EF6 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1171 PUSH2 0x1167 PUSH2 0x263F JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1183 PUSH1 0x0 PUSH2 0x117E PUSH2 0x263F JUMP JUMPDEST PUSH2 0x2646 JUMP JUMPDEST PUSH2 0x1196 DUP12 PUSH2 0x118F PUSH2 0x263F JUMP JUMPDEST DUP5 SUB PUSH2 0x2646 JUMP JUMPDEST PUSH2 0x11A0 DUP2 DUP5 PUSH2 0x2324 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x11B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x11E3 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xD96 JUMP JUMPDEST PUSH2 0x11FA DUP9 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1222 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x120E PUSH2 0x101F JUMP JUMPDEST PUSH2 0x1218 JUMPI DUP14 PUSH2 0x121B JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x1EF6 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1196 DUP12 DUP4 PUSH2 0x2646 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x123A PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x125C JUMPI POP PUSH1 0x0 NOT PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x1266 DUP4 DUP4 PUSH2 0x2650 JUMP JUMPDEST SWAP1 POP PUSH2 0x7BB JUMP JUMPDEST PUSH1 0x0 NOT DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B6 PUSH2 0x267B JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x2718 JUMP JUMPDEST PUSH2 0x128F PUSH2 0x1BBC JUMP JUMPDEST PUSH1 0x0 PUSH2 0x129A DUP4 PUSH2 0x193C JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12A7 DUP3 PUSH2 0x1725 JUMP JUMPDEST SWAP1 POP PUSH2 0x12C0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x12CB DUP3 DUP3 DUP6 PUSH2 0x1AD9 JUMP JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP6 PUSH1 0x40 MLOAD PUSH2 0x1305 SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH2 0xA52 DUP2 PUSH2 0x273E JUMP JUMPDEST DUP1 PUSH2 0xB0B DUP2 PUSH2 0x2743 JUMP JUMPDEST PUSH2 0x133E DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1337 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x184E JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x1359 JUMPI PUSH1 0x0 PUSH2 0x135C JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1377 DUP5 DUP5 DUP5 PUSH2 0x27BC JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139D DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x184E JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B6 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x13DB TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x13D3 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x136A JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x136A JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH2 0x13F1 DUP4 PUSH2 0x22E6 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x136A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1414 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x1BA PUSH2 0x184E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1427 JUMPI DUP2 PUSH2 0x1429 JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x149A SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x1A7C326300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH4 0x1A7C3263 SWAP1 PUSH2 0x14EF SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1507 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x151B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x153F SWAP2 SWAP1 PUSH2 0x3760 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x158D JUMPI PUSH2 0x154F DUP2 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 AND PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x165A JUMP JUMPDEST PUSH1 0x2 DUP3 EQ ISZERO PUSH2 0x15EA JUMPI PUSH2 0x159F DUP2 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH9 0x10000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x165A JUMP JUMPDEST PUSH1 0x3 DUP3 EQ ISZERO PUSH2 0x164F JUMPI PUSH2 0x15FC DUP2 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND PUSH17 0x100000000000000000000000000000000 MUL PUSH32 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x165A JUMP JUMPDEST PUSH2 0x165A PUSH2 0x1BB PUSH2 0x21D3 JUMP JUMPDEST DUP2 PUSH32 0x6BFB689528FA96EC1AD670AD6D6064BE1AE96BFD5D2EE35C837FD0FE0C11959A DUP3 PUSH1 0x40 MLOAD PUSH2 0x168A SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x16A1 PUSH2 0x16D8 JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x8B6 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1753 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1783 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x17B3 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x17E3 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1813 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1843 JUMPI POP PUSH32 0x0 PUSH2 0xB37 JUMP JUMPDEST PUSH2 0xB37 PUSH2 0x135 PUSH2 0x21D3 JUMP JUMPDEST DUP2 PUSH2 0xB0B JUMPI PUSH2 0xB0B DUP2 PUSH2 0x21D3 JUMP JUMPDEST PUSH2 0x1873 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x188A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1895 DUP4 DUP4 DUP4 PUSH2 0x133E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x18BB SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x2803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x18EA SWAP1 DUP3 PUSH2 0x1C8E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x149A SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1980 JUMPI POP PUSH1 0x0 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x19C2 JUMPI POP PUSH1 0x1 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1A04 JUMPI POP PUSH1 0x2 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1A46 JUMPI POP PUSH1 0x3 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1A88 JUMPI POP PUSH1 0x4 PUSH2 0xB37 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1843 JUMPI POP PUSH1 0x5 PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1B28 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1B4C SWAP2 SWAP1 PUSH2 0x3760 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x1B69 DUP2 DUP4 DUP6 PUSH2 0x13A3 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE MLOAD DUP6 SWAP1 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP1 PUSH2 0x1BAD SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1BEB PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xE46 JUMP JUMPDEST SWAP1 POP PUSH2 0xA52 PUSH2 0x1BFA DUP3 CALLER PUSH2 0x2819 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x857 PUSH2 0x1C0D PUSH2 0x1697 JUMP JUMPDEST PUSH2 0x192 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1C2A PUSH2 0x1C20 PUSH2 0x2902 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1C3F PUSH2 0x1C35 PUSH2 0x290B JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x184E JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1C50 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x136A JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x1C83 SWAP1 DUP4 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x1429 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x184E JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1CC0 JUMPI PUSH2 0x1CBB PUSH2 0x1CB1 PUSH2 0x16B4 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x1CD5 JUMP JUMPDEST PUSH2 0x1CD5 PUSH2 0x1CCB PUSH2 0x16D8 JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x1C83 SWAP1 DUP4 SWAP1 PUSH2 0x3A3D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D3B PUSH2 0xA55 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1D47 PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1D74 SWAP3 SWAP2 SWAP1 PUSH2 0x3B01 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D8C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DA0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1DC4 SWAP2 SWAP1 PUSH2 0x37F9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x1E11 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x3AE8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1E2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1103 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1E4E SWAP1 DUP3 PUSH1 0xFF PUSH2 0x1343 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x1E81 SWAP1 DUP4 SWAP1 PUSH2 0x3A3D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0xA52 JUMPI PUSH2 0xA52 PUSH2 0x857 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1EA0 PUSH2 0xE10 JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x1EB6 JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0xB37 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x1ED9 JUMPI PUSH2 0x1ED4 DUP2 PUSH2 0x22E6 JUMP JUMPDEST PUSH2 0x1429 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xB0B DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1F2C SWAP1 PUSH2 0x3B49 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1F44 SWAP1 DUP3 SWAP1 PUSH2 0x1EE9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH2 0x1F7F DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1F5E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1F72 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2917 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1F8B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1F47 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x208D JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x1FC2 SWAP3 SWAP2 SWAP1 PUSH2 0x3955 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1FFF JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2004 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x2013 JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x206F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x2095 PUSH2 0x226B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x209F PUSH2 0x16FC JUMP JUMPDEST SWAP1 POP PUSH2 0x20AB DUP8 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x20C3 DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x20D5 DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x215F DUP7 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x216D DUP4 DUP6 PUSH2 0x2917 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x217B DUP7 DUP4 PUSH2 0x2ACA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 GT ISZERO PUSH2 0x21C9 JUMPI DUP1 DUP4 SUB PUSH1 0x0 PUSH2 0x21A5 PUSH2 0x219F DUP4 PUSH2 0x219A DUP5 PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x2B00 JUMP JUMPDEST DUP7 PUSH2 0x2B1A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x21C6 JUMPI PUSH1 0x0 PUSH2 0x21B9 DUP8 DUP4 PUSH2 0x2B3A JUMP JUMPDEST SWAP1 POP PUSH2 0x21C4 DUP2 PUSH2 0x2B52 JUMP JUMPDEST POP JUMPDEST POP POP JUMPDEST PUSH2 0x1103 DUP9 DUP5 PUSH2 0x2718 JUMP JUMPDEST PUSH2 0xA52 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x2B63 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0xB34 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x2222 SWAP2 SWAP1 PUSH2 0x3839 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x857 PUSH2 0x2237 PUSH2 0x101F JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x224E DUP5 PUSH2 0x2BDE JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x225D DUP8 DUP8 DUP5 PUSH2 0x2BF4 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x857 PUSH2 0x1C02 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2282 SWAP1 DUP3 SWAP1 PUSH2 0x1EE9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH2 0x22BD DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x229C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x22B0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2ACA JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x22C9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2285 JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x2CA3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 DUP3 PUSH1 0x60 PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH1 0x60 DUP1 PUSH2 0x1430 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x230E DUP4 PUSH2 0x1ACA JUMP JUMPDEST SWAP2 POP PUSH2 0x231D DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1430 JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2333 SWAP1 DUP3 SWAP1 PUSH2 0x1EE9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xA20 JUMPI PUSH2 0x236E DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x234D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2361 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2D6F JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x237A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2336 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x239F DUP9 DUP9 PUSH2 0x24C6 JUMP JUMPDEST SWAP3 POP SWAP3 POP SWAP3 POP PUSH1 0x0 DUP7 DUP5 GT PUSH2 0x23B5 JUMPI PUSH1 0x0 PUSH2 0x23B9 JUMP JUMPDEST DUP7 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 DUP5 DUP5 GT PUSH2 0x23CB JUMPI PUSH1 0x0 PUSH2 0x23CF JUMP JUMPDEST DUP5 DUP5 SUB JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x23F0 PUSH2 0x23E0 PUSH1 0x0 PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x23EA DUP6 DUP8 PUSH2 0x2917 JUMP JUMPDEST SWAP1 PUSH2 0x2ACA JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x240B PUSH2 0x2401 PUSH1 0x2 PUSH2 0xB9A JUMP JUMPDEST PUSH2 0x23EA DUP6 DUP9 PUSH2 0x2917 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP12 SWAP4 SWAP11 POP SWAP3 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x242A PUSH2 0xEE2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2462 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2476 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x8B6 SWAP2 SWAP1 PUSH2 0x36DE JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH32 0x0 DUP4 PUSH2 0x2547 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x24DF DUP5 PUSH2 0x24DA DUP8 PUSH1 0x1 PUSH2 0x2DBD JUMP JUMPDEST PUSH2 0x2968 JUMP JUMPDEST SWAP3 POP PUSH2 0x24E9 PUSH2 0x2EC6 JUMP JUMPDEST ISZERO PUSH2 0x2502 JUMPI PUSH2 0x24F8 DUP5 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP PUSH2 0x1018 JUMP JUMPDEST PUSH2 0x250A PUSH2 0x2EEA JUMP JUMPDEST ISZERO PUSH2 0x2523 JUMPI DUP3 SWAP2 POP PUSH2 0x251C DUP5 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP1 POP PUSH2 0x1018 JUMP JUMPDEST PUSH2 0x2532 DUP5 PUSH2 0x24DA DUP8 PUSH1 0x0 PUSH2 0x2DBD JUMP JUMPDEST SWAP2 POP PUSH2 0x253E DUP5 DUP7 PUSH2 0x2968 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 DUP1 PUSH1 0x60 PUSH2 0x2563 DUP9 PUSH2 0x2F0E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x2575 DUP4 DUP11 DUP11 PUSH2 0x238D JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 PUSH2 0x2585 DUP6 DUP5 PUSH2 0x2B3A JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x2596 JUMPI PUSH2 0x2596 DUP2 PUSH2 0x2B52 JUMP JUMPDEST SWAP4 SWAP1 SWAP4 ADD SWAP10 SWAP2 SWAP9 POP SWAP2 SWAP7 POP SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x25F3 DUP6 PUSH2 0x2F47 JUMP JUMPDEST SWAP1 POP PUSH2 0x2609 PUSH2 0x2603 DUP8 DUP4 DUP8 PUSH2 0x2F63 JUMP JUMPDEST DUP4 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x2618 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x184E JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH2 0xB0B DUP3 DUP3 PUSH2 0x3030 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x26E8 PUSH2 0x30BD JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x26FD SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3ABC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2725 DUP2 PUSH1 0x0 PUSH1 0xE9 PUSH2 0x30C1 JUMP JUMPDEST PUSH2 0x2732 DUP4 PUSH1 0xE9 PUSH1 0x17 PUSH2 0x30C1 JUMP JUMPDEST OR PUSH1 0xB SSTORE PUSH2 0xB0B PUSH2 0x30D4 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2752 JUMPI PUSH2 0xA52 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2761 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x133E JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2789 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x27B2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x184E JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2772 JUMP JUMPDEST PUSH2 0x27CB PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x27F4 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x27ED JUMPI POP PUSH2 0x27E9 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1418 JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x184E JUMP JUMPDEST PUSH2 0x133E DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2812 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x184E JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x2838 PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2853 JUMPI POP PUSH2 0x2853 DUP4 PUSH2 0x310A JUMP JUMPDEST ISZERO PUSH2 0x287B JUMPI PUSH2 0x2860 PUSH2 0xEBE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x2883 PUSH2 0x2420 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x28B2 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x3A69 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x28CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x28DE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1266 SWAP2 SWAP1 PUSH2 0x35DB JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2926 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x184E JUMP JUMPDEST DUP3 PUSH2 0x2933 JUMPI POP PUSH1 0x0 PUSH2 0x7BB JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2956 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x294D JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x184E JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x295F JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x7BB JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x29A9 JUMPI PUSH2 0x299F DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2988 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x1C8E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x2971 JUMP JUMPDEST POP DUP2 PUSH2 0x29BA JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x7BB JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x2AB3 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x2A10 JUMPI PUSH2 0x2A06 PUSH2 0x29E4 DUP4 DUP8 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A01 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x29F3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2B1A JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x29CF JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x2A69 PUSH2 0x2A48 PUSH2 0x2A42 PUSH2 0x2A27 DUP5 DUP11 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A3C PUSH2 0x2A34 DUP9 DUP14 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x2B1A JUMP JUMPDEST SWAP1 PUSH2 0x1C8E JUMP JUMPDEST DUP7 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A01 PUSH2 0x2A58 DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A3C PUSH2 0x2A34 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x2B00 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x2A91 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x2A8C JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x7BB JUMP JUMPDEST PUSH2 0x2AAA JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x2AAA JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x7BB JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x29C2 JUMP JUMPDEST POP PUSH2 0x2ABF PUSH2 0x141 PUSH2 0x21D3 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x2AEE DUP5 ISZERO DUP1 PUSH2 0x2AE7 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2AE4 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x184E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1429 DUP5 ISZERO DUP1 PUSH2 0x2AE7 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2AE4 JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x2B29 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x184E JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x2B32 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1429 PUSH2 0x2B49 DUP5 DUP5 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0x2A01 DUP5 PUSH2 0x3115 JUMP JUMPDEST PUSH2 0xA52 PUSH2 0x2B5D PUSH2 0x105E JUMP JUMPDEST DUP3 PUSH2 0x2646 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1429 SWAP2 SWAP1 PUSH2 0x3855 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2C02 DUP4 DUP6 PUSH2 0x2917 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2C1C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2C46 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x2C9A JUMPI PUSH2 0x2C7B DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2C65 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2ACA SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2C87 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2C4C JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2CBA PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x184E JUMP JUMPDEST PUSH2 0x2CC6 DUP3 PUSH1 0x0 DUP4 PUSH2 0x133E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2CEC SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x2803 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x2D1F PUSH2 0x2D1A DUP3 PUSH2 0x2D14 PUSH2 0x87D JUMP JUMPDEST SWAP1 PUSH2 0x313B JUMP JUMPDEST PUSH2 0x273E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x2D63 SWAP2 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2D7E DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x184E JUMP JUMPDEST DUP3 PUSH2 0x2D8B JUMPI POP PUSH1 0x0 PUSH2 0x7BB JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2DA5 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x294D JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x2DB1 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x7BB JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2DDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2E04 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2EBD JUMPI PUSH1 0x0 PUSH2 0x2E1C PUSH2 0xE10 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x2E29 JUMPI DUP2 PUSH2 0x2E2E JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x2E39 DUP2 PUSH2 0x249A JUMP JUMPDEST DUP1 PUSH2 0x2E50 JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x2E50 JUMPI POP PUSH2 0x2E50 DUP2 PUSH2 0x3149 JUMP JUMPDEST PUSH2 0x2E6D JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2E60 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2E9D JUMP JUMPDEST PUSH2 0x2E9D DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2E7C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x9 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3178 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2EA9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2E0A JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x2F35 DUP4 PUSH2 0x2F1E PUSH2 0xE10 JUMP JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x2F28 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3193 JUMP JUMPDEST PUSH2 0x2F3E DUP5 PUSH2 0x31A7 JUMP JUMPDEST SWAP2 POP SWAP2 POP SWAP2 POP SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F51 PUSH2 0x267B JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xE7B SWAP3 SWAP2 SWAP1 PUSH2 0x3965 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F75 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x184E JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x2FAE SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x3B18 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2FD0 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x3024 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x303C PUSH1 0x0 DUP4 DUP4 PUSH2 0x133E JUMP JUMPDEST PUSH2 0x304B PUSH2 0x2D1A DUP3 PUSH2 0x2A3C PUSH2 0x87D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x306E SWAP1 DUP3 PUSH2 0x1C8E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x2D63 SWAP1 DUP6 SWAP1 PUSH2 0x3A60 JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30CE DUP5 DUP5 DUP5 PUSH2 0x27BC JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30DE PUSH2 0x1701 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xB0B JUMPI PUSH2 0x30F4 DUP2 PUSH2 0x3149 JUMP JUMPDEST ISZERO PUSH2 0x3102 JUMPI PUSH2 0x3102 DUP2 PUSH2 0x3250 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x30E3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH2 0x327E JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x312D JUMPI PUSH1 0x0 PUSH2 0xB34 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1429 DUP4 DUP4 PUSH1 0x1 PUSH2 0x2803 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2547 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1429 PUSH2 0x318A DUP5 PUSH2 0x219A DUP6 PUSH2 0x22F4 JUMP JUMPDEST PUSH2 0x2A01 DUP5 PUSH2 0x22E6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0xB34 DUP3 PUSH2 0x31A1 PUSH2 0x87D JUMP JUMPDEST SWAP1 PUSH2 0x138D JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x31C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x31EF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3249 JUMPI DUP4 PUSH2 0x3207 PUSH2 0xE10 JUMP JUMPDEST DUP3 LT PUSH2 0x3216 JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x3218 JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x3222 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x3236 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x31F5 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3268 DUP2 PUSH2 0x13E3 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32A9 PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0xE46 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0xB34 JUMPI POP PUSH2 0xB34 DUP3 PUSH1 0x0 PUSH2 0x32E0 PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0xE46 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x3314 JUMPI POP PUSH2 0x3311 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0xE46 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0xB34 JUMPI POP PUSH1 0x0 PUSH2 0xB34 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x3331 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3347 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MUL PUSH2 0x3357 DUP3 DUP3 ADD PUSH2 0x3BE6 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP4 POP DUP2 DUP5 ADD DUP6 DUP4 ADD DUP3 DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x3373 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x2ABF JUMPI DUP1 CALLDATALOAD DUP3 MSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3378 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x33A6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x33BC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x33ED PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x3BE6 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x3404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x342E JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x1429 DUP2 PUSH2 0x3C0D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x344B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3456 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x3466 DUP2 PUSH2 0x3C0D JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x3485 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x3490 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x34A0 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x34CB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x34D6 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x34E6 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x3504 DUP2 PUSH2 0x3C22 JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3533 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x353E DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x355E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3574 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x3580 DUP6 DUP3 DUP7 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x35A3 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x35B9 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x35C5 DUP7 DUP3 DUP8 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP7 POP PUSH1 0x40 SWAP1 SWAP6 ADD CALLDATALOAD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x35EC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1429 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x3615 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x3627 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x3637 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x3653 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x365F DUP12 DUP4 DUP13 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x3682 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x368F DUP11 DUP3 DUP12 ADD PUSH2 0x3396 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36AF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x1429 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x36EF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1429 DUP2 PUSH2 0x3C0D JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x370C JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x3717 DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x3732 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x373E DUP6 DUP3 DUP7 ADD PUSH2 0x3396 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3759 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x3771 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x378F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x37AC JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x37B8 DUP9 DUP3 DUP10 ADD PUSH2 0x3321 JUMP JUMPDEST SWAP6 SWAP9 SWAP6 SWAP8 POP POP POP POP PUSH1 0x40 DUP5 ADD CALLDATALOAD SWAP4 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP4 PUSH1 0x80 SWAP1 SWAP2 ADD CALLDATALOAD SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x37EA JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x380E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x382E DUP2 PUSH2 0x3C0D JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x384A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x1429 DUP2 PUSH2 0x3C22 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x3867 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x3872 DUP2 PUSH2 0x3C22 JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38B1 JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x3895 JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x38E1 JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x38C5 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x38F2 JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x39F0 JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x39CB JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1429 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x3882 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x3A22 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x3882 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x3A34 DUP2 DUP6 PUSH2 0x3882 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x13DB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x38BC JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x1429 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x38BC JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH32 0x4E4F545F494D504C454D454E5445440000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x13DB PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x3882 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x3C05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0xA52 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4A DUP4 DIV PUSH26 0xD41DA3261EFB4ECABD8812DCAC007DA4E7D8761AEA157B897329 LOG0 0xD8 PUSH5 0x736F6C6343 STOP SMOD ADD STOP CALLER ", + "sourceMap": "877:4315:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4857:164;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5813:394:34:-;;;:::i;:::-;;6721:117;;;:::i;3500:106:51:-;;;:::i;:::-;;;;;;;:::i;3274:363:45:-;;;:::i;:::-;;;;;;;;;:::i;29081:120:28:-;;;:::i;:::-;;;;;;;:::i;14709:346:59:-;;;:::i;:::-;;;;;;;:::i;2575:655:26:-;;;;;;:::i;:::-;;:::i;6715:383:58:-;;;;;;:::i;:::-;;:::i;3156:81:51:-;;;:::i;:::-;;;;;;;:::i;2243:113:52:-;;;:::i;8723:165:28:-;;;;;;:::i;:::-;;:::i;7114:91::-;;;:::i;6269:211:51:-;;;;;;:::i;:::-;;:::i;16974:534:57:-;;;:::i;:::-;;;;;;;;:::i;12270:75:28:-;;;:::i;11034:231::-;;;;;;:::i;:::-;;:::i;3432:100:30:-;;;:::i;4246:128:58:-;;;;;;:::i;:::-;;:::i;7926:185:28:-;;;:::i;20592:913::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2746:467:63:-;;;;;;:::i;:::-;;:::i;5051:560:34:-;;;;;;:::i;:::-;;:::i;4022:117:51:-;;;;;;:::i;:::-;;:::i;16016:2311:28:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2006:113:52:-;;;;;;:::i;:::-;;:::i;5256:599:58:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;10262:86:59:-;;;:::i;11817:72:28:-;;;:::i;2607:430:38:-;;;;;;:::i;:::-;;:::i;19019:911:28:-;;;;;;:::i;:::-;;:::i;1751:80:29:-;;;:::i;:::-;;;;;;;:::i;1797:79:26:-;;;:::i;1303:121:41:-;;;;;;:::i;:::-;;:::i;2448:85:51:-;;;:::i;3849:397:63:-;;;;;;:::i;:::-;;:::i;3356:429:26:-;;;;;;:::i;:::-;;:::i;4342:170:51:-;;;;;;:::i;:::-;;:::i;1837:101:29:-;;;:::i;16438:167:59:-;;;;;;:::i;:::-;;:::i;3485:358:63:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;9746:133:28:-;;;:::i;3780:102:30:-;;;:::i;2319:421:63:-;;;;;;:::i;:::-;;:::i;8305:127:28:-;;;:::i;1437:508:52:-;;;;;;:::i;:::-;;:::i;13533:2321:28:-;;;;;;:::i;:::-;;:::i;2178:254:26:-;;;;;;:::i;:::-;;:::i;2859:80:34:-;;;:::i;1184:113:41:-;;;:::i;3219:159:63:-;;;;;;:::i;:::-;;:::i;6142:414:58:-;;;;;;:::i;:::-;;:::i;3384:95:63:-;;;;;;:::i;:::-;;:::i;2254:81:51:-;2323:5;2316:12;;;;;;;;-1:-1:-1;;2316:12:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;;:::o;5813:394:34:-;5876:31;:29;:31::i;:::-;5922:30;:28;:30::i;:::-;5918:128;;;5968:67;5992:20;4359:1:17;5968:23:34;:67::i;:::-;6056:68;6080:20;4446:1:17;6056:23:34;:68::i;:::-;6134:66;6158:20;4485:1:17;6134:23:34;:66::i;:::-;5813:394::o;6721:117::-;6805:26;6721:117;:::o;3500:106:51:-;3587:12;;3500:106;:::o;3274:363:45:-;3377:11;3402:26;3442:27;3504:14;:12;:14::i;:::-;3503:15;3494:24;;3549;:22;:24::i;:::-;3528:45;;3605:25;:23;:25::i;:::-;3583:47;;3274:363;;;:::o;29081:120:28:-;29142:16;29177:17;:15;:17::i;:::-;29170:24;;29081:120;:::o;14709:346:59:-;14760:22;14794:19;14816:17;:15;:17::i;:::-;14794:39;;14843:32;14898:11;14878:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14878:32:59;;14843:67;;14926:9;14921:101;14945:11;14941:1;:15;14921:101;;;14992:19;15009:1;14992:16;:19::i;:::-;14977:9;14987:1;14977:12;;;;;;;;-1:-1:-1;;;;;14977:34:59;;;:12;;;;;;;;;;;:34;14958:3;;14921:101;;;-1:-1:-1;15039:9:59;-1:-1:-1;;14709:346:59;:::o;2575:655:26:-;2703:4;2719:24;2746:29;2756:6;2764:10;2746:9;:29::i;:::-;2719:56;-1:-1:-1;2785:101:26;2794:10;-1:-1:-1;;;;;2794:20:26;;;;:50;;;2838:6;2818:16;:26;;2794:50;10712:3:10;2785:8:26;:101::i;:::-;2897:36;2907:6;2915:9;2926:6;2897:9;:36::i;:::-;2948:10;-1:-1:-1;;;;;2948:20:26;;;;;;:55;;;-1:-1:-1;;2972:16:26;:31;;2948:55;2944:258;;;3136:55;3145:6;3153:10;3184:6;3165:16;:25;3136:8;:55::i;:::-;-1:-1:-1;3219:4:26;;2575:655;-1:-1:-1;;;;2575:655:26:o;6715:383:58:-;6778:13;6794:21;6809:5;6794:14;:21::i;:::-;6778:37;;6826:22;6851:23;6868:5;6851:16;:23::i;:::-;6826:48;-1:-1:-1;6884:83:58;-1:-1:-1;;;;;6893:31:58;;;;9022:3:10;6884:8:58;:83::i;:::-;6977:16;6996:23;;;:16;:23;;;;;;:37;;:35;:37::i;:::-;6977:56;;7043:48;7065:5;7072:8;7082;7043:21;:48::i;:::-;6715:383;;;;:::o;3156:81:51:-;3221:9;;;;3156:81;:::o;2243:113:52:-;2303:7;2329:20;:18;:20::i;8723:165:28:-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;8841:40:28::2;8863:17;8841:21;:40::i;:::-;8723:165:::0;:::o;7114:91::-;7191:7;7114:91;:::o;6269:211:51:-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6403:32:51;;;;;;;;;;6357:4;;6373:79;;6394:7;;6403:48;;6440:10;6403:36;:48::i;:::-;6373:8;:79::i;16974:534:57:-;17152:17;;17050:33;;;;17208:126;17152:17;2613:3;2838:2;17208:18;:126::i;:::-;17180:154;-1:-1:-1;17373:128:57;:7;2543:1;2613:3;17373:18;:128::i;:::-;17345:156;;16974:534;;;:::o;12270:75:28:-;2276:21:38;:19;:21::i;:::-;12321:17:28::1;12332:5;12321:10;:17::i;11034:231::-:0;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;11213:45:28::2;11240:5;11247:10;11213:26;:45::i;:::-;11034:231:::0;;:::o;3432:100:30:-;2276:21:38;:19;:21::i;:::-;3503:22:30::1;3520:4;3503:16;:22::i;4246:128:58:-:0;4305:7;4331:36;4345:21;4360:5;4345:14;:21::i;:::-;4331:13;:36::i;:::-;4324:43;;4246:128;;;;:::o;7926:185:28:-;8022:9;;7996:7;;8022:82;;4326:3;4561:2;8022:20;:82::i;20592:913::-;20861:13;20876:27;20915:71;20951:8;:15;20968:17;:15;:17::i;:::-;20915:35;:71::i;:::-;20997:255;21023:6;21043;21063:9;21086:8;21108:15;21137:25;21176:8;21198:11;21223:19;20997:12;:255::i;:::-;20592:913;;;;;;;;;;:::o;2746:467:63:-;3000:206;3047:10;3075:8;3101:20;3139:17;3174:18;3000:29;:206::i;:::-;2746:467;;;;;:::o;5051:560:34:-;5128:7;5151:16;:14;:16::i;:::-;5147:55;;;-1:-1:-1;5190:1:34;5183:8;;5147:55;5216:31;5212:393;;5270:30;:28;:30::i;:::-;:81;;5320:31;5270:81;;;5303:6;:14;;;5270:81;5263:88;;;;5212:393;4446:1:17;5372:7:34;:32;5368:237;;;-1:-1:-1;5427:6:34;:15;;;;;;5420:22;;5368:237;4485:1:17;5463:7:34;:30;5459:146;;;-1:-1:-1;5516:6:34;:13;;;;;;5509:20;;5459:146;5560:34;12459:3:10;5560:7:34;:34::i;4022:117:51:-;-1:-1:-1;;;;;4114:18:51;4088:7;4114:18;;;;;;;;;;;;4022:117::o;16016:2311:28:-;16304:16;16322;16287:6;13172:68;13203:10;:8;:10::i;:::-;-1:-1:-1;;;;;13181:33:28;:10;-1:-1:-1;;;;;13181:33:28;;6194:3:10;13172:8:28;:68::i;:::-;13250:55;13269:11;:9;:11::i;:::-;13259:6;:21;12526:3:10;13250:8:28;:55::i;:::-;16350:27:::1;16387:19;16841:33;:8;:31;:33::i;:::-;16837:1175;;;16956:23;:21;:23::i;:::-;17180:54;17200:8;17210:13;:11;:13::i;:::-;17225:8;17180:19;:54::i;:::-;17152:82:::0;-1:-1:-1;17152:82:28;-1:-1:-1;16837:1175:28::1;;;17346:21;:19;:21::i;:::-;17382:31;17416:17;:15;:17::i;:::-;17382:51;;17447:39;17461:8;17471:14;17447:13;:39::i;:::-;17529:336;17558:6;17582;17606:9;17633:8;17659:15;17692:16;:14;:16::i;:::-;:48;;17715:25;17692:48;;;17711:1;17692:48;17811:14;17843:8;17529:11;:336::i;:::-;17501:364:::0;-1:-1:-1;17501:364:28;-1:-1:-1;17954:47:28::1;17501:364:::0;17986:14;17954:19:::1;:47::i;:::-;16837:1175;;18117:36;18133:6;18141:11;18117:15;:36::i;:::-;18277:10;18303:8;:15;18289:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;18289:30:28::1;;18269:51;;;;;;13315:1;16016:2311:::0;;;;;;;;;;;:::o;2006:113:52:-;2067:7;2093:19;2106:5;2093:12;:19::i;5256:599:58:-;5357:12;5383:15;5412:16;5442:15;5482:13;5498:16;:39;5515:21;5530:5;5515:14;:21::i;:::-;5498:39;;;;;;;;;;;-1:-1:-1;5498:39:58;;;-1:-1:-1;5646:71:58;5655:19;;;9022:3:10;5646:8:58;:71::i;:::-;5735:22;:5;:20;:22::i;:::-;5728:29;;5777:18;:5;:16;:18::i;:::-;5767:28;;5827:21;:5;:19;:21::i;:::-;5256:599;;;;-1:-1:-1;5805:43:58;;5256:599;-1:-1:-1;;;5256:599:58:o;10262:86:59:-;10332:9;10262:86;:::o;11817:72:28:-;2276:21:38;:19;:21::i;:::-;11866:16:28::1;11877:4;11866:10;:16::i;2607:430:38:-:0;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;19019:911:28:-;19288:14;19304:26;19342:71;19378:8;:15;19395:17;:15;:17::i;19342:71::-;19424:253;19450:6;19470;19490:9;19513:8;19535:15;19564:25;19603:8;19625:11;19650:17;19424:12;:253::i;1751:80:29:-;1818:6;1751:80;:::o;1797:79:26:-;1863:6;1797:79;:::o;1303:121:41:-;-1:-1:-1;;;;;1398:19:41;1372:7;1398:19;;;:10;:19;;;;;;;1303:121::o;2448:85:51:-;2519:7;2512:14;;;;;;;;-1:-1:-1;;2512:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;3849:397:63;4033:7;4053:18;4077:135;4126:8;4148:15;4177:25;4077:35;:135::i;:::-;-1:-1:-1;4052:160:63;3849:397;-1:-1:-1;;;;;3849:397:63:o;3356:429:26:-;3441:4;3457:24;3484:30;3494:10;3506:7;3484:9;:30::i;:::-;3457:57;;3539:16;3529:6;:26;3525:232;;3571:32;3580:10;3592:7;3601:1;3571:8;:32::i;:::-;3525:232;;;3690:56;3699:10;3711:7;3739:6;3720:16;:25;3690:8;:56::i;:::-;-1:-1:-1;3774:4:26;;3356:429;-1:-1:-1;;;3356:429:26:o;4342:170:51:-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;1837:101:29:-;1885:11;1915:16;:14;:16::i;16438:167:59:-;16518:4;16541:57;16576:21;16591:5;16576:14;:21::i;:::-;16541:34;:57::i;3485:358:63:-;3630:30;3674:37;3725:28;3785:51;3806:8;3816:19;3785:20;:51::i;:::-;3778:58;;;;;;3485:358;;;;;;:::o;9746:133:28:-;9825:9;;9802:4;;9825:47;;4388:3;9825:20;:47::i;3780:102:30:-;2276:21:38;:19;:21::i;:::-;3852:23:30::1;3869:5;3852:16;:23::i;2319:421:63:-:0;2503:21;2526:25;2593:140;2637:18;2669:15;2698:25;2593:30;:140::i;:::-;-1:-1:-1;2563:170:63;;;;-1:-1:-1;2319:421:63;-1:-1:-1;;;;2319:421:63:o;8305:127:28:-;8403:22;8305:127;:::o;1437:508:52:-;1645:18;921:109;1718:5;1725:7;1734:5;1741:19;1754:5;1741:12;:19::i;:::-;1762:8;1689:82;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1666:115;;;;;;1645:136;;1792:104;1814:5;1821:10;1833:26;1851:1;1854;1857;1833:17;:26::i;:::-;1861:8;12759:3:10;1792:21:52;:104::i;:::-;1907:31;1916:5;1923:7;1932:5;1907:8;:31::i;:::-;1437:508;;;;;;;;:::o;13533:2321:28:-;13821:16;13839;13804:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;13867:21:::1;:19;:21::i;:::-;13899:31;13933:17;:15;:17::i;:::-;13899:51;;13965:13;:11;:13::i;:::-;13961:1887;;14000:20;14022:26;14052:164;14087:6;14111;14135:9;14162:14;14194:8;14052:17;:164::i;:::-;13999:217;;;;14515:62;14540:16;:14;:16::i;:::-;14524:12;:32;;6140:3:10;14515:8:28;:62::i;:::-;14591:45;14615:1;14619:16;:14;:16::i;:::-;14591:15;:45::i;:::-;14650:59;14666:9;14692:16;:14;:16::i;:::-;14677:12;:31;14650:15;:59::i;:::-;14796:44;14814:9;14825:14;14796:17;:44::i;:::-;14863:9;14888:8;:15;14874:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;14874:30:28::1;;14855:50;;;;;;;;;13961:1887;14936:39;14950:8;14960:14;14936:13;:39::i;:::-;14990:20;15012:26;15042:336;15071:6;15095;15119:9;15146:8;15172:15;15205:16;:14;:16::i;:::-;:48;;15228:25;15205:48;;;15224:1;15205:48;15324:14;15356:8;15042:11;:336::i;:::-;14989:389;;;;15492:40;15508:9;15519:12;15492:15;:40::i;2178:254:26:-:0;2259:7;2301:10;:8;:10::i;:::-;-1:-1:-1;;;;;2282:30:26;:7;-1:-1:-1;;;;;2282:30:26;;2278:148;;;-1:-1:-1;;;2328:18:26;;2278:148;2384:31;2400:5;2407:7;2384:15;:31::i;:::-;2377:38;;;;2859:80:34;-1:-1:-1;;2859:80:34;:::o;1184:113:41:-;1244:7;1270:20;:18;:20::i;3219:159:63:-;3317:54;3337:10;3349:21;3317:19;:54::i;6142:414:58:-;2276:21:38;:19;:21::i;:::-;6241:13:58::1;6257:21;6272:5;6257:14;:21::i;:::-;6241:37;;6288:22;6313:23;6330:5;6313:16;:23::i;:::-;6288:48:::0;-1:-1:-1;6346:83:58::1;-1:-1:-1::0;;;;;6355:31:58;::::1;::::0;::::1;9022:3:10;6346:8:58;:83::i;:::-;6439:48;6461:5;6468:8;6478;6439:21;:48::i;:::-;6530:8;-1:-1:-1::0;;;;;6502:47:58::1;6523:5;6502:47;6540:8;6502:47;;;;;;:::i;:::-;;;;;;;;2307:1:38;;6142:414:58::0;;:::o;3384:95:63:-;3446:26;3462:9;3446:15;:26::i;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;1057:182::-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;2512:395::-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;1193:166:49:-;1251:7;1270:37;1284:1;1279;:6;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;:85::i;:::-;:113;:180;;:113;:180::i;:292::-;3692:311;3420:590;-1:-1:-1;;;;3420:590:36:o;2499:175::-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;2586:5;;1703:2;;2586:16;:81::i;1410:186:53:-;1466:6;1484:75;1502:16;1493:25;;;12403:3:10;1484:8:53;:75::i;:::-;-1:-1:-1;1583:5:53;1410:186::o;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;2020:1;2012:13;2005:20;1928:104;-1:-1:-1;;;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;10034:213:51:-;-1:-1:-1;;;;;10157:18:51;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;10208:32;;;;;10187:6;;10208:32;:::i;:::-;;;;;;;;10034:213;;;:::o;6844:665:34:-;6988:49;;;;;6965:20;;-1:-1:-1;;;;;6988:40:34;;;;;:49;;7029:7;;6988:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6965:72;-1:-1:-1;7052:31:34;7048:383;;7116:23;:12;:21;:23::i;:::-;7099:6;:40;;;;;;;;;;;;;;;7048:383;;;4446:1:17;7160:7:34;:32;7156:275;;;7226:23;:12;:21;:23::i;:::-;7208:6;:41;;;;;;;;;;;;;;;;;;;7156:275;;;4485:1:17;7270:7:34;:30;7266:165;;;7332:23;:12;:21;:23::i;:::-;7316:6;:39;;;;;;;;;;;;;;;;;;;7266:165;;;7386:34;12459:3:10;7386:7:34;:34::i;:::-;7480:7;7446:56;7489:12;7446:56;;;;;;:::i;:::-;;;;;;;;6844:665;;;:::o;4837:237:45:-;4884:4;5030:25;:23;:25::i;:::-;5012:15;:43;:55;;;-1:-1:-1;;5060:7:45;;;;5059:8;;4837:237::o;5187:108::-;5269:19;5187:108;:::o;5301:110::-;5384:20;5301:110;:::o;4278:87:63:-;4345:16;4278:87;:::o;9914:112:59:-;10007:12;9914:112;:::o;15061:436::-;15125:13;15154:10;15150:37;;-1:-1:-1;15173:14:59;15166:21;;15150:37;15201:5;15210:1;15201:10;15197:37;;;-1:-1:-1;15220:14:59;15213:21;;15197:37;15248:5;15257:1;15248:10;15244:37;;;-1:-1:-1;15267:14:59;15260:21;;15244:37;15295:5;15304:1;15295:10;15291:37;;;-1:-1:-1;15314:14:59;15307:21;;15291:37;15342:5;15351:1;15342:10;15338:37;;;-1:-1:-1;15361:14:59;15354:21;;15338:37;15389:5;15398:1;15389:10;15385:106;;;-1:-1:-1;15408:14:59;15401:21;;15385:106;15451:29;7054:3:10;15451:7:59;:29::i;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;7753:559:51:-;7880:71;-1:-1:-1;;;;;7889:20:51;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;-1:-1:-1;;;;;7970:23:51;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;-1:-1:-1;;;;;8122:17:51;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;-1:-1:-1;;;;;8102:17:51;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;-1:-1:-1;;;;;8200:20:51;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;;;;8298:6;;8270:35;:::i;10354:357:59:-;10415:7;10447;-1:-1:-1;;;;;10438:16:59;:5;-1:-1:-1;;;;;10438:16:59;;10434:30;;;-1:-1:-1;10463:1:59;10456:8;;10434:30;10487:7;-1:-1:-1;;;;;10478:16:59;:5;-1:-1:-1;;;;;10478:16:59;;10474:30;;;-1:-1:-1;10503:1:59;10496:8;;10474:30;10527:7;-1:-1:-1;;;;;10518:16:59;:5;-1:-1:-1;;;;;10518:16:59;;10514:30;;;-1:-1:-1;10543:1:59;10536:8;;10514:30;10567:7;-1:-1:-1;;;;;10558:16:59;:5;-1:-1:-1;;;;;10558:16:59;;10554:30;;;-1:-1:-1;10583:1:59;10576:8;;10554:30;10607:7;-1:-1:-1;;;;;10598:16:59;:5;-1:-1:-1;;;;;10598:16:59;;10594:30;;;-1:-1:-1;10623:1:59;10616:8;;10594:30;10647:7;-1:-1:-1;;;;;10638:16:59;:5;-1:-1:-1;;;;;10638:16:59;;10634:30;;;-1:-1:-1;10663:1:59;10656:8;;2752:165:36;2811:7;2837:73;:5;1772:3;1951:2;2837:16;:73::i;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7470:13;7486:23;;;:16;:23;;;;;;7427:33;;-1:-1:-1;7546:43:58;7486:23;7427:33;7580:8;7546:27;:43::i;:::-;7520:23;;;;:16;:23;;;;;;;:69;;;;7605:34;7537:5;;7605:34;;;;7634:4;;7605:34;:::i;:::-;;;;;;;;7282:364;;;;;:::o;2420:181:38:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;4340:98:45:-;4392:39;4401:14;:12;:14::i;:::-;9935:3:10;4392:8:45;:39::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:17;:47;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:17;:47;;6030:3:10;9078:8:28;:89::i;:::-;9190:9;;:147;;9224:17;4326:3;4561:2;9190:20;:147::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;966:167:54:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;3913:358:45:-;3969:6;3965:232;;;3991:81;4018:24;:22;:24::i;:::-;4000:15;:42;9993:3:10;3991:8:45;:81::i;:::-;3965:232;;;4103:83;4130:25;:23;:25::i;:::-;4112:15;:43;11423:3:10;4103:8:45;:83::i;:::-;4207:7;:16;;;;;;;;;;4238:26;;;;;;4207:16;;4238:26;:::i;11271:279:28:-;11364:14;11381:11;:9;:11::i;:::-;11364:28;;11409:20;11433:10;:8;:10::i;:::-;-1:-1:-1;;;;;11433:27:28;;11461:6;11469:5;11433:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11486:57;;;;;11402:73;;-1:-1:-1;;;;;;11486:37:28;;;-1:-1:-1;11486:37:28;;-1:-1:-1;11486:57:28;;-1:-1:-1;11524:6:28;;11532:10;;11486:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:488;10065:9;;:56;;10086:7;4388:3;10065:20;:56::i;:::-;10053:9;:68;10137:33;;;;;;10162:7;;10137:33;:::i;:::-;;;;;;;;10425:7;10420:38;;10434:24;:22;:24::i;4380:719:58:-;4449:7;4877:13;:11;:13::i;:::-;4868:5;:22;4864:74;;;-1:-1:-1;945:4:47;4906:21:58;;4864:74;4948:22;4973:23;;;:16;:23;;;;;;5013:28;;:79;;5061:31;:14;:29;:31::i;:::-;5013:79;;;945:4:47;5006:86:58;4380:719;-1:-1:-1;;;4380:719:58:o;920:131:43:-;998:46;1012:1;1007;:6;5804:3:10;998:8:43;:46::i;4903:287:63:-;5121:7;5130:16;5158:25;;;;;;;;;;:::i;:::-;;;;;;;;31004:360:28;31133:14;;31201:21;;31157:66;;31133:14;;31157:35;:66::i;:::-;31239:9;31234:124;31258:6;31254:1;:10;31234:124;;;31298:49;31317:7;31325:1;31317:10;;;;;;;;;;;;;;31329:14;31344:1;31329:17;;;;;;;;;;;;;;31298:18;:49::i;:::-;31285:7;31293:1;31285:10;;;;;;;;;;;;;;;;;:62;31266:3;;31234:124;;32751:7126;33432:10;33454:4;33432:27;33428:6443;;33728:12;33754:4;-1:-1:-1;;;;;33746:18:28;33765:8;;33746:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33727:47;;;33992:7;34025:1;34020:3336;;;;37516:9;34020:3336;34496:4;34493:1;34490;34475:26;34549:1;34543:8;34553:66;34539:81;34781:66;34771:77;;34765:2;;34904:16;34901:1;34898;34883:38;34960:16;34957:1;34950:27;34765:2;;36371;36365:4;36362:1;36347:27;36568:2;36562:4;36555:16;36992:2;36974:16;36970:25;36964:4;36958;36943:53;37330:2;37312:16;37308:25;37305:1;37298:36;33858:3703;37816:21;:19;:21::i;:::-;37852:31;37886:17;:15;:17::i;:::-;37852:51;;37917:39;37931:8;37941:14;37917:13;:39::i;:::-;37972:17;37991:29;38024:256;38049:6;38073;38097:9;38124:8;38150:15;38183:25;38226:14;38258:8;38024:7;:256;;:::i;:::-;37971:309;;;;38295:45;38311:12;38325:14;38295:15;:45;;:::i;:::-;38821:19;;39208:23;;;39248:24;;;39494:66;39476:16;;;39469:92;38842:2;38817:28;39587:16;;;39843:2;39833:13;;39587:16;39819:28;13606:2484:57;14462:29;14494:52;14525:10;14537:8;14494:30;:52::i;:::-;14462:84;-1:-1:-1;14626:25:57;14654:45;:18;14681:17;14654:26;:45::i;:::-;14626:73;-1:-1:-1;14709:24:57;14736:47;:20;14626:73;14736:28;:47::i;:::-;14709:74;;15226:16;15202:21;:40;15198:821;;;15291:40;;;15258:30;15525:168;15555:85;15291:40;15588:51;15258:30;15588:29;:51::i;:::-;15555:8;:85::i;:::-;15658:21;15525:12;:168::i;:::-;15487:206;-1:-1:-1;15712:31:57;;15708:301;;15763:25;15791:149;15855:18;15895:27;15791:42;:149::i;:::-;15763:177;;15959:35;15976:17;15959:16;:35::i;:::-;15708:301;;15198:821;;;16029:54;16049:10;16061:21;16029:19;:54::i;1437:126:10:-;1484:28;1492:9;1484:28;:7;:28::i;1066:243:2:-;1140:4;1245:1;1231:4;:11;:15;:71;;;;;1003:3;1250:52;;1261:4;1250:25;;;;;;;;;;;;:::i;:::-;:52;;;;1066:243;-1:-1:-1;;1066:243:2:o;4531:119:30:-;4588:55;4597:16;:14;:16::i;:::-;12169:3:10;4588:8:30;:55::i;5268:399::-;5424:7;5433:16;5461:19;5483:27;:8;:25;:27::i;:::-;5461:49;;5521:27;5551:66;5582:8;5592:11;5605;5551:30;:66::i;:::-;5636:11;;;;-1:-1:-1;5268:399:30;;-1:-1:-1;;;;;5268:399:30:o;26094:164:28:-;26233:18;:16;:18::i;30111:354::-;30234:14;;30302:21;;30258:66;;30234:14;;30258:35;:66::i;:::-;30340:9;30335:124;30359:6;30355:1;:10;30335:124;;;30399:49;30418:7;30426:1;30418:10;;;;;;;;;;;;;;30430:14;30445:1;30430:17;;;;;;;;;;;;;;30399:18;:49::i;:::-;30386:7;30394:1;30386:10;;;;;;;;;;;;;;;;;:62;30367:3;;30335:124;;3934:104:26;4010:21;4016:6;4024;4010:5;:21::i;2038:157:36:-;2100:7;2126:62;:5;2100:7;1895:2;2126:16;:62::i;2275:149::-;2333:7;2359:58;:5;1703:2;;2359:16;:58::i;3015:234::-;3076:16;3094:15;3132:18;3144:5;3132:11;:18::i;:::-;3121:29;-1:-1:-1;3170:72:36;:5;1841:3;1951:2;3170:16;:72::i;:::-;3160:82;;3015:234;;;:::o;31895:356:28:-;32022:14;;32090:21;;32046:66;;32022:14;;32046:35;:66::i;:::-;32128:9;32123:122;32147:6;32143:1;:10;32123:122;;;32187:47;32204:7;32212:1;32204:10;;;;;;;;;;;;;;32216:14;32231:1;32216:17;;;;;;;;;;;;;;32187:16;:47::i;:::-;32174:7;32182:1;32174:10;;;;;;;;;;;;;;;;;:60;32155:3;;32123:122;;4998:6138:57;5183:7;5192;6628:30;6672:37;6723:28;6764:47;6785:8;6795:15;6764:20;:47::i;:::-;6614:197;;;;;;9748:35;9812:25;9787:22;:50;9786:133;;9918:1;9786:133;;;9878:25;9853:22;:50;9786:133;9748:171;;9929:42;10007:22;9975:29;:54;9974:141;;10114:1;9974:141;;;10077:22;10045:29;:54;9974:141;9929:186;;10461:33;10497:140;10576:51;4359:1:17;10576:29:57;:51::i;:::-;10497:57;:27;10533:20;10497:35;:57::i;:::-;:65;;:140::i;:::-;10461:176;;10648:31;10682:148;10768:52;4446:1:17;10768:29:57;:52::i;:::-;10682:64;:34;10725:20;10682:42;:64::i;:148::-;11055:51;;;;;11108:20;;-1:-1:-1;4998:6138:57;;-1:-1:-1;;;;;;;;;4998:6138:57:o;32257:488:28:-;32315:11;32712:10;:8;:10::i;:::-;-1:-1:-1;;;;;32712:24:28;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16696:183:59:-;16793:4;16816:56;:23;16851:20;16816:34;:56::i;11142:2145:57:-;11284:30;11328:37;11379:28;11602:142;11646:15;11675:36;11696:8;11706:4;11675:20;:36::i;:::-;11602:30;:142::i;:::-;11577:167;;11956:20;:18;:20::i;:::-;11952:1329;;;12294:57;12325:15;12342:8;12294:30;:57::i;:::-;12262:89;;12388:29;12365:52;;11952:1329;;;12438:21;:19;:21::i;:::-;12434:847;;;12672:22;12640:54;;12731:57;12762:15;12779:8;12731:30;:57::i;:::-;12708:80;;12434:847;;;13008:167;13056:15;13089:37;13110:8;13120:5;13089:20;:37::i;13008:167::-;12976:199;;13213:57;13244:15;13261:8;13213:30;:57::i;:::-;13190:80;;11142:2145;;;;;:::o;5949:143:46:-;6054:14;2246:10;6046:33;;;6045:40;;5949:143::o;3286:1706:57:-;3500:7;3521:16;3551:7;3584:21;3607:25;3636:44;3661:18;3636:24;:44::i;:::-;3583:97;;;;3854:43;3911;3967:89;4003:8;4013:15;4030:25;3967:35;:89::i;:::-;3840:216;;;;4369:25;4397:128;4453:13;4480:35;4397:42;:128::i;:::-;4369:156;-1:-1:-1;4540:21:57;;4536:87;;4577:35;4594:17;4577:16;:35::i;:::-;4904:33;;;;;4939:8;;-1:-1:-1;4904:33:57;;-1:-1:-1;3286:1706:57;-1:-1:-1;;;;;3286:1706:57:o;3803:419:41:-;3963:13;;;3973:2;3963:13;;;;;;;;;3914:12;;;;3963:13;;;;;;;;;;;-1:-1:-1;3963:13:41;3938:38;;4092:1;4087:2;4076:9;4072:18;4065:29;4134:1;4129:2;4118:9;4114:18;4107:29;4177:1;4172:2;4161:9;4157:18;4149:30;4206:9;3803:419;-1:-1:-1;;;;3803:419:41:o;1701:1214::-;1895:14;1912:28;1929:10;1912:16;:28::i;:::-;1895:45;;1950:66;1959:45;1977:7;1986:6;1994:9;1959:17;:45::i;:::-;2006:9;1950:8;:66::i;:::-;2487:63;2508:15;2496:8;:27;;12277:3:10;2487:8:41;:63::i;:::-;-1:-1:-1;;;;;;;;2884:19:41;;;;;;;:10;:19;;;;;:24;;2907:1;2884:24;;;-1:-1:-1;;1701:1214:41:o;7683:110:28:-;3257:3;7683:110;:::o;3818::26:-;3897:24;3903:9;3914:6;3897:5;:24::i;4570:149:51:-;-1:-1:-1;;;;;4685:18:51;;;4659:7;4685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;2386:188:50:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;16366:468:57:-;16618:181;16656:21;2543:1;2613:3;16618:20;:181::i;:::-;16497:106;16518:10;2613:3;2838:2;16497:20;:106::i;:::-;:302;16465:17;:334;16810:17;:15;:17::i;3870:94:51:-;3937:12;:20;3870:94::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;:51::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;7061:607:46;7197:44;7215:3;7206:6;:12;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;:27::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;1944:544:29:-;2032:4;1638:42;2053:10;:8;:10::i;:::-;-1:-1:-1;;;;;2053:29:29;;;2052:63;;;;;2087:28;2106:8;2087:18;:28::i;:::-;2048:434;;;2247:10;:8;:10::i;:::-;-1:-1:-1;;;;;2233:24:29;:10;-1:-1:-1;;;;;2233:24:29;;2226:31;;;;2048:434;2410:16;:14;:16::i;:::-;-1:-1:-1;;;;;2410:27:29;;2438:8;2448:7;2465:4;2410:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9409:124:28:-;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2628:355:47:-;2690:7;2709:38;2718:6;;;5318:1:10;2709:8:47;:38::i;:::-;2762:6;2758:219;;-1:-1:-1;2791:1:47;2784:8;;2758:219;945:4;2843:7;;;;2864:51;;2843:1;:7;:1;2873:13;;;;;:20;5366:1:10;2864:8:47;:51::i;:::-;2965:1;2953:9;:13;;;;;;2946:20;;;;;3181:2872:60;4328:15;;3316:7;;;;;4353:91;4377:9;4373:1;:13;4353:91;;;4413:20;4421:8;4430:1;4421:11;;;;;;;;;;;;;;4413:3;:7;;:20;;;;:::i;:::-;4407:26;-1:-1:-1;4388:3:60;;4353:91;;;-1:-1:-1;4457:8:60;4453:47;;4488:1;4481:8;;;;;;4453:47;4510:21;4591:3;4654:34;;;4510:21;4727:1262;4751:3;4747:1;:7;4727:1262;;;4789:9;4775:11;4813:216;4837:9;4833:1;:13;4813:216;;;4942:72;4955:24;4964:3;4969:9;4955:8;:24::i;:::-;4981:32;4990:8;4999:1;4990:11;;;;;;;;;;;;;;5003:9;4981:8;:32::i;:::-;4942:12;:72::i;:::-;4936:78;-1:-1:-1;4848:3:60;;4813:216;;;;5059:9;5043:25;;5095:622;5125:248;5235:88;5298:24;5307:3;5312:9;5298:8;:24::i;:::-;5235:58;5248:28;5257:13;5272:3;5248:8;:28::i;:::-;1372:3;5235:12;:58::i;:::-;:62;;:88::i;:::-;5346:9;5125:8;:248::i;:::-;5520:165;5633:30;5643:9;5655:1;5643:13;5659:3;5633:8;:30::i;:::-;5520:83;5533:53;1372:3;5543:13;:30;5576:9;5533:8;:53::i;5095:622::-;5083:634;;5748:13;5736:9;:25;5732:247;;;5814:1;5797:13;5785:9;:25;:30;5781:93;;5846:9;5839:16;;;;;;;;;;;5781:93;5732:247;;;5927:1;5914:9;5898:13;:25;:30;5894:85;;5955:9;5948:16;;;;;;;;;;;5894:85;-1:-1:-1;4756:3:60;;4727:1262;;;;5999:47;7757:3:10;5999:7:60;:47::i;:::-;3181:2872;;;;;;;;;:::o;1790:209:47:-;1852:7;1889:5;;;1904:57;1913:6;;;:26;;;1938:1;1933;1923:7;:11;;;;;;:16;1913:26;5269:1:10;1904:8:47;:57::i;:::-;945:4;1979:13;;;;-1:-1:-1;;;1790:209:47:o;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;2402:148;2464:7;2483:38;2492:6;;;5318:1:10;2483:8:49;:38::i;:::-;2542:1;2538;:5;;;;;;;2402:148;-1:-1:-1;;;2402:148:49:o;1470:619:35:-;1610:7;1984:98;1997:46;2006:11;2019:23;1997:8;:46::i;:::-;2045:36;:23;:34;:36::i;26392:134:28:-;26456:63;26480:26;:24;:26::i;:::-;26509:9;26456:15;:63::i;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;1364:158:2;1432:19;1492:4;1481:34;;;;;;;;;;;;:::i;5673:1420:30:-;5835:27;6856:16;6875:32;:11;6895;6875:19;:32::i;:::-;6856:51;;6945:8;:15;6931:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6931:30:30;;6918:43;;6976:9;6971:116;6995:8;:15;6991:1;:19;6971:116;;;7047:29;7067:8;7047;7056:1;7047:11;;;;;;;;;;;;;;:19;;:29;;;;:::i;:::-;7031:10;7042:1;7031:13;;;;;;;;;;;;;;;;;:45;7012:3;;6971:116;;;;5673:1420;;;;;;:::o;9200:411:51:-;9275:68;-1:-1:-1;;;;;9284:21:51;;;;10506:3:10;9275:8:51;:68::i;:::-;9354:49;9375:7;9392:1;9396:6;9354:20;:49::i;:::-;-1:-1:-1;;;;;9435:18:51;;:9;:18;;;;;;;;;;;:65;;9458:6;11950:3:10;9435:22:51;:65::i;:::-;-1:-1:-1;;;;;9414:18:51;;:9;:18;;;;;;;;;;:86;9510:42;9526:25;9544:6;9526:13;:11;:13::i;:::-;:17;;:25::i;:::-;9510:15;:42::i;:::-;9593:1;-1:-1:-1;;;;;9567:37:51;9576:7;-1:-1:-1;;;;;9567:37:51;;9597:6;9567:37;;;;;;:::i;:::-;;;;;;;;9200:411;;:::o;2989:682:47:-;3049:7;3068:38;3077:6;;;5318:1:10;3068:8:47;:38::i;:::-;3121:6;3117:548;;-1:-1:-1;3150:1:47;3143:8;;3117:548;945:4;3202:7;;;;3223:51;;3202:1;:7;:1;3232:13;;;3223:51;3648:1;3643;3631:9;:13;3630:19;;;;;;3653:1;3629:25;3622:32;;;;;9635:737:58;9827:15;;9763:16;;;9827:15;9888:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9888:36:58;;9852:72;;9940:9;9935:397;9959:21;9955:1;:25;9935:397;;;10001:20;10029:13;:11;:13::i;:::-;10024:1;:18;;:30;;10053:1;10024:30;;;10045:1;10049;10045:5;10024:30;10001:53;;10090:48;10125:12;10090:34;:48::i;:::-;:121;;;;10159:17;:51;;;;;10180:30;10197:12;10180:16;:30::i;:::-;10090:231;;10310:8;10319:1;10310:11;;;;;;;;;;;;;;10090:231;;;10230:61;10247:8;10256:1;10247:11;;;;;;;;;;;;;;10260:16;:30;10277:12;10260:30;;;;;;;;;;;;10230:16;:61::i;:::-;10068:16;10085:1;10068:19;;;;;;;;;;;;;;;;;:253;-1:-1:-1;9982:3:58;;9935:397;;;-1:-1:-1;10349:16:58;9635:737;-1:-1:-1;;;;9635:737:58:o;16049:98:59:-;16125:15;16049:98;:::o;15859:100::-;15936:16;15859:100;:::o;12340:261::-;12458:7;12467:16;12507:52;12525:18;12544:13;:11;:13::i;:::-;12525:33;;;;;;;;;;;;;;12507:17;:52::i;:::-;12561:32;12574:18;12561:12;:32::i;:::-;12499:95;;;;12340:261;;;:::o;3199:183:50:-;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;:::i;2921:876:41:-;3066:4;3082:60;3091:9;:16;3111:2;3091:22;12334:3:10;3082:8:41;:60::i;:::-;3427:4;3412:20;;;3406:27;3472:4;3457:20;;;3451:27;3525:4;3510:20;;3504:27;3579:26;;3153:9;3579:26;;;;;;;;;3406:27;;3451;;3496:36;;;3579:26;;;;3589:6;;3496:36;;3406:27;;3451;;3579:26;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3579:26:41;;;;;;-1:-1:-1;;;;;;;3728:30:41;;;;;;:61;;;3782:7;-1:-1:-1;;;;;3762:27:41;:16;-1:-1:-1;;;;;3762:27:41;;3728:61;3720:70;2921:876;-1:-1:-1;;;;;;;;2921:876:41:o;8583:297:51:-;8658:49;8687:1;8691:7;8700:6;8658:20;:49::i;:::-;8718:42;8734:25;8752:6;8734:13;:11;:13::i;8718:42::-;-1:-1:-1;;;;;8791:18:51;;:9;:18;;;;;;;;;;;:30;;8814:6;8791:22;:30::i;:::-;-1:-1:-1;;;;;8770:18:51;;:9;:18;;;;;;;;;;;:51;;;;8836:37;;8770:18;;:9;8836:37;;;;8866:6;;8836:37;:::i;3388:427:50:-;3790:9;;3765:44::o;3883:240:46:-;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;9206:210:58:-;9252:19;9274:17;:15;:17::i;:::-;9252:39;;9306:9;9301:109;9325:11;9321:1;:15;9301:109;;;9361:19;9378:1;9361:16;:19::i;:::-;9357:42;;;9382:17;9397:1;9382:14;:17::i;:::-;9338:3;;9301:109;;17664:525:57;18121:4;18148:34;18173:8;18148:24;:34::i;5813:112:47:-;5867:7;945:4;5894:1;:7;5893:25;;5917:1;5893:25;;;-1:-1:-1;945:4:47;5906:7;;5813:112::o;1404:121:54:-;1462:7;1488:30;1492:1;1495;5172::10;1488:3:54;:30::i;15593:175:59:-;15662:4;15685:76;:23;4198:1;15720:40;;15685:34;:76::i;10472:188:58:-;10552:7;10578:75;10591:37;10600:7;10609:18;:5;:16;:18::i;10591:37::-;10630:22;:5;:20;:22::i;17816:417:59:-;17886:7;18197:29;18215:10;18197:13;:11;:13::i;:::-;:17;;:29::i;11795:361::-;11866:16;11894:34;11962:1;11945:7;:14;:18;11931:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11931:33:59;;11894:70;;11979:9;11974:141;11998:17;:24;11994:1;:28;11974:141;;;12066:7;12078:13;:11;:13::i;:::-;12074:1;:17;:29;;12098:1;12102;12098:5;12074:29;;;12094:1;12074:29;12066:38;;;;;;;;;;;;;;12043:17;12061:1;12043:20;;;;;;;;;;;;;;;;;:61;12024:3;;11974:141;;;-1:-1:-1;12132:17:59;11795:361;-1:-1:-1;;11795:361:59:o;3871:161:58:-;3929:13;3945:23;;;:16;:23;;;;;;4004:21;3945:23;4004:19;:21::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;11381:220::-;11467:4;11503:52;11515:39;11503:11;:52::i;:::-;11491:8;:64;11490:104;;;;11560:34;11585:8;12437:4:28;12485:47;12497:34;12485:11;:47::i;:::-;12473:8;:59;12472:143;;;-1:-1:-1;12562:52:28;12574:39;12562:11;:52::i;:::-;12550:8;:64;12472:143;:193;;;-1:-1:-1;2562:4:29;12631:34:28;2494:103:29:o;301:707:-1:-;;418:3;411:4;403:6;399:17;395:27;385:2;;-1:-1;;426:12;385:2;473:6;460:20;29842:18;29834:6;29831:30;29828:2;;;-1:-1;;29864:12;29828:2;29909:4;;29901:6;29897:17;495:80;29909:4;29897:17;29962:15;495:80;:::i;:::-;603:21;;;486:89;-1:-1;660:14;;;635:17;;;740:27;;;;;737:36;-1:-1;734:2;;;786:1;;776:12;734:2;811:1;802:10;;796:206;821:6;818:1;815:13;796:206;;;2287:20;;889:50;;843:1;836:9;;;;;953:14;;;;981;;796:206;;1424:440;;1525:3;1518:4;1510:6;1506:17;1502:27;1492:2;;-1:-1;;1533:12;1492:2;1580:6;1567:20;30137:18;30129:6;30126:30;30123:2;;;-1:-1;;30159:12;30123:2;1602:64;30300:4;30232:9;1518:4;30217:6;30213:17;30209:33;30290:15;1602:64;:::i;:::-;1593:73;;1686:6;1679:5;1672:21;1790:3;30300:4;1781:6;1714;1772:16;;1769:25;1766:2;;;1807:1;;1797:12;1766:2;35049:6;30300:4;1714:6;1710:17;30300:4;1748:5;1744:16;35026:30;35105:1;35087:16;;;30300:4;35087:16;35080:27;1748:5;1485:379;-1:-1;;1485:379::o;2768:241::-;;2872:2;2860:9;2851:7;2847:23;2843:32;2840:2;;;-1:-1;;2878:12;2840:2;85:6;72:20;97:33;124:5;97:33;:::i;3016:366::-;;;3137:2;3125:9;3116:7;3112:23;3108:32;3105:2;;;-1:-1;;3143:12;3105:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3195:63;-1:-1;3295:2;3334:22;;72:20;97:33;72:20;97:33;:::i;:::-;3303:63;;;;3099:283;;;;;:::o;3389:491::-;;;;3527:2;3515:9;3506:7;3502:23;3498:32;3495:2;;;-1:-1;;3533:12;3495:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3585:63;-1:-1;3685:2;3724:22;;72:20;97:33;72:20;97:33;:::i;:::-;3489:391;;3693:63;;-1:-1;;;3793:2;3832:22;;;;2287:20;;3489:391::o;3887:991::-;;;;;;;;4091:3;4079:9;4070:7;4066:23;4062:33;4059:2;;;-1:-1;;4098:12;4059:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;4150:63;-1:-1;4250:2;4289:22;;72:20;97:33;72:20;97:33;:::i;:::-;4258:63;-1:-1;4358:2;4397:22;;2287:20;;-1:-1;4466:2;4505:22;;2287:20;;-1:-1;4574:3;4612:22;;2563:20;2588:31;2563:20;2588:31;:::i;:::-;4053:825;;;;-1:-1;4053:825;;;;4583:61;4681:3;4721:22;;1218:20;;-1:-1;4790:3;4830:22;;;1218:20;;4053:825;-1:-1;;4053:825::o;4885:366::-;;;5006:2;4994:9;4985:7;4981:23;4977:32;4974:2;;;-1:-1;;5012:12;4974:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5064:63;5164:2;5203:22;;;;2287:20;;-1:-1;;;4968:283::o;5258:502::-;;;5404:2;5392:9;5383:7;5379:23;5375:32;5372:2;;;-1:-1;;5410:12;5372:2;5468:17;5455:31;5506:18;5498:6;5495:30;5492:2;;;-1:-1;;5528:12;5492:2;5558:78;5628:7;5619:6;5608:9;5604:22;5558:78;:::i;:::-;5548:88;5673:2;5712:22;;;;2287:20;;-1:-1;;;;5366:394::o;5767:627::-;;;;5930:2;5918:9;5909:7;5905:23;5901:32;5898:2;;;-1:-1;;5936:12;5898:2;5994:17;5981:31;6032:18;6024:6;6021:30;6018:2;;;-1:-1;;6054:12;6018:2;6084:78;6154:7;6145:6;6134:9;6130:22;6084:78;:::i;:::-;6074:88;6199:2;6238:22;;2287:20;;-1:-1;6307:2;6346:22;;;2287:20;;5892:502;-1:-1;;;;5892:502::o;6401:257::-;;6513:2;6501:9;6492:7;6488:23;6484:32;6481:2;;;-1:-1;;6519:12;6481:2;1097:6;1091:13;35869:5;32664:13;32657:21;35847:5;35844:32;35834:2;;-1:-1;;35880:12;6665:1235;;;;;;;;6905:3;6893:9;6884:7;6880:23;6876:33;6873:2;;;-1:-1;;6912:12;6873:2;1231:6;1218:20;6964:63;;7064:2;7107:9;7103:22;72:20;97:33;124:5;97:33;:::i;:::-;7072:63;-1:-1;7172:2;7211:22;;72:20;97:33;72:20;97:33;:::i;:::-;7180:63;-1:-1;7308:2;7293:18;;7280:32;7332:18;7321:30;;;7318:2;;;-1:-1;;7354:12;7318:2;7384:78;7454:7;7445:6;7434:9;7430:22;7384:78;:::i;:::-;7374:88;;7499:3;7543:9;7539:22;2287:20;7508:63;;7608:3;7652:9;7648:22;2287:20;7617:63;;7745:3;7734:9;7730:19;7717:33;7703:47;;7332:18;7762:6;7759:30;7756:2;;;-1:-1;;7792:12;7756:2;;7822:62;7876:7;7867:6;7856:9;7852:22;7822:62;:::i;:::-;7812:72;;;6867:1033;;;;;;;;;;:::o;7907:239::-;;8010:2;7998:9;7989:7;7985:23;7981:32;7978:2;;;-1:-1;;8016:12;7978:2;1367:6;1354:20;32841:66;36115:5;32830:78;36091:5;36088:34;36078:2;;-1:-1;;36126:12;8153:303;;8288:2;8276:9;8267:7;8263:23;8259:32;8256:2;;;-1:-1;;8294:12;8256:2;1976:6;1970:13;1988:53;2035:5;1988:53;:::i;8741:500::-;;;8886:2;8874:9;8865:7;8861:23;8857:32;8854:2;;;-1:-1;;8892:12;8854:2;2148:6;2135:20;2160:48;2202:5;2160:48;:::i;:::-;8944:78;-1:-1;9087:2;9072:18;;9059:32;9111:18;9100:30;;9097:2;;;-1:-1;;9133:12;9097:2;9163:62;9217:7;9208:6;9197:9;9193:22;9163:62;:::i;:::-;9153:72;;;8848:393;;;;;:::o;9651:241::-;;9755:2;9743:9;9734:7;9730:23;9726:32;9723:2;;;-1:-1;;9761:12;9723:2;-1:-1;2287:20;;9717:175;-1:-1;9717:175::o;9899:263::-;;10014:2;10002:9;9993:7;9989:23;9985:32;9982:2;;;-1:-1;;10020:12;9982:2;-1:-1;2435:13;;9976:186;-1:-1;9976:186::o;10169:879::-;;;;;;10366:3;10354:9;10345:7;10341:23;10337:33;10334:2;;;-1:-1;;10373:12;10334:2;2300:6;2287:20;10425:63;;10553:2;10542:9;10538:18;10525:32;10577:18;10569:6;10566:30;10563:2;;;-1:-1;;10599:12;10563:2;10629:78;10699:7;10690:6;10679:9;10675:22;10629:78;:::i;:::-;10328:720;;10619:88;;-1:-1;;;;10744:2;10783:22;;2287:20;;10852:2;10891:22;;2287:20;;10960:3;11000:22;;;2287:20;;-1:-1;10328:720;-1:-1;10328:720::o;11055:366::-;;;11176:2;11164:9;11155:7;11151:23;11147:32;11144:2;;;-1:-1;;11182:12;11144:2;-1:-1;;2287:20;;;11334:2;11373:22;;;2287:20;;-1:-1;11138:283::o;11428:672::-;;;;;11594:3;11582:9;11573:7;11569:23;11565:33;11562:2;;;-1:-1;;11601:12;11562:2;2441:6;2435:13;11653:74;;11764:2;11818:9;11814:22;2435:13;11772:74;;11883:2;11937:9;11933:22;2435:13;11891:74;;12002:2;12056:9;12052:22;220:13;238:33;265:5;238:33;:::i;:::-;11556:544;;;;-1:-1;11556:544;;-1:-1;;11556:544::o;12107:259::-;;12220:2;12208:9;12199:7;12195:23;12191:32;12188:2;;;-1:-1;;12226:12;12188:2;2713:6;2707:13;2725:31;2750:5;2725:31;:::i;12373:395::-;;;12503:2;12491:9;12482:7;12478:23;12474:32;12471:2;;;-1:-1;;12509:12;12471:2;2713:6;2707:13;2725:31;2750:5;2725:31;:::i;:::-;12670:2;12720:22;;;;2435:13;12561:72;;2435:13;;-1:-1;;;12465:303::o;14181:690::-;;14374:5;30783:12;31607:6;31602:3;31595:19;31644:4;;31639:3;31635:14;14386:93;;31644:4;14550:5;30458:14;-1:-1;14589:260;14614:6;14611:1;14608:13;14589:260;;;14675:13;;15061:37;;13153:14;;;;31335;;;;14636:1;14629:9;14589:260;;;-1:-1;14855:10;;14305:566;-1:-1;;;;;14305:566::o;15765:343::-;;15907:5;30783:12;31607:6;31602:3;31595:19;-1:-1;35194:101;35208:6;35205:1;35202:13;35194:101;;;31644:4;35275:11;;;;;35269:18;35256:11;;;;;35249:39;35223:10;35194:101;;;35310:6;35307:1;35304:13;35301:2;;;-1:-1;31644:4;35366:6;31639:3;35357:16;;35350:27;35301:2;-1:-1;35647:2;35627:14;35643:7;35623:28;16064:39;;;;31644:4;16064:39;;15855:253;-1:-1;;15855:253::o;18403:387::-;15061:37;;;32841:66;32830:78;18654:2;18645:12;;15356:56;18754:11;;;18545:245::o;18797:291::-;;35049:6;35044:3;35039;35026:30;35087:16;;35080:27;;;35087:16;18941:147;-1:-1;18941:147::o;19095:659::-;17624:66;17604:87;;17589:1;17710:11;;15061:37;;;;19606:12;;;15061:37;19717:12;;;19340:414::o;19761:222::-;-1:-1;;;;;33213:54;;;;13252:37;;19888:2;19873:18;;19859:124::o;19990:412::-;20188:2;20202:47;;;30783:12;;20173:18;;;31595:19;;;19990:412;;20188:2;30458:14;;;;31635;;;;19990:412;13818:302;13843:6;13840:1;13837:13;13818:302;;;13904:13;;-1:-1;;;;;33213:54;16206:70;;31335:14;;;;12971;;;;13865:1;13858:9;13818:302;;;-1:-1;20255:137;;20159:243;-1:-1;;;;;;20159:243::o;20409:370::-;;20586:2;20607:17;20600:47;20661:108;20586:2;20575:9;20571:18;20755:6;20661:108;:::i;20786:629::-;;21041:2;21062:17;21055:47;21116:108;21041:2;21030:9;21026:18;21210:6;21116:108;:::i;:::-;21272:9;21266:4;21262:20;21257:2;21246:9;21242:18;21235:48;21297:108;21400:4;21391:6;21297:108;:::i;:::-;21289:116;21012:403;-1:-1;;;;;21012:403::o;21422:210::-;32664:13;;32657:21;14944:34;;21543:2;21528:18;;21514:118::o;21639:432::-;32664:13;;32657:21;14944:34;;21974:2;21959:18;;15061:37;;;;22057:2;22042:18;;15061:37;21816:2;21801:18;;21787:284::o;22078:222::-;15061:37;;;22205:2;22190:18;;22176:124::o;22307:444::-;15061:37;;;-1:-1;;;;;33213:54;;;22654:2;22639:18;;13252:37;33213:54;22737:2;22722:18;;13252:37;22490:2;22475:18;;22461:290::o;22758:780::-;15061:37;;;-1:-1;;;;;33213:54;;;23190:2;23175:18;;13252:37;33213:54;;;;23273:2;23258:18;;13252:37;23356:2;23341:18;;15061:37;23439:3;23424:19;;15061:37;;;;23523:3;23508:19;;15061:37;23025:3;23010:19;;22996:542::o;23545:668::-;15061:37;;;23949:2;23934:18;;15061:37;;;;24032:2;24017:18;;15061:37;;;;24115:2;24100:18;;15061:37;-1:-1;;;;;33213:54;24198:3;24183:19;;13252:37;23784:3;23769:19;;23755:458::o;24220:417::-;;15091:5;15068:3;15061:37;24393:2;24511;24500:9;24496:18;24489:48;24551:76;24393:2;24382:9;24378:18;24613:6;24551:76;:::i;24644:363::-;15061:37;;;-1:-1;;;;;33213:54;24993:2;24978:18;;16206:70;24814:2;24799:18;;24785:222::o;25014:548::-;15061:37;;;33429:4;33418:16;;;;25382:2;25367:18;;18356:35;25465:2;25450:18;;15061:37;25548:2;25533:18;;15061:37;25221:3;25206:19;;25192:370::o;26388:310::-;;26535:2;26556:17;26549:47;26610:78;26535:2;26524:9;26520:18;26674:6;26610:78;:::i;26705:416::-;26905:2;26919:47;;;17960:2;26890:18;;;31595:19;17996:17;31635:14;;;17976:38;18033:12;;;26876:245::o;27357:481::-;;15091:5;15068:3;15061:37;27562:2;27680;27669:9;27665:18;27658:48;27720:108;27562:2;27551:9;27547:18;27814:6;27720:108;:::i;27845:333::-;15061:37;;;28164:2;28149:18;;15061:37;28000:2;27985:18;;27971:207::o;28185:444::-;15061:37;;;28532:2;28517:18;;15061:37;;;;28615:2;28600:18;;15061:37;28368:2;28353:18;;28339:290::o;28636:556::-;15061:37;;;29012:2;28997:18;;15061:37;;;;29095:2;29080:18;;15061:37;29178:2;29163:18;;15061:37;28847:3;28832:19;;28818:374::o;29199:214::-;33429:4;33418:16;;;;18356:35;;29322:2;29307:18;;29293:120::o;29420:256::-;29482:2;29476:9;29508:17;;;29583:18;29568:34;;29604:22;;;29565:62;29562:2;;;29640:1;;29630:12;29562:2;29482;29649:22;29460:216;;-1:-1;29460:216::o;35664:117::-;-1:-1;;;;;35751:5;33213:54;35726:5;35723:35;35713:2;;35772:1;;35762:12;36594:113;33429:4;36677:5;33418:16;36654:5;36651:33;36641:2;;36698:1;;36688:12" + }, + "methodIdentifiers": { + "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL()": "ddf4627b", + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getGrowthInvariants(uint256[],uint256)": "ac392da6", + "getLastJoinExitData()": "3c975d51", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeePercentageCache(uint256)": "70464016", + "getProtocolFeesCollector()": "d2946c2b", + "getProtocolPoolOwnershipPercentage(uint256[],uint256,uint256)": "a27ff18a", + "getProtocolSwapFeeDelegation()": "15b0015b", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getTokenRate(address)": "54dea00a", + "getTokenRateCache(address)": "7f1260d1", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "payProtocolFeesBeforeJoinExit(uint256[],uint256,uint256)": "c37bb32c", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "setTokenRateCacheDuration(address,uint256)": "f4b7964d", + "setTotalSupply(uint256)": "f7ea7a3d", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a", + "updateInvariantAfterJoinExit(uint256,uint256[],uint256,uint256,uint256)": "64499362", + "updatePostJoinExit(uint256,uint256)": "f465d912", + "updateProtocolFeePercentageCache()": "0da0669c", + "updateTokenRateCache(address)": "2df2c7c0" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeePercentagesProvider\",\"name\":\"protocolFeeProvider\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"tokenRateProviders\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRateCacheDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"exemptFromYieldProtocolFeeFlags\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeePercentageCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"TokenRateCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRateProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cacheDuration\",\"type\":\"uint256\"}],\"name\":\"TokenRateProviderSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitAmp\",\"type\":\"uint256\"}],\"name\":\"getGrowthInvariants\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeGrowthInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalNonExemptGrowthInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalGrowthInvariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastJoinExitData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"lastJoinExitAmplification\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitInvariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feeType\",\"type\":\"uint256\"}],\"name\":\"getProtocolFeePercentageCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastJoinExitAmp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitInvariant\",\"type\":\"uint256\"}],\"name\":\"getProtocolPoolOwnershipPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolSwapFeeDelegation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRateCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expires\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"registeredBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastJoinExitAmp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastPostJoinExitInvariant\",\"type\":\"uint256\"}],\"name\":\"payProtocolFeesBeforeJoinExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"virtualSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setTokenRateCacheDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newSupply\",\"type\":\"uint256\"}],\"name\":\"setTotalSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentAmp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"preJoinExitInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preJoinExitSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postJoinExitSupply\",\"type\":\"uint256\"}],\"name\":\"updateInvariantAfterJoinExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"currentAmp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postJoinExitInvariant\",\"type\":\"uint256\"}],\"name\":\"updatePostJoinExit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateProtocolFeePercentageCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateTokenRateCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeePercentageCache(uint256)\":{\"details\":\"Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the ProtocolFeePercentagesProvider.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getProtocolSwapFeeDelegation()\":{\"details\":\"Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider.\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"getTokenRate(address)\":{\"details\":\"Returns the rate for a given token. All token rates are fixed-point values with 18 decimals. If there is no rate provider for the provided token, it returns FixedPoint.ONE.\"},\"getTokenRateCache(address)\":{\"details\":\"Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate provider.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"setTokenRateCacheDuration(address,uint256)\":{\"details\":\"Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. Note this function also updates the current cached value.\",\"params\":{\"duration\":\"Number of seconds until the current token rate is fetched again.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"},\"updateProtocolFeePercentageCache()\":{\"details\":\"Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated). Updates the cache to the latest value set by governance.\"},\"updateTokenRateCache(address)\":{\"details\":\"Forces a rate cache hit for a token. It will revert if the requested token does not have an associated rate provider.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getLastJoinExitData()\":{\"notice\":\"Return the amplification factor and invariant as of the most recent join or exit (including BPT swaps)\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockComposableStablePoolProtocolFees.sol\":\"MockComposableStablePoolProtocolFees\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol\":{\"keccak256\":\"0xf6fd47a273c8f275d115dac4d216acffd976573410a5f92e2dd8c1125ce3b134\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://41febf9d4bc242065cb96d9d1258e926bf1b4f4c36131964cbf0b4cdd5ce1f99\",\"dweb:/ipfs/QmbKk893VkGw3w49xWyQS8ehqdXxbL4sqNW6TcWMXRpnGu\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol\":{\"keccak256\":\"0x65f93b8bac780e69e0ec41db98645323401686649dc61f9fa24d015d11084dfe\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://46b2c14982f82375159bb984548fd3bf4764972dd5cc0b2d40de82d0f3ccd28f\",\"dweb:/ipfs/QmPYfeoLCDwwDE6TDNRrnSQWniMgwuZSNJQ2Ycm3uRuBPs\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol\":{\"keccak256\":\"0x81972e1a01bb50f6ebed2d0aaeea8044f59adfd3b08dc17233919b28c41e838b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://385cc839791c8db486aa8b53cd0791f98786e88379f981b898b163f0f4a68e37\",\"dweb:/ipfs/QmP6SNqUMKtwgQUXuZzQAmUjxVKvojudz7fRFBzhcXqGdp\"]},\"@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol\":{\"keccak256\":\"0x1130ae270fcca20807ddd46644d2b4dbff73484f3fca9b7bf927043a6c1acf09\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2c20940f2a3cb1c32ce122a769fb56517b3dd4c8f24c9288e53de83ec640666b\",\"dweb:/ipfs/Qma1AvNk3SjJeUuwyVjWqKqH2KCoVEAovjwfpnt8EsNeTN\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol\":{\"keccak256\":\"0x900f61d39cfbb66db432105fdd524892b4d36fd57021231a7a011ecf2e06d848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9853feb7f6ea54eed91e45cc9f833062a768365295c64867ac7e83926cb3a25\",\"dweb:/ipfs/Qmeo7jrEjenzBXQ8pSDj76CqVwHg9rhRZKiPfDpLuHk42Q\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePoolProtocolFees.sol\":{\"keccak256\":\"0x71f593c69691edcea6b6debecc9c0629676033f4eadb3a059b1f7286cacf812e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f4952f66e9a2e1c60573e3cef1e340ee067aa28fae2be88f39ef1f48afc96c8e\",\"dweb:/ipfs/QmP6sKJV93SQYoPuxJRAhasxMPzuXz2G2PeA6DRhuThLFE\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/test/MockComposableStablePoolProtocolFees.sol\":{\"keccak256\":\"0xeefdd1c1b07dbdfe37ebcab623ba2192749cbf71870fbb3393cea10447829f44\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6b09f94808390ac2c5972125e710309e6551a92eaacc9af075294ff2b0f70835\",\"dweb:/ipfs/QmcrodNEqscBs8EdoSPzhaJF79Qfnf168h1XLtCw1yRLFG\"]}},\"version\":1}" + } + }, + "contracts/test/MockComposableStablePoolRates.sol": { + "MockComposableStablePoolRates": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "contract IRateProvider[]", + "name": "tokenRateProviders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenRateCacheDurations", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rate", + "type": "uint256" + } + ], + "name": "TokenRateCacheUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRateProvider", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cacheDuration", + "type": "uint256" + } + ], + "name": "TokenRateProviderSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "cacheTokenRateIfNecessary", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cacheTokenRatesIfNecessary", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "ignoreExemptFlags", + "type": "bool" + } + ], + "name": "getAdjustedBalances", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "getTokenRateCache", + "outputs": [ + { + "internalType": "uint256", + "name": "rate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oldRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expires", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setTokenRateCacheDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOldRates", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "updateTokenRateCache", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6104a06040523480156200001257600080fd5b5060405162004f1338038062004f13833981810160405260c08110156200003857600080fd5b8151602083018051604051929492938301929190846401000000008211156200006057600080fd5b9083019060208201858111156200007657600080fd5b82518660208202830111640100000000821117156200009457600080fd5b82525081516020918201928201910280838360005b83811015620000c3578181015183820152602001620000a9565b5050505090500160405260200180516040519392919084640100000000821115620000ed57600080fd5b9083019060208201858111156200010357600080fd5b82518660208202830111640100000000821117156200012157600080fd5b82525081516020918201928201910280838360005b838110156200015057818101518382015260200162000136565b50505050905001604052602001805160405193929190846401000000008211156200017a57600080fd5b9083019060208201858111156200019057600080fd5b8251866020820283011164010000000082111715620001ae57600080fd5b82525081516020918201928201910280838360005b83811015620001dd578181015183820152602001620001c3565b50505050905001604052602001805160405193929190846401000000008211156200020757600080fd5b9083019060208201858111156200021d57600080fd5b82518660208202830111640100000000821117156200023b57600080fd5b82525081516020918201928201910280838360005b838110156200026a57818101518382015260200162000250565b50505050919091016040818152602093840151606080840183528b84529483018a9052818301899052815194850190915294509250819050620002ae883062000f14565b8152602001868152602001848152508760006040518060400160405280601581526020017f4d6f636b537461626c65506f6f6c53746f726167650000000000000000000000815250604051806040016040528060088152602001671353d0d2d7d0941560c21b815250620003298b3062000f1460201b60201c565b8b516001016001600160401b03811180156200034457600080fd5b506040519080825280602002602001820160405280156200036f578160200160208202803683370190505b5064e8d4a510006000808b828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b81525087878160039080519060200190620003c392919062001612565b508051620003d990600490602084019062001612565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b1661012052506200045790506276a700831115610194620010ae565b6200046b62278d00821115610195620010ae565b42909101610140819052016101605285516200048d906002111560c8620010ae565b620004a76200049b620010c3565b8751111560c9620010ae565b620004bd86620010c860201b62001a5b1760201c565b620004c884620010d4565b60008a6001600160a01b03166309b2760f8b6040518263ffffffff1660e01b815260040180826002811115620004fa57fe5b8152602001915050602060405180830381600087803b1580156200051d57600080fd5b505af115801562000532573d6000803e3d6000fd5b505050506040513d60208110156200054957600080fd5b5051604051633354e3e960e11b8152600481018281526060602483019081528a5160648401528a519394506001600160a01b038f16936366a9c7d29386938d938d93919290916044820191608401906020878101910280838360005b83811015620005bf578181015183820152602001620005a5565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101562000600578181015183820152602001620005e6565b5050505090500195505050505050600060405180830381600087803b1580156200062957600080fd5b505af11580156200063e573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200068557600080fd5b505afa1580156200069a573d6000803e3d6000fd5b505050506040513d6020811015620006b157600080fd5b505160601b6001600160601b0319166101a05250508951519850620006e797505060028811955060c89450620010ae9350505050565b6200070c600182038360200151518460400151516200116160201b62001a651760201c565b6101c0819052815180516000906200072057fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200075757fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b8152505081600001516002815181106200078e57fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620007c4576000620007dd565b815180516003908110620007d457fe5b60200260200101515b60601b6001600160601b0319166102605260048111620007ff57600062000818565b8151805160049081106200080f57fe5b60200260200101515b60601b6001600160601b03191661028052600581116200083a57600062000853565b8151805160059081106200084a57fe5b60200260200101515b60601b6001600160601b0319166102a052815180516200088c91906000906200087857fe5b60200260200101516200118160201b60201c565b6102c05281518051620008a6919060019081106200087857fe5b6102e05281518051620008c0919060029081106200087857fe5b6103005260038111620008d5576000620008eb565b620008eb82600001516003815181106200087857fe5b61032052600481116200090057600062000916565b6200091682600001516004815181106200087857fe5b61034052600581116200092b57600062000941565b6200094182600001516005815181106200087857fe5b61036052815151600019015b6000811180156200097e575082518051309190839081106200096b57fe5b60200260200101516001600160a01b0316115b156200098e57600019016200094d565b6101e08190528251516060906001600160401b0381118015620009b057600080fd5b50604051908082528060200260200182016040528015620009db578160200160208202803683370190505b50905060008080805b87515181101562000bfe578581101562000b1a578760200151818151811062000a0957fe5b602002602001015185828151811062000a1e57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000a8760006001600160a01b031686838151811062000a5a57fe5b60200260200101516001600160a01b0316141582600601866200124960201b62001a82179092919060201c565b93508760400151818151811062000a9a57fe5b60200260200101511562000b0f5762000ae660006001600160a01b031686838151811062000ac457fe5b60200260200101516001600160a01b03161415610155620010ae60201b60201c565b62000b03600182866200124960201b62001a82179092919060201c565b93506001925062000b14565b600191505b62000bf5565b85811462000bf5578760200151600182038151811062000b3657fe5b602002602001015185828151811062000b4b57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000b8760006001600160a01b031686838151811062000a5a57fe5b93508760400151600182038151811062000b9d57fe5b60200260200101511562000bf05762000bc760006001600160a01b031686838151811062000ac457fe5b62000be4600182866200124960201b62001a82179092919060201c565b93506001925062000bf5565b600191505b600101620009e4565b50811560f890811b610460528115901b610480528351849060009062000c2057fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b815250508360018151811062000c5357fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b815250508360028151811062000c8657fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b81525050600384511162000cbd57600062000cd4565b8360038151811062000ccb57fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000cf757600062000d0e565b8360048151811062000d0557fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000d3157600062000d48565b8360058151811062000d3f57fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000d8b9550929350919062001161811b62001a6517901c565b805160609062000d9c903062000f14565b8051909150600019015b60008111801562000ddc5750306001600160a01b031682828151811062000dc957fe5b60200260200101516001600160a01b0316115b1562000dec576000190162000da6565b6000805b84515181101562000f03578281141562000e0957600191505b60208501518051828401916000918490811062000e2257fe5b60200260200101516001600160a01b03161462000ef95762000e7c818760200151848151811062000e4f57fe5b60200260200101518860400151858151811062000e6857fe5b60200260200101516200127260201b60201c565b8560200151828151811062000e8d57fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000ed157fe5b60200260200101516040518082815260200191505060405180910390a362000ef98162001359565b5060010162000df0565b5050505050505050505050620016ae565b606082516001016001600160401b038111801562000f3157600080fd5b5060405190808252806020026020018201604052801562000f5c578160200160208202803683370190505b50905082516000141562000f9f57818160008151811062000f7957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620010a8565b82515b60008111801562000fdb5750826001600160a01b031684600183038151811062000fc857fe5b60200260200101516001600160a01b0316115b15620010285783600182038151811062000ff157fe5b60200260200101518282815181106200100657fe5b6001600160a01b03909216602092830291909101909101526000190162000fa2565b60005b8181101562001077578481815181106200104157fe5b60200260200101518382815181106200105657fe5b6001600160a01b03909216602092830291909101909101526001016200102b565b50828282815181106200108657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b81620010bf57620010bf8162001398565b5050565b600690565b80620010bf81620013ad565b620010ed620010e262001434565b82101560cb620010ae565b62001106620010fb6200143d565b82111560ca620010ae565b620011288160c0603f6008546200144960201b62001aa917909392919060201c565b6008556040805182815290517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9181900360200190a150565b6200117c82841480156200117457508183145b6067620010ae565b505050565b60006001600160a01b038216301415620011a55750670de0b6b3a764000062001244565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620011e157600080fd5b505afa158015620011f6573d6000803e3d6000fd5b505050506040513d60208110156200120d57600080fd5b505160ff16905060006200122f6012836200146e602090811b62001acc17901c565b905080600a0a670de0b6b3a764000002925050505b919050565b60006001821b19841682846200126157600062001264565b60015b60ff16901b17949350505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015620012ae57600080fd5b505afa158015620012c3573d6000803e3d6000fd5b505050506040513d6020811015620012da57600080fd5b50516000858152600960209081526040909120549192506200130b9082908490869062001ae262001486821b17901c565b600086815260096020908152604091829020929092558051848152905187927fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac928290030190a25050505050565b600081815260096020908152604090912054906200138290829062001b22620014e2821b17901c565b6000928352600960205260409092209190915550565b620013aa816210905360ea1b6200150d565b50565b600281511015620013be57620013aa565b600081600081518110620013ce57fe5b602002602001015190506000600190505b82518110156200117c576000838281518110620013f857fe5b6020026020010151905062001429816001600160a01b0316846001600160a01b0316106065620010ae60201b60201c565b9150600101620013df565b64e8d4a5100090565b67016345785d8a000090565b6000620014588484846200156e565b506001901b60001901811b1992909216911b1790565b600062001480838311156001620010ae565b50900390565b60006200149b606084901c15610149620010ae565b620014da42830160e06020620014c48660c083838c8c6000606062001aa962001449871b17861c565b6200144960201b62001aa917909392919060201c565b949350505050565b6000620010a8620014f383620015c9565b606080856200144960201b62001aa917909392919060201c565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6200157f61010083106064620010ae565b620015b860018210158015620015b05750620015ac60ff8461010003620015e960201b62001b3a1760201c565b8211155b6064620010ae565b6200117c83821c156101b4620010ae565b6000620010a860006060846200160360201b62001b50179092919060201c565b6000818310620015fa5781620015fc565b825b9392505050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200165557805160ff191683800117855562001685565b8280016001018555821562001685579182015b828111156200168557825182559160200191906001019062001668565b506200169392915062001697565b5090565b5b8082111562001693576000815560010162001698565b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6136df62001834600039505080612a3f52806132ce525080611fca525080611f9a525080611f6a525080611f3a525080611f0a525080611eda525080612f0f525080612edf525080612eaf525080612e7f525080612e4f525080612e1f525080611cad525080611c6b525080611c29525080611be7525080611ba5525080611b6352508061154b525080611eae525080611782525080611293525080611df1525080611dcd52508061163c525080611618525080611585525080612c71525080612cb3525080612c9252506136df6000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c80637f1260d1116101a7578063aaabadc5116100ee578063d329c63d11610097578063dd62ed3e11610071578063dd62ed3e14610f99578063ed24911d14610fc7578063f4b7964d14610fcf57610315565b8063d329c63d14610dea578063d505accf14610df2578063d5c096c414610e4357610315565b8063b7b814fc116100c8578063b7b814fc14610d35578063bb2a71ac14610d3d578063d2946c2b14610de257610315565b8063aaabadc514610cff578063ab7759f114610d07578063b35056b814610d2d57610315565b80638d928af811610150578063a457c2d71161012a578063a457c2d714610c9f578063a9059cbb14610ccb578063aa51a57014610cf757610315565b80638d928af814610c6957806390193b7c14610c7157806395d89b4114610c9757610315565b8063851c1bb311610181578063851c1bb314610ab057806387ec681714610aef578063893d20e814610c4557610315565b80637f1260d114610a5457806382687a5614610aa05780638456cb5914610aa857610315565b806338e9922e1161026b57806354dea00a1161021457806370a08231116101ee57806370a082311461081957806374f3b0091461083f5780637ecebe0014610a2e57610315565b806354dea00a1461063a57806355c67628146106605780636028bfd41461066857610315565b80633f4ba83a116102455780633f4ba83a1461057457806350dd6ed91461057c57806354a844ba1461063257610315565b806338e9922e1461052357806338fff2d014610540578063395093511461054857610315565b80631dd746ea116102cd5780632df2c7c0116102a75780632df2c7c0146104d7578063313ce567146104fd5780633644e5151461051b57610315565b80631dd746ea14610441578063238a2d591461049957806323b872dd146104a157610315565b8063095ea7b3116102fe578063095ea7b3146103bf57806318160ddd146103ff5780631c0de0511461041957610315565b80630664f37b1461031a57806306fdde0314610342575b600080fd5b6103406004803603602081101561033057600080fd5b50356001600160a01b0316610ffb565b005b61034a61100f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038457818101518382015260200161036c565b50505050905090810190601f1680156103b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103eb600480360360408110156103d557600080fd5b506001600160a01b0381351690602001356110a5565b604080519115158252519081900360200190f35b6104076110bc565b60408051918252519081900360200190f35b6104216110c2565b604080519315158452602084019290925282820152519081900360600190f35b6104496110eb565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048557818101518382015260200161046d565b505050509050019250505060405180910390f35b6104496110fa565b6103eb600480360360608110156104b757600080fd5b506001600160a01b03813581169160208101359091169060400135611195565b610340600480360360208110156104ed57600080fd5b50356001600160a01b0316611209565b610505611265565b6040805160ff9092168252519081900360200190f35b61040761126e565b6103406004803603602081101561053957600080fd5b5035611278565b610407611291565b6103eb6004803603604081101561055e57600080fd5b506001600160a01b0381351690602001356112b5565b6103406112f0565b6103406004803603604081101561059257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105bd57600080fd5b8201836020820111156105cf57600080fd5b803590602001918460018302840111640100000000831117156105f157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611304945050505050565b610340611322565b6104076004803603602081101561065057600080fd5b50356001600160a01b0316611334565b61040761134f565b6107be600480360360e081101561067e57600080fd5b8135916001600160a01b036020820135811692604083013590911691908101906080810160608201356401000000008111156106b957600080fd5b8201836020820111156106cb57600080fd5b803590602001918460208302840111640100000000831117156106ed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929584359560208601359591945092506060810191506040013564010000000081111561074957600080fd5b82018360208201111561075b57600080fd5b8035906020019184600183028401116401000000008311171561077d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611362945050505050565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156108045781810151838201526020016107ec565b50505050905001935050505060405180910390f35b6104076004803603602081101561082f57600080fd5b50356001600160a01b0316611399565b610995600480360360e081101561085557600080fd5b8135916001600160a01b0360208201358116926040830135909116919081019060808101606082013564010000000081111561089057600080fd5b8201836020820111156108a257600080fd5b803590602001918460208302840111640100000000831117156108c457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929584359560208601359591945092506060810191506040013564010000000081111561092057600080fd5b82018360208201111561093257600080fd5b8035906020019184600183028401116401000000008311171561095457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113b4945050505050565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156109d95781810151838201526020016109c1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610a18578181015183820152602001610a00565b5050505090500194505050505060405180910390f35b61040760048036036020811015610a4457600080fd5b50356001600160a01b03166114dc565b610a7a60048036036020811015610a6a57600080fd5b50356001600160a01b03166114e7565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610407611549565b61034061156d565b61040760048036036020811015610ac657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661157f565b6107be600480360360e0811015610b0557600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135640100000000811115610b4057600080fd5b820183602082011115610b5257600080fd5b80359060200191846020830284011164010000000083111715610b7457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295843595602086013595919450925060608101915060400135640100000000811115610bd057600080fd5b820183602082011115610be257600080fd5b80359060200191846001830284011164010000000083111715610c0457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115f0945050505050565b610c4d611616565b604080516001600160a01b039092168252519081900360200190f35b610c4d61163a565b61040760048036036020811015610c8757600080fd5b50356001600160a01b031661165e565b61034a611679565b6103eb60048036036040811015610cb557600080fd5b506001600160a01b0381351690602001356116da565b6103eb60048036036040811015610ce157600080fd5b506001600160a01b038135169060200135611718565b610340611725565b610c4d61172d565b6103eb60048036036020811015610d1d57600080fd5b50356001600160a01b0316611737565b6103eb61174a565b61034061175b565b61044960048036036040811015610d5357600080fd5b810190602081018135640100000000811115610d6e57600080fd5b820183602082011115610d8057600080fd5b80359060200191846020830284011164010000000083111715610da257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505050351515905061176d565b610c4d611780565b6103406117a4565b610340600480360360e0811015610e0857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356117ac565b610995600480360360e0811015610e5957600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135640100000000811115610e9457600080fd5b820183602082011115610ea657600080fd5b80359060200191846020830284011164010000000083111715610ec857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295843595602086013595919450925060608101915060400135640100000000811115610f2457600080fd5b820183602082011115610f3657600080fd5b80359060200191846001830284011164010000000083111715610f5857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611867945050505050565b61040760048036036040811015610faf57600080fd5b506001600160a01b038135811691602001351661198a565b6104076119c7565b61034060048036036040811015610fe557600080fd5b506001600160a01b0381351690602001356119d1565b61100c61100782611b5f565b611cf8565b50565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561109b5780601f106110705761010080835404028352916020019161109b565b820191906000526020600020905b81548152906001019060200180831161107e57829003601f168201915b5050505050905090565b60006110b2338484611d4c565b5060015b92915050565b60025490565b60008060006110cf611dae565b1592506110da611dcb565b91506110e4611def565b9050909192565b60606110f5611e13565b905090565b60606000611106611eac565b905060608167ffffffffffffffff8111801561112157600080fd5b5060405190808252806020026020018201604052801561114b578160200160208202803683370190505b50905060005b8281101561118e5761116281611ed0565b82828151811061116e57fe5b6001600160a01b0390921660209283029190910190910152600101611151565b5091505090565b6000806111a2853361198a565b90506111c6336001600160a01b03871614806111be5750838210155b61019e611fee565b6111d1858585611ffc565b336001600160a01b038616148015906111ec57506000198114155b156111fe576111fe8533858403611d4c565b506001949350505050565b600061121482611b5f565b9050600061122182611ed0565b905061123a6001600160a01b0382161515610155611fee565b600082815260096020526040812054611252906120e4565b905061125f8383836120f3565b50505050565b60055460ff1690565b60006110f56119c7565b6112806121c5565b61128861220b565b61100c8161221e565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916110b29185906112eb9086612292565b611d4c565b6112f86121c5565b61130260006122a4565b565b61130c6121c5565b61131461220b565b61131e828261233e565b5050565b61132a6121c5565b61130260016124b8565b600061134761134283611b5f565b61250c565b90505b919050565b6008546000906110f59060c0603f611b50565b600060606113788651611373611eac565b61255f565b61138d8989898989898961256c6125d9612642565b97509795505050505050565b6001600160a01b031660009081526020819052604090205490565b606080886113de6113c361163a565b6001600160a01b0316336001600160a01b03161460cd611fee565b6113f36113e9611291565b82146101f4611fee565b60606000611400866127fc565b156114285761140d61282e565b61141f896114196110bc565b88612841565b9250905061147a565b61143061286d565b606061143a611e13565b90506114468a82612875565b61146a8d8d8d8d8d61145661174a565b611460578d611463565b60005b878e61256c565b9350915061147883826125d9565b505b6114848b826128de565b81895167ffffffffffffffff8111801561149d57600080fd5b506040519080825280602002602001820160405280156114c7578160200160208202803683370190505b509450945050505b5097509795505050505050565b60006113478261165e565b6000806000806000600960006114fc88611b5f565b8152602081019190915260400160002054905061151d811515610155611fee565b611526816128e8565b9450611531816128f6565b935061153c81612904565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6115756121c5565b61130260016122a4565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b600060606116018651611373611eac565b61138d8989898989898961256c612926612642565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561109b5780601f106110705761010080835404028352916020019161109b565b6000806116e7338561198a565b9050808310611701576116fc33856000611d4c565b61170e565b61170e3385858403611d4c565b5060019392505050565b60006110b2338484611ffc565b61130261298f565b60006110f56129c5565b600061134761174583611b5f565b612a38565b6008546000906110f59060ff612a60565b6117636121c5565b61130260006124b8565b60606117798383612a6a565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611302612b73565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886117db8c61165e565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506118528882611849878787612b9b565b886101f8612bda565b61185d888888611d4c565b5050505050505050565b606080886118766113c361163a565b6118816113e9611291565b61188961286d565b6060611893611e13565b905061189d6110bc565b61194a57600060606118b28d8d8d868b61256c565b915091506118cb6118c1612c31565b83101560cc611fee565b6118dd60006118d8612c31565b612c38565b6118f08b6118e9612c31565b8403612c38565b6118fa8184612926565b808a5167ffffffffffffffff8111801561191357600080fd5b5060405190808252806020026020018201604052801561193d578160200160208202803683370190505b50955095505050506114cf565b6119548882612875565b6000606061197c8d8d8d8d8d61196861174a565b611972578d611975565b60005b898e61256c565b915091506118f08b83612c38565b600061199461163a565b6001600160a01b0316826001600160a01b031614156119b657506000196110b6565b6119c08383612c42565b90506110b6565b60006110f5612c6d565b6119d96121c5565b60006119e483611b5f565b905060006119f182611ed0565b9050611a0a6001600160a01b0382161515610155611fee565b611a158282856120f3565b6040805184815290516001600160a01b0383169184917fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec49181900360200190a350505050565b8061131e81612d2b565b611a7d8284148015611a7657508183145b6067611fee565b505050565b60006001821b1984168284611a98576000611a9b565b60015b60ff16901b17949350505050565b6000611ab6848484612da4565b506001901b60001901811b1992909216911b1790565b6000611adc838311156001611fee565b50900390565b6000611af5606084901c15610149611fee565b611b1a42830160e06020611b128660c083838c8c60006060611aa9565b929190611aa9565b949350505050565b6000611347611b30836128e8565b8390606080611aa9565b6000818310611b495781611779565b5090919050565b6001901b6000190191901c1690565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ba35750600061134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611be55750600161134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c275750600261134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c695750600361134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611cab5750600461134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ced5750600561134a565b61134a610135612deb565b611d00611549565b811415611d0c5761100c565b600081815260096020526040902054801561131e57600080611d2d83612904565b915091508042111561125f5761125f84611d4686611ed0565b846120f3565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611db8611def565b4211806110f557505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60606000611e1f611eac565b905060608167ffffffffffffffff81118015611e3a57600080fd5b50604051908082528060200260200182016040528015611e64578160200160208202803683370190505b50905060005b8281101561118e57611e8d611e7e8261250c565b611e8783612e15565b90612f33565b828281518110611e9957fe5b6020908102919091010152600101611e6a565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611efe57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160011415611f2e57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160021415611f5e57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160031415611f8e57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160041415611fbe57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160051415611ced57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8161131e5761131e81612deb565b6120136001600160a01b0384161515610198611fee565b61202a6001600160a01b0383161515610199611fee565b612035838383611a7d565b6001600160a01b03831660009081526020819052604090205461205b90826101a0612f69565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461208a9082612292565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60006113478260c06020611b50565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b15801561212e57600080fd5b505afa158015612142573d6000803e3d6000fd5b505050506040513d602081101561215857600080fd5b5051600085815260096020526040902054909150612177818385611ae2565b600086815260096020908152604091829020929092558051848152905187927fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac928290030190a25050505050565b60006121f46000357fffffffff000000000000000000000000000000000000000000000000000000001661157f565b905061100c6122038233612f7f565b610191611fee565b611302612216611dae565b610192611fee565b612233612229613081565b82101560cb611fee565b61224861223e61308a565b82111560ca611fee565b600854612259908260c0603f611aa9565b6008556040805182815290517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9181900360200190a150565b60008282016117798482101583611fee565b80156122c4576122bf6122b5611dcb565b4210610193611fee565b6122d9565b6122d96122cf611def565b42106101a9611fee565b600780548215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116811790915560408051918252517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be649181900360200190a150565b6000612348611291565b9050600061235461163a565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060806040518083038186803b1580156123a857600080fd5b505afa1580156123bc573d6000803e3d6000fd5b505050506040513d60808110156123d257600080fd5b5060600151604080517f18e736d400000000000000000000000000000000000000000000000000000000815260048101858152602482019283528651604483015286519394506001600160a01b038516936318e736d4938793899392606490910190602085019080838360005b8381101561245757818101518382015260200161243f565b50505050905090810190601f1680156124845780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156124a457600080fd5b505af115801561185d573d6000803e3d6000fd5b6008546124c7908260ff611a82565b60085560408051821515815290517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c89181900360200190a18061100c5761100c611302565b6000612516611549565b82141561252c5750670de0b6b3a764000061134a565b600082815260096020526040902054801561254f5761254a816128e8565b611779565b670de0b6b3a76400009392505050565b61131e8183146067611fee565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f545f494d504c454d454e5445440000000000000000000000000000000000604482015290516000916060919081900360640190fd5b815181516125e890829061255f565b60005b8181101561125f5761262384828151811061260257fe5b602002602001015184838151811061261657fe5b6020026020010151613096565b84828151811061262f57fe5b60209081029190910101526001016125eb565b333014612736576000306001600160a01b0316600036604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146126a8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ad565b606091505b5050905080600081146126bc57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612718573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61273e61286d565b6060612748611e13565b90506127548782612875565b6000606061276c8c8c8c8c8c8c898d8d63ffffffff16565b9150915061277e81848663ffffffff16565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6000808251118015611347575060ff801682806020019051602081101561282257600080fd5b505160ff161492915050565b61130261283961174a565b6101b6611fee565b600060606000612850846130e7565b9050606061285f878784613109565b919791965090945050505050565b61130261220b565b8151815161288490829061255f565b60005b8181101561125f576128bf84828151811061289e57fe5b60200260200101518483815181106128b257fe5b6020026020010151612f33565b8482815181106128cb57fe5b6020908102919091010152600101612887565b61131e82826131b8565b600061134782826060611b50565b600061134782606080611b50565b600080612910836120e4565b915061291f8360e06020611b50565b9050915091565b8151815161293590829061255f565b60005b8181101561125f5761297084828151811061294f57fe5b602002602001015184838151811061296357fe5b6020026020010151613279565b84828151811061297c57fe5b6020908102919091010152600101612938565b6000612999611eac565b905060005b8181101561131e576129af816132c7565b156129bd576129bd816132f6565b60010161299e565b60006129cf61163a565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0757600080fd5b505afa158015612a1b573d6000803e3d6000fd5b505050506040513d6020811015612a3157600080fd5b5051905090565b60006113477f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b8151606090818167ffffffffffffffff81118015612a8757600080fd5b50604051908082528060200260200182016040528015612ab1578160200160208202803683370190505b50905060005b82811015612b6a576000612ac9611549565b821015612ad65781612adb565b816001015b9050612ae681612a38565b80612afd5750858015612afd5750612afd816132c7565b612b1a57868281518110612b0d57fe5b6020026020010151612b4a565b612b4a878381518110612b2957fe5b60200260200101516009600084815260200190815260200160002054613324565b838381518110612b5657fe5b602090810291909101015250600101612ab7565b50949350505050565b6000612b7d611eac565b905060005b8181101561131e57612b9381611cf8565b600101612b82565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612be585613349565b9050612bfb612bf58783876133b0565b83611fee565b612c0a428410156101b8611fee565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b620f424090565b61131e828261349b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612cda613535565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b600281511015612d3a5761100c565b600081600081518110612d4957fe5b602002602001015190506000600190505b8251811015611a7d576000838281518110612d7157fe5b60200260200101519050612d9a816001600160a01b0316846001600160a01b0316106065611fee565b9150600101612d5a565b612db361010083106064611fee565b612ddc60018210158015612dd55750612dd160ff8461010003611b3a565b8211155b6064611fee565b611a7d83821c156101b4611fee565b61100c817f42414c0000000000000000000000000000000000000000000000000000000000613539565b600081612e4357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160011415612e7357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160021415612ea357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160031415612ed357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160041415612f0357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160051415611ced57507f000000000000000000000000000000000000000000000000000000000000000061134a565b6000828202612f57841580612f50575083858381612f4d57fe5b04145b6003611fee565b670de0b6b3a764000090049392505050565b6000612f788484111583611fee565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612f9e611616565b6001600160a01b031614158015612fb95750612fb9836135b4565b15612fe157612fc6611616565b6001600160a01b0316336001600160a01b03161490506110b6565b612fe96129c5565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040180848152602001836001600160a01b03168152602001826001600160a01b03168152602001935050505060206040518083038186803b15801561304e57600080fd5b505afa158015613062573d6000803e3d6000fd5b505050506040513d602081101561307857600080fd5b505190506110b6565b64e8d4a5100090565b67016345785d8a000090565b60006130a58215156004611fee565b826130b2575060006110b6565b670de0b6b3a7640000838102906130d5908583816130cc57fe5b04146005611fee565b8281816130de57fe5b049150506110b6565b60008180602001905160408110156130fe57600080fd5b506020015192915050565b606060006131178385613096565b9050845167ffffffffffffffff8111801561313157600080fd5b5060405190808252806020026020018201604052801561315b578160200160208202803683370190505b50915060005b85518110156131af576131908287838151811061317a57fe5b6020026020010151612f3390919063ffffffff16565b83828151811061319c57fe5b6020908102919091010152600101613161565b50509392505050565b6131cf6001600160a01b038316151561019b611fee565b6131db82600083611a7d565b6001600160a01b03821660009081526020819052604090205461320190826101b2612f69565b6001600160a01b03831660009081526020819052604090205561323461322f826132296110bc565b906135f0565b6135fe565b6040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006132888215156004611fee565b82613295575060006110b6565b670de0b6b3a7640000838102906132af908583816130cc57fe5b8260018203816132bb57fe5b046001019150506110b6565b60006113477f000000000000000000000000000000000000000000000000000000000000000060068401612a60565b60008181526009602052604090205461330e81611b22565b6000928352600960205260409092209190915550565b600061177961333b84613336856128f6565b613603565b613344846128e8565b61361d565b6000613353612c6d565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60006133c282516041146101b9611fee565b60008060006020850151925060408501519150606085015160001a9050600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561343b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381161580159061348f5750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b6134a760008383611a7d565b6134bc61322f826134b66110bc565b90612292565b6001600160a01b0382166000908152602081905260409020546134df9082612292565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b4690565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b60006135df7ff4b7964d0000000000000000000000000000000000000000000000000000000061157f565b82148061134757506113478261363d565b600061177983836001612f69565b600255565b6000828202611779841580612f50575083858381612f4d57fe5b600061362c8215156004611fee565b81838161363557fe5b049392505050565b60006136687f38e9922e0000000000000000000000000000000000000000000000000000000061157f565b82148061369c57506136997f50dd6ed90000000000000000000000000000000000000000000000000000000061157f565b82145b806113475750600061134756fea26469706673582212204b8f97fce74fbee00f18daf87e5183f75bc9078e00e4d1fdf274df3a7fe5ec8164736f6c63430007010033", + "opcodes": "PUSH2 0x4A0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x4F13 CODESIZE SUB DUP1 PUSH3 0x4F13 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0xC0 DUP2 LT ISZERO PUSH3 0x38 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP4 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP3 SWAP5 SWAP3 SWAP4 DUP4 ADD SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x76 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xC3 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xA9 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0xED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x103 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x150 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x136 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x17A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x190 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x1AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x1DD JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x1C3 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD PUSH1 0x40 MSTORE PUSH1 0x20 ADD DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x207 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x23B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x26A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x250 JUMP JUMPDEST POP POP POP POP SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD MLOAD PUSH1 0x60 DUP1 DUP5 ADD DUP4 MSTORE DUP12 DUP5 MSTORE SWAP5 DUP4 ADD DUP11 SWAP1 MSTORE DUP2 DUP4 ADD DUP10 SWAP1 MSTORE DUP2 MLOAD SWAP5 DUP6 ADD SWAP1 SWAP2 MSTORE SWAP5 POP SWAP3 POP DUP2 SWAP1 POP PUSH3 0x2AE DUP9 ADDRESS PUSH3 0xF14 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE POP DUP8 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x15 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D6F636B537461626C65506F6F6C53746F726167650000000000000000000000 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x1353D0D2D7D09415 PUSH1 0xC2 SHL DUP2 MSTORE POP PUSH3 0x329 DUP12 ADDRESS PUSH3 0xF14 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP12 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x344 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x36F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH5 0xE8D4A51000 PUSH1 0x0 DUP1 DUP12 DUP3 DUP3 DUP10 DUP10 DUP14 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SHL DUP5 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP8 DUP8 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x3C3 SWAP3 SWAP2 SWAP1 PUSH3 0x1612 JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x3D9 SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0x1612 JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x100 MSTORE SWAP2 SWAP1 SHL AND PUSH2 0x120 MSTORE POP PUSH3 0x457 SWAP1 POP PUSH3 0x76A700 DUP4 GT ISZERO PUSH2 0x194 PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x46B PUSH3 0x278D00 DUP3 GT ISZERO PUSH2 0x195 PUSH3 0x10AE JUMP JUMPDEST TIMESTAMP SWAP1 SWAP2 ADD PUSH2 0x140 DUP2 SWAP1 MSTORE ADD PUSH2 0x160 MSTORE DUP6 MLOAD PUSH3 0x48D SWAP1 PUSH1 0x2 GT ISZERO PUSH1 0xC8 PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x4A7 PUSH3 0x49B PUSH3 0x10C3 JUMP JUMPDEST DUP8 MLOAD GT ISZERO PUSH1 0xC9 PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x4BD DUP7 PUSH3 0x10C8 PUSH1 0x20 SHL PUSH3 0x1A5B OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x4C8 DUP5 PUSH3 0x10D4 JUMP JUMPDEST PUSH1 0x0 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9B2760F DUP12 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH1 0x2 DUP2 GT ISZERO PUSH3 0x4FA JUMPI INVALID JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x51D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x532 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x549 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x40 MLOAD PUSH4 0x3354E3E9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 DUP2 MSTORE PUSH1 0x60 PUSH1 0x24 DUP4 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD PUSH1 0x64 DUP5 ADD MSTORE DUP11 MLOAD SWAP4 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND SWAP4 PUSH4 0x66A9C7D2 SWAP4 DUP7 SWAP4 DUP14 SWAP4 DUP14 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 PUSH1 0x44 DUP3 ADD SWAP2 PUSH1 0x84 ADD SWAP1 PUSH1 0x20 DUP8 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x5BF JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5A5 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0x600 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0x5E6 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP6 POP POP POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x629 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x63E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x180 DUP2 DUP2 MSTORE POP POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD2946C2B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x685 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x69A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x6B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x1A0 MSTORE POP POP DUP10 MLOAD MLOAD SWAP9 POP PUSH3 0x6E7 SWAP8 POP POP PUSH1 0x2 DUP9 GT SWAP6 POP PUSH1 0xC8 SWAP5 POP PUSH3 0x10AE SWAP4 POP POP POP POP JUMP JUMPDEST PUSH3 0x70C PUSH1 0x1 DUP3 SUB DUP4 PUSH1 0x20 ADD MLOAD MLOAD DUP5 PUSH1 0x40 ADD MLOAD MLOAD PUSH3 0x1161 PUSH1 0x20 SHL PUSH3 0x1A65 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH3 0x720 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x200 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x757 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x78E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x240 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP2 GT PUSH3 0x7C4 JUMPI PUSH1 0x0 PUSH3 0x7DD JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x3 SWAP1 DUP2 LT PUSH3 0x7D4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x260 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x7FF JUMPI PUSH1 0x0 PUSH3 0x818 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x4 SWAP1 DUP2 LT PUSH3 0x80F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x280 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x83A JUMPI PUSH1 0x0 PUSH3 0x853 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x5 SWAP1 DUP2 LT PUSH3 0x84A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x2A0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x88C SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x878 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x1181 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2C0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x8A6 SWAP2 SWAP1 PUSH1 0x1 SWAP1 DUP2 LT PUSH3 0x878 JUMPI INVALID JUMPDEST PUSH2 0x2E0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x8C0 SWAP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 LT PUSH3 0x878 JUMPI INVALID JUMPDEST PUSH2 0x300 MSTORE PUSH1 0x3 DUP2 GT PUSH3 0x8D5 JUMPI PUSH1 0x0 PUSH3 0x8EB JUMP JUMPDEST PUSH3 0x8EB DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x878 JUMPI INVALID JUMPDEST PUSH2 0x320 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x900 JUMPI PUSH1 0x0 PUSH3 0x916 JUMP JUMPDEST PUSH3 0x916 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0x878 JUMPI INVALID JUMPDEST PUSH2 0x340 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x92B JUMPI PUSH1 0x0 PUSH3 0x941 JUMP JUMPDEST PUSH3 0x941 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0x878 JUMPI INVALID JUMPDEST PUSH2 0x360 MSTORE DUP2 MLOAD MLOAD PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0x97E JUMPI POP DUP3 MLOAD DUP1 MLOAD ADDRESS SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH3 0x96B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x98E JUMPI PUSH1 0x0 NOT ADD PUSH3 0x94D JUMP JUMPDEST PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP3 MLOAD MLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x9B0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x9DB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0xBFE JUMPI DUP6 DUP2 LT ISZERO PUSH3 0xB1A JUMPI DUP8 PUSH1 0x20 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xA09 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xA1E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xA87 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xA5A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP3 PUSH1 0x6 ADD DUP7 PUSH3 0x1249 PUSH1 0x20 SHL PUSH3 0x1A82 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xA9A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0xB0F JUMPI PUSH3 0xAE6 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xAC4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x155 PUSH3 0x10AE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0xB03 PUSH1 0x1 DUP3 DUP7 PUSH3 0x1249 PUSH1 0x20 SHL PUSH3 0x1A82 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0xB14 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH3 0xBF5 JUMP JUMPDEST DUP6 DUP2 EQ PUSH3 0xBF5 JUMPI DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xB36 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xB4B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xB87 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xA5A JUMPI INVALID JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xB9D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0xBF0 JUMPI PUSH3 0xBC7 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0xAC4 JUMPI INVALID JUMPDEST PUSH3 0xBE4 PUSH1 0x1 DUP3 DUP7 PUSH3 0x1249 PUSH1 0x20 SHL PUSH3 0x1A82 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0xBF5 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH3 0x9E4 JUMP JUMPDEST POP DUP2 ISZERO PUSH1 0xF8 SWAP1 DUP2 SHL PUSH2 0x460 MSTORE DUP2 ISZERO SWAP1 SHL PUSH2 0x480 MSTORE DUP4 MLOAD DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0xC20 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x380 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0xC53 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0xC86 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3C0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP5 MLOAD GT PUSH3 0xCBD JUMPI PUSH1 0x0 PUSH3 0xCD4 JUMP JUMPDEST DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0xCCB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x3E0 MSTORE DUP4 MLOAD PUSH1 0x4 LT PUSH3 0xCF7 JUMPI PUSH1 0x0 PUSH3 0xD0E JUMP JUMPDEST DUP4 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0xD05 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x400 MSTORE DUP4 MLOAD PUSH1 0x5 LT PUSH3 0xD31 JUMPI PUSH1 0x0 PUSH3 0xD48 JUMP JUMPDEST DUP4 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0xD3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x420 MSTORE POP POP PUSH2 0x440 MSTORE POP POP DUP3 MLOAD MLOAD PUSH1 0x20 DUP1 DUP6 ADD MLOAD MLOAD PUSH1 0x40 DUP7 ADD MLOAD MLOAD PUSH3 0xD8B SWAP6 POP SWAP3 SWAP4 POP SWAP2 SWAP1 PUSH3 0x1161 DUP2 SHL PUSH3 0x1A65 OR SWAP1 SHR JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 PUSH3 0xD9C SWAP1 ADDRESS PUSH3 0xF14 JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xDDC JUMPI POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xDC9 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xDEC JUMPI PUSH1 0x0 NOT ADD PUSH3 0xDA6 JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP5 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0xF03 JUMPI DUP3 DUP2 EQ ISZERO PUSH3 0xE09 JUMPI PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD DUP1 MLOAD DUP3 DUP5 ADD SWAP2 PUSH1 0x0 SWAP2 DUP5 SWAP1 DUP2 LT PUSH3 0xE22 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH3 0xEF9 JUMPI PUSH3 0xE7C DUP2 DUP8 PUSH1 0x20 ADD MLOAD DUP5 DUP2 MLOAD DUP2 LT PUSH3 0xE4F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xE68 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0x1272 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP6 PUSH1 0x20 ADD MLOAD DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xE8D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 DUP9 PUSH1 0x40 ADD MLOAD DUP6 DUP2 MLOAD DUP2 LT PUSH3 0xED1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH3 0xEF9 DUP2 PUSH3 0x1359 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH3 0xDF0 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x16AE JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xF31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xF5C JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 MLOAD PUSH1 0x0 EQ ISZERO PUSH3 0xF9F JUMPI DUP2 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xF79 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x10A8 JUMP JUMPDEST DUP3 MLOAD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xFDB JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH3 0xFC8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x1028 JUMPI DUP4 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xFF1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x1006 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x0 NOT ADD PUSH3 0xFA2 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x1077 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x1041 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x1056 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH3 0x102B JUMP JUMPDEST POP DUP3 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x1086 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH3 0x10BF JUMPI PUSH3 0x10BF DUP2 PUSH3 0x1398 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST DUP1 PUSH3 0x10BF DUP2 PUSH3 0x13AD JUMP JUMPDEST PUSH3 0x10ED PUSH3 0x10E2 PUSH3 0x1434 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x1106 PUSH3 0x10FB PUSH3 0x143D JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x1128 DUP2 PUSH1 0xC0 PUSH1 0x3F PUSH1 0x8 SLOAD PUSH3 0x1449 PUSH1 0x20 SHL PUSH3 0x1AA9 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH3 0x117C DUP3 DUP5 EQ DUP1 ISZERO PUSH3 0x1174 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH3 0x10AE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0x11A5 JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH3 0x1244 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x11E1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x11F6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x120D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH3 0x122F PUSH1 0x12 DUP4 PUSH3 0x146E PUSH1 0x20 SWAP1 DUP2 SHL PUSH3 0x1ACC OR SWAP1 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA EXP PUSH8 0xDE0B6B3A7640000 MUL SWAP3 POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH3 0x1261 JUMPI PUSH1 0x0 PUSH3 0x1264 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x12AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x12C3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH3 0x12DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP2 SWAP3 POP PUSH3 0x130B SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP7 SWAP1 PUSH3 0x1AE2 PUSH3 0x1486 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 SLOAD SWAP1 PUSH3 0x1382 SWAP1 DUP3 SWAP1 PUSH3 0x1B22 PUSH3 0x14E2 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH3 0x13AA DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x150D JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH3 0x13BE JUMPI PUSH3 0x13AA JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0x13CE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0x117C JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x13F8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH3 0x1429 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH3 0x10AE PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH3 0x13DF JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1458 DUP5 DUP5 DUP5 PUSH3 0x156E JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1480 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH3 0x10AE JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x149B PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x14DA TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH3 0x14C4 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH3 0x1AA9 PUSH3 0x1449 DUP8 SHL OR DUP7 SHR JUMP JUMPDEST PUSH3 0x1449 PUSH1 0x20 SHL PUSH3 0x1AA9 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x10A8 PUSH3 0x14F3 DUP4 PUSH3 0x15C9 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP6 PUSH3 0x1449 PUSH1 0x20 SHL PUSH3 0x1AA9 OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH3 0x157F PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x15B8 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0x15B0 JUMPI POP PUSH3 0x15AC PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0x15E9 PUSH1 0x20 SHL PUSH3 0x1B3A OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0x10AE JUMP JUMPDEST PUSH3 0x117C DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0x10AE JUMP JUMPDEST PUSH1 0x0 PUSH3 0x10A8 PUSH1 0x0 PUSH1 0x60 DUP5 PUSH3 0x1603 PUSH1 0x20 SHL PUSH3 0x1B50 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0x15FA JUMPI DUP2 PUSH3 0x15FC JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x1655 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x1685 JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x1685 JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x1685 JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1668 JUMP JUMPDEST POP PUSH3 0x1693 SWAP3 SWAP2 POP PUSH3 0x1697 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x1693 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1698 JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH1 0x60 SHR PUSH2 0x220 MLOAD PUSH1 0x60 SHR PUSH2 0x240 MLOAD PUSH1 0x60 SHR PUSH2 0x260 MLOAD PUSH1 0x60 SHR PUSH2 0x280 MLOAD PUSH1 0x60 SHR PUSH2 0x2A0 MLOAD PUSH1 0x60 SHR PUSH2 0x2C0 MLOAD PUSH2 0x2E0 MLOAD PUSH2 0x300 MLOAD PUSH2 0x320 MLOAD PUSH2 0x340 MLOAD PUSH2 0x360 MLOAD PUSH2 0x380 MLOAD PUSH1 0x60 SHR PUSH2 0x3A0 MLOAD PUSH1 0x60 SHR PUSH2 0x3C0 MLOAD PUSH1 0x60 SHR PUSH2 0x3E0 MLOAD PUSH1 0x60 SHR PUSH2 0x400 MLOAD PUSH1 0x60 SHR PUSH2 0x420 MLOAD PUSH1 0x60 SHR PUSH2 0x440 MLOAD PUSH2 0x460 MLOAD PUSH1 0xF8 SHR PUSH2 0x480 MLOAD PUSH1 0xF8 SHR PUSH2 0x36DF PUSH3 0x1834 PUSH1 0x0 CODECOPY POP POP DUP1 PUSH2 0x2A3F MSTORE DUP1 PUSH2 0x32CE MSTORE POP DUP1 PUSH2 0x1FCA MSTORE POP DUP1 PUSH2 0x1F9A MSTORE POP DUP1 PUSH2 0x1F6A MSTORE POP DUP1 PUSH2 0x1F3A MSTORE POP DUP1 PUSH2 0x1F0A MSTORE POP DUP1 PUSH2 0x1EDA MSTORE POP DUP1 PUSH2 0x2F0F MSTORE POP DUP1 PUSH2 0x2EDF MSTORE POP DUP1 PUSH2 0x2EAF MSTORE POP DUP1 PUSH2 0x2E7F MSTORE POP DUP1 PUSH2 0x2E4F MSTORE POP DUP1 PUSH2 0x2E1F MSTORE POP DUP1 PUSH2 0x1CAD MSTORE POP DUP1 PUSH2 0x1C6B MSTORE POP DUP1 PUSH2 0x1C29 MSTORE POP DUP1 PUSH2 0x1BE7 MSTORE POP DUP1 PUSH2 0x1BA5 MSTORE POP DUP1 PUSH2 0x1B63 MSTORE POP DUP1 PUSH2 0x154B MSTORE POP DUP1 PUSH2 0x1EAE MSTORE POP DUP1 PUSH2 0x1782 MSTORE POP DUP1 PUSH2 0x1293 MSTORE POP DUP1 PUSH2 0x1DF1 MSTORE POP DUP1 PUSH2 0x1DCD MSTORE POP DUP1 PUSH2 0x163C MSTORE POP DUP1 PUSH2 0x1618 MSTORE POP DUP1 PUSH2 0x1585 MSTORE POP DUP1 PUSH2 0x2C71 MSTORE POP DUP1 PUSH2 0x2CB3 MSTORE POP DUP1 PUSH2 0x2C92 MSTORE POP PUSH2 0x36DF PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x315 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7F1260D1 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xAAABADC5 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xD329C63D GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xF99 JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0xFC7 JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0xFCF JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0xD329C63D EQ PUSH2 0xDEA JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0xDF2 JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0xE43 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0xB7B814FC GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0xD35 JUMPI DUP1 PUSH4 0xBB2A71AC EQ PUSH2 0xD3D JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0xDE2 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCFF JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0xD07 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0xD2D JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xC9F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xCCB JUMPI DUP1 PUSH4 0xAA51A570 EQ PUSH2 0xCF7 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xC69 JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0xC71 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0xC97 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xAB0 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0xAEF JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0xC45 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0xA54 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0xAA0 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0xAA8 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x38E9922E GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x54DEA00A GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x1EE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x819 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x83F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0xA2E JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x660 JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x668 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0x245 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x574 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x632 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x38E9922E EQ PUSH2 0x523 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x540 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x548 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA GT PUSH2 0x2CD JUMPI DUP1 PUSH4 0x2DF2C7C0 GT PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x4FD JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x51B JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x4A1 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x2FE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x419 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x664F37B EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x342 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFFB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x34A PUSH2 0x100F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x384 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x36C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH2 0x10BC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x421 PUSH2 0x10C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x449 PUSH2 0x10EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x485 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x46D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x449 PUSH2 0x10FA JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1195 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1209 JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1265 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH2 0x126E JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1278 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x55E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x12B5 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x12F0 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1304 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x340 PUSH2 0x1322 JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1334 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x7BE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x75B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x77D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1362 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x804 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7EC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x82F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1399 JUMP JUMPDEST PUSH2 0x995 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x920 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x932 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x13B4 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9D9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9C1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA18 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA00 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14DC JUMP JUMPDEST PUSH2 0xA7A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH2 0x1549 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x156D JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x157F JUMP JUMPDEST PUSH2 0x7BE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xB05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x15F0 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC4D PUSH2 0x163A JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x165E JUMP JUMPDEST PUSH2 0x34A PUSH2 0x1679 JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x16DA JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1718 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x1725 JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x172D JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1737 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x174A JUMP JUMPDEST PUSH2 0x340 PUSH2 0x175B JUMP JUMPDEST PUSH2 0x449 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP POP POP CALLDATALOAD ISZERO ISZERO SWAP1 POP PUSH2 0x176D JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x1780 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x17A4 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xE08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x17AC JUMP JUMPDEST PUSH2 0x995 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xE59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xEA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1867 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x198A JUMP JUMPDEST PUSH2 0x407 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xFE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x19D1 JUMP JUMPDEST PUSH2 0x100C PUSH2 0x1007 DUP3 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x1CF8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x109B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1070 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x109B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x107E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B2 CALLER DUP5 DUP5 PUSH2 0x1D4C JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x10CF PUSH2 0x1DAE JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x10DA PUSH2 0x1DCB JUMP JUMPDEST SWAP2 POP PUSH2 0x10E4 PUSH2 0x1DEF JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x10F5 PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1106 PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x114B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x118E JUMPI PUSH2 0x1162 DUP2 PUSH2 0x1ED0 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x116E JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1151 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x11A2 DUP6 CALLER PUSH2 0x198A JUMP JUMPDEST SWAP1 POP PUSH2 0x11C6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0x11BE JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x11D1 DUP6 DUP6 DUP6 PUSH2 0x1FFC JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x11EC JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x11FE JUMPI PUSH2 0x11FE DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1D4C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1214 DUP3 PUSH2 0x1B5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1221 DUP3 PUSH2 0x1ED0 JUMP JUMPDEST SWAP1 POP PUSH2 0x123A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1252 SWAP1 PUSH2 0x20E4 JUMP JUMPDEST SWAP1 POP PUSH2 0x125F DUP4 DUP4 DUP4 PUSH2 0x20F3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10F5 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x1280 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1288 PUSH2 0x220B JUMP JUMPDEST PUSH2 0x100C DUP2 PUSH2 0x221E JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x10B2 SWAP2 DUP6 SWAP1 PUSH2 0x12EB SWAP1 DUP7 PUSH2 0x2292 JUMP JUMPDEST PUSH2 0x1D4C JUMP JUMPDEST PUSH2 0x12F8 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x0 PUSH2 0x22A4 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x130C PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1314 PUSH2 0x220B JUMP JUMPDEST PUSH2 0x131E DUP3 DUP3 PUSH2 0x233E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x132A PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x1 PUSH2 0x24B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH2 0x1342 DUP4 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x250C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x10F5 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1378 DUP7 MLOAD PUSH2 0x1373 PUSH2 0x1EAC JUMP JUMPDEST PUSH2 0x255F JUMP JUMPDEST PUSH2 0x138D DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x256C PUSH2 0x25D9 PUSH2 0x2642 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x13DE PUSH2 0x13C3 PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x13F3 PUSH2 0x13E9 PUSH2 0x1291 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1400 DUP7 PUSH2 0x27FC JUMP JUMPDEST ISZERO PUSH2 0x1428 JUMPI PUSH2 0x140D PUSH2 0x282E JUMP JUMPDEST PUSH2 0x141F DUP10 PUSH2 0x1419 PUSH2 0x10BC JUMP JUMPDEST DUP9 PUSH2 0x2841 JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0x147A JUMP JUMPDEST PUSH2 0x1430 PUSH2 0x286D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x143A PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP PUSH2 0x1446 DUP11 DUP3 PUSH2 0x2875 JUMP JUMPDEST PUSH2 0x146A DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1456 PUSH2 0x174A JUMP JUMPDEST PUSH2 0x1460 JUMPI DUP14 PUSH2 0x1463 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x256C JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1478 DUP4 DUP3 PUSH2 0x25D9 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1484 DUP12 DUP3 PUSH2 0x28DE JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x149D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x14C7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 PUSH2 0x165E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x9 PUSH1 0x0 PUSH2 0x14FC DUP9 PUSH2 0x1B5F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x151D DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1526 DUP2 PUSH2 0x28E8 JUMP JUMPDEST SWAP5 POP PUSH2 0x1531 DUP2 PUSH2 0x28F6 JUMP JUMPDEST SWAP4 POP PUSH2 0x153C DUP2 PUSH2 0x2904 JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1575 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x1 PUSH2 0x22A4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1601 DUP7 MLOAD PUSH2 0x1373 PUSH2 0x1EAC JUMP JUMPDEST PUSH2 0x138D DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x256C PUSH2 0x2926 PUSH2 0x2642 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x109B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1070 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x109B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x16E7 CALLER DUP6 PUSH2 0x198A JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x1701 JUMPI PUSH2 0x16FC CALLER DUP6 PUSH1 0x0 PUSH2 0x1D4C JUMP JUMPDEST PUSH2 0x170E JUMP JUMPDEST PUSH2 0x170E CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1D4C JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B2 CALLER DUP5 DUP5 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x298F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10F5 PUSH2 0x29C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH2 0x1745 DUP4 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x2A38 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x10F5 SWAP1 PUSH1 0xFF PUSH2 0x2A60 JUMP JUMPDEST PUSH2 0x1763 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x0 PUSH2 0x24B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1779 DUP4 DUP4 PUSH2 0x2A6A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x2B73 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x17DB DUP13 PUSH2 0x165E JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1852 DUP9 DUP3 PUSH2 0x1849 DUP8 DUP8 DUP8 PUSH2 0x2B9B JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2BDA JUMP JUMPDEST PUSH2 0x185D DUP9 DUP9 DUP9 PUSH2 0x1D4C JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1876 PUSH2 0x13C3 PUSH2 0x163A JUMP JUMPDEST PUSH2 0x1881 PUSH2 0x13E9 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x1889 PUSH2 0x286D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1893 PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP PUSH2 0x189D PUSH2 0x10BC JUMP JUMPDEST PUSH2 0x194A JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x18B2 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x256C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x18CB PUSH2 0x18C1 PUSH2 0x2C31 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x18DD PUSH1 0x0 PUSH2 0x18D8 PUSH2 0x2C31 JUMP JUMPDEST PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x18F0 DUP12 PUSH2 0x18E9 PUSH2 0x2C31 JUMP JUMPDEST DUP5 SUB PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x18FA DUP2 DUP5 PUSH2 0x2926 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1913 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x193D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x14CF JUMP JUMPDEST PUSH2 0x1954 DUP9 DUP3 PUSH2 0x2875 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x197C DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1968 PUSH2 0x174A JUMP JUMPDEST PUSH2 0x1972 JUMPI DUP14 PUSH2 0x1975 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x256C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x18F0 DUP12 DUP4 PUSH2 0x2C38 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1994 PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x19B6 JUMPI POP PUSH1 0x0 NOT PUSH2 0x10B6 JUMP JUMPDEST PUSH2 0x19C0 DUP4 DUP4 PUSH2 0x2C42 JUMP JUMPDEST SWAP1 POP PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10F5 PUSH2 0x2C6D JUMP JUMPDEST PUSH2 0x19D9 PUSH2 0x21C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19E4 DUP4 PUSH2 0x1B5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x19F1 DUP3 PUSH2 0x1ED0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A0A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1A15 DUP3 DUP3 DUP6 PUSH2 0x20F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 DUP5 SWAP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x131E DUP2 PUSH2 0x2D2B JUMP JUMPDEST PUSH2 0x1A7D DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1A76 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x1FEE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x1A98 JUMPI PUSH1 0x0 PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB6 DUP5 DUP5 DUP5 PUSH2 0x2DA4 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1ADC DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x1FEE JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF5 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1B1A TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1B12 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x1AA9 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x1AA9 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH2 0x1B30 DUP4 PUSH2 0x28E8 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1B49 JUMPI DUP2 PUSH2 0x1779 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1BA3 JUMPI POP PUSH1 0x0 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1BE5 JUMPI POP PUSH1 0x1 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C27 JUMPI POP PUSH1 0x2 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C69 JUMPI POP PUSH1 0x3 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1CAB JUMPI POP PUSH1 0x4 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1CED JUMPI POP PUSH1 0x5 PUSH2 0x134A JUMP JUMPDEST PUSH2 0x134A PUSH2 0x135 PUSH2 0x2DEB JUMP JUMPDEST PUSH2 0x1D00 PUSH2 0x1549 JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x1D0C JUMPI PUSH2 0x100C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x131E JUMPI PUSH1 0x0 DUP1 PUSH2 0x1D2D DUP4 PUSH2 0x2904 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0x125F JUMPI PUSH2 0x125F DUP5 PUSH2 0x1D46 DUP7 PUSH2 0x1ED0 JUMP JUMPDEST DUP5 PUSH2 0x20F3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DB8 PUSH2 0x1DEF JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x10F5 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1E1F PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1E64 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x118E JUMPI PUSH2 0x1E8D PUSH2 0x1E7E DUP3 PUSH2 0x250C JUMP JUMPDEST PUSH2 0x1E87 DUP4 PUSH2 0x2E15 JUMP JUMPDEST SWAP1 PUSH2 0x2F33 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E99 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1E6A JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1EFE JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1F2E JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1F5E JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1F8E JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1FBE JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1CED JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH2 0x131E JUMPI PUSH2 0x131E DUP2 PUSH2 0x2DEB JUMP JUMPDEST PUSH2 0x2013 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x202A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2035 DUP4 DUP4 DUP4 PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x205B SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x208A SWAP1 DUP3 PUSH2 0x2292 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x212E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2142 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x2177 DUP2 DUP4 DUP6 PUSH2 0x1AE2 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21F4 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x157F JUMP JUMPDEST SWAP1 POP PUSH2 0x100C PUSH2 0x2203 DUP3 CALLER PUSH2 0x2F7F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x2216 PUSH2 0x1DAE JUMP JUMPDEST PUSH2 0x192 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2233 PUSH2 0x2229 PUSH2 0x3081 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2248 PUSH2 0x223E PUSH2 0x308A JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2259 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x1779 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x1FEE JUMP JUMPDEST DUP1 ISZERO PUSH2 0x22C4 JUMPI PUSH2 0x22BF PUSH2 0x22B5 PUSH2 0x1DCB JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x22D9 JUMP JUMPDEST PUSH2 0x22D9 PUSH2 0x22CF PUSH2 0x1DEF JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2348 PUSH2 0x1291 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2354 PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x23D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x60 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 DUP2 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 DUP4 MSTORE DUP7 MLOAD PUSH1 0x44 DUP4 ADD MSTORE DUP7 MLOAD SWAP4 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 PUSH4 0x18E736D4 SWAP4 DUP8 SWAP4 DUP10 SWAP4 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2457 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x243F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2484 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x185D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x24C7 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x1A82 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 ISZERO ISZERO DUP2 MSTORE SWAP1 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP1 PUSH2 0x100C JUMPI PUSH2 0x100C PUSH2 0x1302 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2516 PUSH2 0x1549 JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x252C JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x254F JUMPI PUSH2 0x254A DUP2 PUSH2 0x28E8 JUMP JUMPDEST PUSH2 0x1779 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x131E DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F494D504C454D454E5445440000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x25E8 SWAP1 DUP3 SWAP1 PUSH2 0x255F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125F JUMPI PUSH2 0x2623 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2602 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2616 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3096 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x262F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x25EB JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x2736 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP4 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26A8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x26AD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26BC JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x2718 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x273E PUSH2 0x286D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2748 PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP PUSH2 0x2754 DUP8 DUP3 PUSH2 0x2875 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x276C DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x277E DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x1347 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x2839 PUSH2 0x174A JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2850 DUP5 PUSH2 0x30E7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x285F DUP8 DUP8 DUP5 PUSH2 0x3109 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x220B JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2884 SWAP1 DUP3 SWAP1 PUSH2 0x255F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125F JUMPI PUSH2 0x28BF DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x289E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x28B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2F33 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x28CB JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2887 JUMP JUMPDEST PUSH2 0x131E DUP3 DUP3 PUSH2 0x31B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 DUP3 PUSH1 0x60 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 PUSH1 0x60 DUP1 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2910 DUP4 PUSH2 0x20E4 JUMP JUMPDEST SWAP2 POP PUSH2 0x291F DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1B50 JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2935 SWAP1 DUP3 SWAP1 PUSH2 0x255F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125F JUMPI PUSH2 0x2970 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x294F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2963 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3279 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x297C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2938 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2999 PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x131E JUMPI PUSH2 0x29AF DUP2 PUSH2 0x32C7 JUMP JUMPDEST ISZERO PUSH2 0x29BD JUMPI PUSH2 0x29BD DUP2 PUSH2 0x32F6 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x299E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29CF PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2A87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2AB1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2B6A JUMPI PUSH1 0x0 PUSH2 0x2AC9 PUSH2 0x1549 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x2AD6 JUMPI DUP2 PUSH2 0x2ADB JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x2AE6 DUP2 PUSH2 0x2A38 JUMP JUMPDEST DUP1 PUSH2 0x2AFD JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x2AFD JUMPI POP PUSH2 0x2AFD DUP2 PUSH2 0x32C7 JUMP JUMPDEST PUSH2 0x2B1A JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B0D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2B4A JUMP JUMPDEST PUSH2 0x2B4A DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2B29 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x9 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3324 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2B56 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2AB7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B7D PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x131E JUMPI PUSH2 0x2B93 DUP2 PUSH2 0x1CF8 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2B82 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BE5 DUP6 PUSH2 0x3349 JUMP JUMPDEST SWAP1 POP PUSH2 0x2BFB PUSH2 0x2BF5 DUP8 DUP4 DUP8 PUSH2 0x33B0 JUMP JUMPDEST DUP4 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2C0A TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x1FEE JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH2 0x131E DUP3 DUP3 PUSH2 0x349B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2CDA PUSH2 0x3535 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2D3A JUMPI PUSH2 0x100C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2D49 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1A7D JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2D71 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2D9A DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x1FEE JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2D5A JUMP JUMPDEST PUSH2 0x2DB3 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2DDC PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x2DD5 JUMPI POP PUSH2 0x2DD1 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1B3A JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1A7D DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x100C DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x3539 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2E43 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2E73 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x2EA3 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x2ED3 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x2F03 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1CED JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x2F57 DUP5 ISZERO DUP1 PUSH2 0x2F50 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2F4D JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x1FEE JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F78 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x1FEE JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x2F9E PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2FB9 JUMPI POP PUSH2 0x2FB9 DUP4 PUSH2 0x35B4 JUMP JUMPDEST ISZERO PUSH2 0x2FE1 JUMPI PUSH2 0x2FC6 PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x10B6 JUMP JUMPDEST PUSH2 0x2FE9 PUSH2 0x29C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x304E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3062 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x10B6 JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30A5 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1FEE JUMP JUMPDEST DUP3 PUSH2 0x30B2 JUMPI POP PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x30D5 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x30CC JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x1FEE JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x30DE JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3117 DUP4 DUP6 PUSH2 0x3096 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x315B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x31AF JUMPI PUSH2 0x3190 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x317A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2F33 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x319C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3161 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x31CF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x31DB DUP3 PUSH1 0x0 DUP4 PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3201 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3234 PUSH2 0x322F DUP3 PUSH2 0x3229 PUSH2 0x10BC JUMP JUMPDEST SWAP1 PUSH2 0x35F0 JUMP JUMPDEST PUSH2 0x35FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3288 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1FEE JUMP JUMPDEST DUP3 PUSH2 0x3295 JUMPI POP PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x32AF SWAP1 DUP6 DUP4 DUP2 PUSH2 0x30CC JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x32BB JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2A60 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x330E DUP2 PUSH2 0x1B22 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1779 PUSH2 0x333B DUP5 PUSH2 0x3336 DUP6 PUSH2 0x28F6 JUMP JUMPDEST PUSH2 0x3603 JUMP JUMPDEST PUSH2 0x3344 DUP5 PUSH2 0x28E8 JUMP JUMPDEST PUSH2 0x361D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3353 PUSH2 0x2C6D JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33C2 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x343B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x348F JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x34A7 PUSH1 0x0 DUP4 DUP4 PUSH2 0x1A7D JUMP JUMPDEST PUSH2 0x34BC PUSH2 0x322F DUP3 PUSH2 0x34B6 PUSH2 0x10BC JUMP JUMPDEST SWAP1 PUSH2 0x2292 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x34DF SWAP1 DUP3 PUSH2 0x2292 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x35DF PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x157F JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x1347 JUMPI POP PUSH2 0x1347 DUP3 PUSH2 0x363D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1779 DUP4 DUP4 PUSH1 0x1 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1779 DUP5 ISZERO DUP1 PUSH2 0x2F50 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2F4D JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x362C DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1FEE JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x3635 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3668 PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x157F JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x369C JUMPI POP PUSH2 0x3699 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x157F JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0x1347 JUMPI POP PUSH1 0x0 PUSH2 0x1347 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B DUP16 SWAP8 0xFC 0xE7 0x4F 0xBE 0xE0 0xF XOR 0xDA 0xF8 PUSH31 0x5183F75BC9078E00E4D1FDF274DF3A7FE5EC8164736F6C6343000701003300 ", + "sourceMap": "836:2368:64:-:0;;;910:935;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;910:935:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;910:935:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;910:935:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;910:935:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;910:935:64;;;;;;;;;;;;;1195:64;;;;;;;;;;;;;;;;;;;;;1310:103;;;;;;;;910:935;-1:-1:-1;910:935:64;-1:-1:-1;1310:103:64;;-1:-1:-1;1324:35:64;1207:6;1353:4;1324:13;:35::i;:::-;1310:103;;;;1361:18;1310:103;;;;1381:31;1310:103;;;1454:5;1473:33;4845:2186:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4845:2186:28;;;1581:35:64;1595:6;1610:4;1581:13;;;:35;;:::i;:::-;1644:6;:13;1660:1;1644:17;-1:-1:-1;;;;;1630:32:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1630:32:64;;1676:4;1731:1;1746;1761:5;5893:19:28;5914:20;5807:4;5813:6;5821:5;5858;5767:10;-1:-1:-1;;;;;5759:19:28;5751:28;;1749:9:26;1301:4:52;2020:280:50;;;;;;;;;;;;;-1:-1:-1;;;2020:280:50;;;1713:9:26;1724:11;2126:5:51;2118;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;-1:-1:-1;;2168:14:51;2180:2;2168:14;;;-1:-1:-1;2100:22:50;;;;;;;2085:37;;2150:25;;;;;2132:43;;-1:-1:-1;2198:95:50;2185:108;;2049:46:38;;-1:-1:-1;;;;;;1724:14:29;;;;;;2168::51;1724::29;1770::26;;;;::::2;::::0;-1:-1:-1;2578:93:45;;-1:-1:-1;2284:7:45;2587:49;;;10056:3:10;2578:8:45;:93::i;:::-;2681:96;2352:7;2690:51;;;10120:3:10;2681:8:45;:96::i;:::-;2817:15;:37;;;2865:40;;;;2938:41;2915:64;;5959:13:28;;5950:57:::4;::::0;3201:1:::4;-1:-1:-1::0;5959:28:28::4;5921:3:10;5950:8:28;:57::i;:::-;6017:61;6043:15;:13;:15::i;:::-;6026:13:::0;;:32:::4;;5969:3:10;6017:8:28;:61::i;:::-;6626:40;6659:6;6626:32;;;;;:40;;:::i;:::-;6677;6699:17:::0;6677:21:::4;:40::i;:::-;6728:14;6745:5;-1:-1:-1::0;;;;;6745:18:28::4;;6764:14;6745:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;6745:34:28;6790:51:::4;::::0;-1:-1:-1;;;6790:51:28;;::::4;::::0;::::4;::::0;;;;;;;;;;;;;;;;;;6745:34;;-1:-1:-1;;;;;;6790:20:28;::::4;::::0;::::4;::::0;6745:34;;6819:6;;6827:13;;6790:51;;;;;;;;;;;6745:34:::4;6790:51:::0;;::::4;::::0;::::4;::::0;;;-1:-1:-1;6790:51:28::4;;;;;;;::::0;;::::4;::::0;;;::::4;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;::::0;;;::::4;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;6951:6;6941:16;;;;::::0;::::4;6992:5;-1:-1:-1::0;;;;;6992:30:28::4;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;-1:-1:-1::0;6992:32:28;6967:57:::4;::::0;-1:-1:-1;;;;;;6967:57:28;::::4;::::0;-1:-1:-1;;4590:23:59;;:30;;-1:-1:-1;4630:62:59;;-1:-1:-1;;1568:1:59;4639:33;;;-1:-1:-1;5921:3:10;;-1:-1:-1;4630:8:59;;-1:-1:-1;;;;4630:62:59:i;:::-;4702:179;4765:1;4751:11;:15;4780:6;:25;;;:32;4826:6;:38;;;:45;4702:35;;;;;:179;;:::i;:::-;4892:26;;;;5054:23;;:26;;:23;;:26;;;;;;;;;;-1:-1:-1;;;;;5044:36:59;;;-1:-1:-1;;;;;5044:36:59;;;;;;;5100:6;:23;;;5124:1;5100:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5090:36:59;;;-1:-1:-1;;;;;5090:36:59;;;;;;;5146:6;:23;;;5170:1;5146:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5136:36:59;;;-1:-1:-1;;;;;5136:36:59;;;;;;;5206:1;5192:11;:15;:56;;5246:1;5192:56;;;5210:23;;:26;;5234:1;;5210:26;;;;;;;;;;;;5192:56;5182:66;;-1:-1:-1;;;;;;5182:66:59;;;5282:1;5268:15;;:56;;5322:1;5268:56;;;5286:23;;:26;;5310:1;;5286:26;;;;;;;;;;;;5268:56;5258:66;;-1:-1:-1;;;;;;5258:66:59;;;5358:1;5344:15;;:56;;5398:1;5344:56;;;5362:23;;:26;;5386:1;;5362:26;;;;;;;;;;;;5344:56;5334:66;;-1:-1:-1;;;;;;5334:66:59;;;5451:23;;:26;;5429:49;;5451:23;;;:26;;;;;;;;;;5429:21;;;:49;;:::i;:::-;5411:67;;5528:23;;:26;;5506:49;;5528:23;5552:1;;5528:26;;;;;5506:49;5488:67;;5605:23;;:26;;5583:49;;5605:23;5629:1;;5605:26;;;;;5583:49;5565:67;;5674:1;5660:15;;:71;;5730:1;5660:71;;;5678:49;5700:6;:23;;;5724:1;5700:26;;;;;;;5678:49;5642:89;;5773:1;5759:15;;:71;;5829:1;5759:71;;;5777:49;5799:6;:23;;;5823:1;5799:26;;;;;;;5777:49;5741:89;;5872:1;5858:15;;:71;;5928:1;5858:71;;;5876:49;5898:6;:23;;;5922:1;5898:26;;;;;;;5876:49;5840:89;;6412:23;;:30;-1:-1:-1;;6412:34:59;6383:248;6471:1;6460:8;:12;:64;;;;-1:-1:-1;6476:23:59;;:33;;6519:4;;6476:23;6500:8;;6476:33;;;;;;;;;;;;-1:-1:-1;;;;;6476:48:59;;6460:64;6383:248;;;-1:-1:-1;;6538:10:59;6383:248;;;6640:20;;;;7197:23;;:30;7138:36;;-1:-1:-1;;;;;7177:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7177:51:59;-1:-1:-1;7138:90:59;-1:-1:-1;7239:30:59;;;;7503:1726;7527:23;;:30;7523:34;;7503:1726;;;7586:8;7582:1;:12;7578:1641;;;7633:6;:25;;;7659:1;7633:28;;;;;;;;;;;;;;7614:13;7628:1;7614:16;;;;;;;;;;;;;:47;-1:-1:-1;;;;;7614:47:59;;;-1:-1:-1;;;;;7614:47:59;;;;;7761:162;7850:1;-1:-1:-1;;;;;7816:36:59;:13;7830:1;7816:16;;;;;;;;;;;;;;-1:-1:-1;;;;;7816:36:59;;;7904:1;4198;7874:31;7761:22;:33;;;;;;:162;;;;;:::i;:::-;7736:187;;8011:6;:38;;;8050:1;8011:41;;;;;;;;;;;;;;8007:370;;;8076:88;8119:1;-1:-1:-1;;;;;8085:36:59;:13;8099:1;8085:16;;;;;;;;;;;;;;-1:-1:-1;;;;;8085:36:59;;;9022:3:10;8076:8:59;;;:88;;:::i;:::-;8211:42;8245:4;8251:1;8211:22;:33;;;;;;:42;;;;;:::i;:::-;8186:67;;8288:4;8276:16;;8007:370;;;8354:4;8339:19;;8007:370;7578:1641;;;8406:8;8401:1;:13;8397:822;;8453:6;:25;;;8483:1;8479;:5;8453:32;;;;;;;;;;;;;;8434:13;8448:1;8434:16;;;;;;;;;;;;;:51;-1:-1:-1;;;;;8434:51:59;;;-1:-1:-1;;;;;8434:51:59;;;;;8585:162;8674:1;-1:-1:-1;;;;;8640:36:59;:13;8654:1;8640:16;;;;;;;8585:162;8560:187;;8835:6;:38;;;8878:1;8874;:5;8835:45;;;;;;;;;;;;;;8831:374;;;8904:88;8947:1;-1:-1:-1;;;;;8913:36:59;:13;8927:1;8913:16;;;;;;;8904:88;9039:42;9073:4;9079:1;9039:22;:33;;;;;;:42;;;;;:::i;:::-;9014:67;;9116:4;9104:16;;8831:374;;;9182:4;9167:19;;8831:374;7559:3;;7503:1726;;;-1:-1:-1;9257:10:59;;9239:28;;;;;;9296:13;;9277:32;;;;9452:16;;:13;;9466:1;;9452:16;;;;;;;;;;-1:-1:-1;;;;;9435:33:59;;;-1:-1:-1;;;;;9435:33:59;;;;;;;9495:13;9509:1;9495:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9478:33:59;;;-1:-1:-1;;;;;9478:33:59;;;;;;;9538:13;9552:1;9538:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9521:33:59;;;-1:-1:-1;;;;;9521:33:59;;;;;;;9605:1;9582:13;:20;:24;9581:64;;9643:1;9581:64;;;9610:13;9624:1;9610:16;;;;;;;;;;;;;;9581:64;9564:81;;-1:-1:-1;;;;;;9564:81:59;;;9673:20;;9696:1;-1:-1:-1;9672:64:59;;9734:1;9672:64;;;9701:13;9715:1;9701:16;;;;;;;;;;;;;;9672:64;9655:81;;-1:-1:-1;;;;;;9655:81:59;;;9764:20;;9787:1;-1:-1:-1;9763:64:59;;9825:1;9763:64;;;9792:13;9806:1;9792:16;;;;;;;;;;;;;;9763:64;9746:81;;-1:-1:-1;;;;;;9746:81:59;;;-1:-1:-1;;9838:48:59;;-1:-1:-1;;2581:17:58;;:24;2619;;;;;:31;2664:34;;;;:41;2532:183;;-1:-1:-1;2581:24:58;;-1:-1:-1;2619:31:58;2664:41;2532:35;;;;;:183;;:::i;:::-;2775:17;;2726:32;;2761:46;;2801:4;2761:13;:46::i;:::-;2872:23;;2726:81;;-1:-1:-1;;;2872:27:58;2843:234;2924:1;2913:8;:12;:57;;;;;2965:4;-1:-1:-1;;;;;2929:41:58;:16;2946:8;2929:26;;;;;;;;;;;;;;-1:-1:-1;;;;;2929:41:58;;2913:57;2843:234;;;-1:-1:-1;;2984:10:58;2843:234;;;3087:15;3121:9;3116:626;3140:17;;:24;3136:28;;3116:626;;;3194:8;3189:1;:13;3185:63;;;3232:1;3222:11;;3185:63;3303:24;;;;:27;;3274:11;;;;3262:9;;3274:1;;3303:27;;;;;;;;;;;;-1:-1:-1;;;;;3303:47:58;;3299:433;;3370:92;3392:1;3395:10;:24;;;3420:1;3395:27;;;;;;;;;;;;;;3424:10;:34;;;3459:1;3424:37;;;;;;;;;;;;;;3370:21;;;:92;;:::i;:::-;3510:10;:24;;;3535:1;3510:27;;;;;;;;;;;;;;-1:-1:-1;;;;;3486:91:58;3507:1;3486:91;3539:10;:34;;;3574:1;3539:37;;;;;;;;;;;;;;3486:91;;;;;;;;;;;;;;;;;;3700:17;3715:1;3700:14;:17::i;:::-;-1:-1:-1;3166:3:58;;3116:626;;;;2479:1269;;;;910:935:64;;;;;;836:2368;;1536:425:42;1611:22;1663:6;:13;1679:1;1663:17;-1:-1:-1;;;;;1650:31:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1650:31:42;;1641:40;;1692:6;:13;1709:1;1692:18;1688:81;;;1734:5;1722:6;1729:1;1722:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1722:17:42;;;-1:-1:-1;;;;;1722:17:42;;;;;1749:13;;1688:81;1799:13;;1790:86;1818:1;1814;:5;:30;;;;;1839:5;-1:-1:-1;;;;;1823:21:42;:6;1834:1;1830;:5;1823:13;;;;;;;;;;;;;;-1:-1:-1;;;;;1823:21:42;;1814:30;1790:86;;;1863:6;1874:1;1870;:5;1863:13;;;;;;;;;;;;;;1851:6;1858:1;1851:9;;;;;;;;-1:-1:-1;;;;;1851:25:42;;;:9;;;;;;;;;;;:25;-1:-1:-1;;1846:3:42;1790:86;;;1887:9;1882:53;1906:1;1902;:5;1882:53;;;1926:6;1933:1;1926:9;;;;;;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;-1:-1:-1;;;;;1914:21:42;;;:9;;;;;;;;;;;:21;1909:3;;1882:53;;;;1953:5;1941:6;1948:1;1941:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1941:17:42;;;-1:-1:-1;;;;;1941:17:42;;;;;1536:425;;;;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;10032:224:59:-;10216:33;10032:224;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:47;;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:47;;;6030:3:10;9078:8:28;:89::i;:::-;9190:147;9224:17;4326:3;4561:2;9190:9;;:20;;;;;;:147;;;;;;:::i;:::-;9178:9;:159;9353:43;;;;;;;;;;;;;;;;;8894:509;:::o;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;27427:510:28:-;27495:7;-1:-1:-1;;;;;27518:31:28;;27544:4;27518:31;27514:83;;;-1:-1:-1;945:4:47;27565:21:28;;27514:83;27687:21;27725:5;-1:-1:-1;;;;;27711:30:28;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27711:32:28;27687:56;;;-1:-1:-1;27818:26:28;27847:27;27856:2;27687:56;27847:8;27711:32;27847:8;;;;;:27;;:::i;:::-;27818:56;;27912:18;27908:2;:22;945:4:47;27891:39:28;27884:46;;;;27427:510;;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7442:18:58;7470:13;7486:23;;;:16;7442:18;7486:23;;;;;;;;7442:18;;-1:-1:-1;7546:43:58;;7486:23;;7442:18;;7580:8;;7546:27;;;;;:43;;:::i;:::-;7520:23;;;;:16;:23;;;;;;;;;:69;;;;7605:34;;;;;;;7537:5;;7605:34;;;;;;;;7282:364;;;;;:::o;3871:161::-;3929:13;3945:23;;;:16;:23;;;;;;;;;;4004:21;;3945:23;;4004:19;;;;;:21;;:::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;1437:126:10:-;1484:28;1492:9;-1:-1:-1;;;1484:7:10;:28::i;:::-;1437:126;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;;;:51;;:::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;9409:124:28;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2512:395:46:-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;1193:166:49:-;1251:7;1270:37;1279:6;;;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;;;;;:85;;:::i;:::-;:113;;;;;;:180;;;;;;:::i;:292::-;3692:311;3420:590;-1:-1:-1;;;;3420:590:36:o;2499:175::-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;1703:2;1895;2586:5;:16;;;;;;:81;;;;;;:::i;1670:3378:10:-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;7061:607:46;7197:44;7215:3;7206:12;;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;;;;;:27;;:::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;2038:157:36:-;2100:7;2126:62;1646:1;1895:2;2126:5;:16;;;;;;:62;;;;;:::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;2020:1;2012:13;2005:20;1928:104;-1:-1:-1;;;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;836:2368:64:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;836:2368:64;;;-1:-1:-1;836:2368:64;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2030": [ + { + "length": 32, + "start": 5692 + } + ], + "2531": [ + { + "length": 32, + "start": 4755 + } + ], + "2533": [ + { + "length": 32, + "start": 6018 + } + ], + "3869": [ + { + "length": 32, + "start": 5656 + } + ], + "5049": [ + { + "length": 32, + "start": 5509 + } + ], + "6104": [ + { + "length": 32, + "start": 7629 + } + ], + "6106": [ + { + "length": 32, + "start": 7665 + } + ], + "8847": [ + { + "length": 32, + "start": 11410 + } + ], + "8849": [ + { + "length": 32, + "start": 11443 + } + ], + "8851": [ + { + "length": 32, + "start": 11377 + } + ], + "13180": [ + { + "length": 32, + "start": 7854 + } + ], + "13182": [ + { + "length": 32, + "start": 5451 + } + ], + "13184": [ + { + "length": 32, + "start": 7011 + } + ], + "13186": [ + { + "length": 32, + "start": 7077 + } + ], + "13188": [ + { + "length": 32, + "start": 7143 + } + ], + "13190": [ + { + "length": 32, + "start": 7209 + } + ], + "13192": [ + { + "length": 32, + "start": 7275 + } + ], + "13194": [ + { + "length": 32, + "start": 7341 + } + ], + "13196": [ + { + "length": 32, + "start": 11807 + } + ], + "13198": [ + { + "length": 32, + "start": 11855 + } + ], + "13200": [ + { + "length": 32, + "start": 11903 + } + ], + "13202": [ + { + "length": 32, + "start": 11951 + } + ], + "13204": [ + { + "length": 32, + "start": 11999 + } + ], + "13206": [ + { + "length": 32, + "start": 12047 + } + ], + "13208": [ + { + "length": 32, + "start": 7898 + } + ], + "13210": [ + { + "length": 32, + "start": 7946 + } + ], + "13212": [ + { + "length": 32, + "start": 7994 + } + ], + "13214": [ + { + "length": 32, + "start": 8042 + } + ], + "13216": [ + { + "length": 32, + "start": 8090 + } + ], + "13218": [ + { + "length": 32, + "start": 8138 + } + ], + "13220": [ + { + "length": 32, + "start": 10815 + }, + { + "length": 32, + "start": 13006 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106103155760003560e01c80637f1260d1116101a7578063aaabadc5116100ee578063d329c63d11610097578063dd62ed3e11610071578063dd62ed3e14610f99578063ed24911d14610fc7578063f4b7964d14610fcf57610315565b8063d329c63d14610dea578063d505accf14610df2578063d5c096c414610e4357610315565b8063b7b814fc116100c8578063b7b814fc14610d35578063bb2a71ac14610d3d578063d2946c2b14610de257610315565b8063aaabadc514610cff578063ab7759f114610d07578063b35056b814610d2d57610315565b80638d928af811610150578063a457c2d71161012a578063a457c2d714610c9f578063a9059cbb14610ccb578063aa51a57014610cf757610315565b80638d928af814610c6957806390193b7c14610c7157806395d89b4114610c9757610315565b8063851c1bb311610181578063851c1bb314610ab057806387ec681714610aef578063893d20e814610c4557610315565b80637f1260d114610a5457806382687a5614610aa05780638456cb5914610aa857610315565b806338e9922e1161026b57806354dea00a1161021457806370a08231116101ee57806370a082311461081957806374f3b0091461083f5780637ecebe0014610a2e57610315565b806354dea00a1461063a57806355c67628146106605780636028bfd41461066857610315565b80633f4ba83a116102455780633f4ba83a1461057457806350dd6ed91461057c57806354a844ba1461063257610315565b806338e9922e1461052357806338fff2d014610540578063395093511461054857610315565b80631dd746ea116102cd5780632df2c7c0116102a75780632df2c7c0146104d7578063313ce567146104fd5780633644e5151461051b57610315565b80631dd746ea14610441578063238a2d591461049957806323b872dd146104a157610315565b8063095ea7b3116102fe578063095ea7b3146103bf57806318160ddd146103ff5780631c0de0511461041957610315565b80630664f37b1461031a57806306fdde0314610342575b600080fd5b6103406004803603602081101561033057600080fd5b50356001600160a01b0316610ffb565b005b61034a61100f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561038457818101518382015260200161036c565b50505050905090810190601f1680156103b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103eb600480360360408110156103d557600080fd5b506001600160a01b0381351690602001356110a5565b604080519115158252519081900360200190f35b6104076110bc565b60408051918252519081900360200190f35b6104216110c2565b604080519315158452602084019290925282820152519081900360600190f35b6104496110eb565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048557818101518382015260200161046d565b505050509050019250505060405180910390f35b6104496110fa565b6103eb600480360360608110156104b757600080fd5b506001600160a01b03813581169160208101359091169060400135611195565b610340600480360360208110156104ed57600080fd5b50356001600160a01b0316611209565b610505611265565b6040805160ff9092168252519081900360200190f35b61040761126e565b6103406004803603602081101561053957600080fd5b5035611278565b610407611291565b6103eb6004803603604081101561055e57600080fd5b506001600160a01b0381351690602001356112b5565b6103406112f0565b6103406004803603604081101561059257600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105bd57600080fd5b8201836020820111156105cf57600080fd5b803590602001918460018302840111640100000000831117156105f157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611304945050505050565b610340611322565b6104076004803603602081101561065057600080fd5b50356001600160a01b0316611334565b61040761134f565b6107be600480360360e081101561067e57600080fd5b8135916001600160a01b036020820135811692604083013590911691908101906080810160608201356401000000008111156106b957600080fd5b8201836020820111156106cb57600080fd5b803590602001918460208302840111640100000000831117156106ed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929584359560208601359591945092506060810191506040013564010000000081111561074957600080fd5b82018360208201111561075b57600080fd5b8035906020019184600183028401116401000000008311171561077d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611362945050505050565b6040518083815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156108045781810151838201526020016107ec565b50505050905001935050505060405180910390f35b6104076004803603602081101561082f57600080fd5b50356001600160a01b0316611399565b610995600480360360e081101561085557600080fd5b8135916001600160a01b0360208201358116926040830135909116919081019060808101606082013564010000000081111561089057600080fd5b8201836020820111156108a257600080fd5b803590602001918460208302840111640100000000831117156108c457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929584359560208601359591945092506060810191506040013564010000000081111561092057600080fd5b82018360208201111561093257600080fd5b8035906020019184600183028401116401000000008311171561095457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113b4945050505050565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156109d95781810151838201526020016109c1565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610a18578181015183820152602001610a00565b5050505090500194505050505060405180910390f35b61040760048036036020811015610a4457600080fd5b50356001600160a01b03166114dc565b610a7a60048036036020811015610a6a57600080fd5b50356001600160a01b03166114e7565b604080519485526020850193909352838301919091526060830152519081900360800190f35b610407611549565b61034061156d565b61040760048036036020811015610ac657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661157f565b6107be600480360360e0811015610b0557600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135640100000000811115610b4057600080fd5b820183602082011115610b5257600080fd5b80359060200191846020830284011164010000000083111715610b7457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295843595602086013595919450925060608101915060400135640100000000811115610bd057600080fd5b820183602082011115610be257600080fd5b80359060200191846001830284011164010000000083111715610c0457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506115f0945050505050565b610c4d611616565b604080516001600160a01b039092168252519081900360200190f35b610c4d61163a565b61040760048036036020811015610c8757600080fd5b50356001600160a01b031661165e565b61034a611679565b6103eb60048036036040811015610cb557600080fd5b506001600160a01b0381351690602001356116da565b6103eb60048036036040811015610ce157600080fd5b506001600160a01b038135169060200135611718565b610340611725565b610c4d61172d565b6103eb60048036036020811015610d1d57600080fd5b50356001600160a01b0316611737565b6103eb61174a565b61034061175b565b61044960048036036040811015610d5357600080fd5b810190602081018135640100000000811115610d6e57600080fd5b820183602082011115610d8057600080fd5b80359060200191846020830284011164010000000083111715610da257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505050351515905061176d565b610c4d611780565b6103406117a4565b610340600480360360e0811015610e0857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356117ac565b610995600480360360e0811015610e5957600080fd5b8135916001600160a01b03602082013581169260408301359091169190810190608081016060820135640100000000811115610e9457600080fd5b820183602082011115610ea657600080fd5b80359060200191846020830284011164010000000083111715610ec857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295843595602086013595919450925060608101915060400135640100000000811115610f2457600080fd5b820183602082011115610f3657600080fd5b80359060200191846001830284011164010000000083111715610f5857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611867945050505050565b61040760048036036040811015610faf57600080fd5b506001600160a01b038135811691602001351661198a565b6104076119c7565b61034060048036036040811015610fe557600080fd5b506001600160a01b0381351690602001356119d1565b61100c61100782611b5f565b611cf8565b50565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561109b5780601f106110705761010080835404028352916020019161109b565b820191906000526020600020905b81548152906001019060200180831161107e57829003601f168201915b5050505050905090565b60006110b2338484611d4c565b5060015b92915050565b60025490565b60008060006110cf611dae565b1592506110da611dcb565b91506110e4611def565b9050909192565b60606110f5611e13565b905090565b60606000611106611eac565b905060608167ffffffffffffffff8111801561112157600080fd5b5060405190808252806020026020018201604052801561114b578160200160208202803683370190505b50905060005b8281101561118e5761116281611ed0565b82828151811061116e57fe5b6001600160a01b0390921660209283029190910190910152600101611151565b5091505090565b6000806111a2853361198a565b90506111c6336001600160a01b03871614806111be5750838210155b61019e611fee565b6111d1858585611ffc565b336001600160a01b038616148015906111ec57506000198114155b156111fe576111fe8533858403611d4c565b506001949350505050565b600061121482611b5f565b9050600061122182611ed0565b905061123a6001600160a01b0382161515610155611fee565b600082815260096020526040812054611252906120e4565b905061125f8383836120f3565b50505050565b60055460ff1690565b60006110f56119c7565b6112806121c5565b61128861220b565b61100c8161221e565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916110b29185906112eb9086612292565b611d4c565b6112f86121c5565b61130260006122a4565b565b61130c6121c5565b61131461220b565b61131e828261233e565b5050565b61132a6121c5565b61130260016124b8565b600061134761134283611b5f565b61250c565b90505b919050565b6008546000906110f59060c0603f611b50565b600060606113788651611373611eac565b61255f565b61138d8989898989898961256c6125d9612642565b97509795505050505050565b6001600160a01b031660009081526020819052604090205490565b606080886113de6113c361163a565b6001600160a01b0316336001600160a01b03161460cd611fee565b6113f36113e9611291565b82146101f4611fee565b60606000611400866127fc565b156114285761140d61282e565b61141f896114196110bc565b88612841565b9250905061147a565b61143061286d565b606061143a611e13565b90506114468a82612875565b61146a8d8d8d8d8d61145661174a565b611460578d611463565b60005b878e61256c565b9350915061147883826125d9565b505b6114848b826128de565b81895167ffffffffffffffff8111801561149d57600080fd5b506040519080825280602002602001820160405280156114c7578160200160208202803683370190505b509450945050505b5097509795505050505050565b60006113478261165e565b6000806000806000600960006114fc88611b5f565b8152602081019190915260400160002054905061151d811515610155611fee565b611526816128e8565b9450611531816128f6565b935061153c81612904565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6115756121c5565b61130260016122a4565b604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008416828401528251602481840301815260449092019092528051910120919050565b600060606116018651611373611eac565b61138d8989898989898961256c612926612642565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561109b5780601f106110705761010080835404028352916020019161109b565b6000806116e7338561198a565b9050808310611701576116fc33856000611d4c565b61170e565b61170e3385858403611d4c565b5060019392505050565b60006110b2338484611ffc565b61130261298f565b60006110f56129c5565b600061134761174583611b5f565b612a38565b6008546000906110f59060ff612a60565b6117636121c5565b61130260006124b8565b60606117798383612a6a565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611302612b73565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886117db8c61165e565b8960405160200180878152602001866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506118528882611849878787612b9b565b886101f8612bda565b61185d888888611d4c565b5050505050505050565b606080886118766113c361163a565b6118816113e9611291565b61188961286d565b6060611893611e13565b905061189d6110bc565b61194a57600060606118b28d8d8d868b61256c565b915091506118cb6118c1612c31565b83101560cc611fee565b6118dd60006118d8612c31565b612c38565b6118f08b6118e9612c31565b8403612c38565b6118fa8184612926565b808a5167ffffffffffffffff8111801561191357600080fd5b5060405190808252806020026020018201604052801561193d578160200160208202803683370190505b50955095505050506114cf565b6119548882612875565b6000606061197c8d8d8d8d8d61196861174a565b611972578d611975565b60005b898e61256c565b915091506118f08b83612c38565b600061199461163a565b6001600160a01b0316826001600160a01b031614156119b657506000196110b6565b6119c08383612c42565b90506110b6565b60006110f5612c6d565b6119d96121c5565b60006119e483611b5f565b905060006119f182611ed0565b9050611a0a6001600160a01b0382161515610155611fee565b611a158282856120f3565b6040805184815290516001600160a01b0383169184917fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec49181900360200190a350505050565b8061131e81612d2b565b611a7d8284148015611a7657508183145b6067611fee565b505050565b60006001821b1984168284611a98576000611a9b565b60015b60ff16901b17949350505050565b6000611ab6848484612da4565b506001901b60001901811b1992909216911b1790565b6000611adc838311156001611fee565b50900390565b6000611af5606084901c15610149611fee565b611b1a42830160e06020611b128660c083838c8c60006060611aa9565b929190611aa9565b949350505050565b6000611347611b30836128e8565b8390606080611aa9565b6000818310611b495781611779565b5090919050565b6001901b6000190191901c1690565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ba35750600061134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611be55750600161134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c275750600261134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c695750600361134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611cab5750600461134a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ced5750600561134a565b61134a610135612deb565b611d00611549565b811415611d0c5761100c565b600081815260096020526040902054801561131e57600080611d2d83612904565b915091508042111561125f5761125f84611d4686611ed0565b846120f3565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000611db8611def565b4211806110f557505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60606000611e1f611eac565b905060608167ffffffffffffffff81118015611e3a57600080fd5b50604051908082528060200260200182016040528015611e64578160200160208202803683370190505b50905060005b8281101561118e57611e8d611e7e8261250c565b611e8783612e15565b90612f33565b828281518110611e9957fe5b6020908102919091010152600101611e6a565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611efe57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160011415611f2e57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160021415611f5e57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160031415611f8e57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160041415611fbe57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160051415611ced57507f000000000000000000000000000000000000000000000000000000000000000061134a565b8161131e5761131e81612deb565b6120136001600160a01b0384161515610198611fee565b61202a6001600160a01b0383161515610199611fee565b612035838383611a7d565b6001600160a01b03831660009081526020819052604090205461205b90826101a0612f69565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461208a9082612292565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60006113478260c06020611b50565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b15801561212e57600080fd5b505afa158015612142573d6000803e3d6000fd5b505050506040513d602081101561215857600080fd5b5051600085815260096020526040902054909150612177818385611ae2565b600086815260096020908152604091829020929092558051848152905187927fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac928290030190a25050505050565b60006121f46000357fffffffff000000000000000000000000000000000000000000000000000000001661157f565b905061100c6122038233612f7f565b610191611fee565b611302612216611dae565b610192611fee565b612233612229613081565b82101560cb611fee565b61224861223e61308a565b82111560ca611fee565b600854612259908260c0603f611aa9565b6008556040805182815290517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9181900360200190a150565b60008282016117798482101583611fee565b80156122c4576122bf6122b5611dcb565b4210610193611fee565b6122d9565b6122d96122cf611def565b42106101a9611fee565b600780548215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116811790915560408051918252517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be649181900360200190a150565b6000612348611291565b9050600061235461163a565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060806040518083038186803b1580156123a857600080fd5b505afa1580156123bc573d6000803e3d6000fd5b505050506040513d60808110156123d257600080fd5b5060600151604080517f18e736d400000000000000000000000000000000000000000000000000000000815260048101858152602482019283528651604483015286519394506001600160a01b038516936318e736d4938793899392606490910190602085019080838360005b8381101561245757818101518382015260200161243f565b50505050905090810190601f1680156124845780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1580156124a457600080fd5b505af115801561185d573d6000803e3d6000fd5b6008546124c7908260ff611a82565b60085560408051821515815290517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c89181900360200190a18061100c5761100c611302565b6000612516611549565b82141561252c5750670de0b6b3a764000061134a565b600082815260096020526040902054801561254f5761254a816128e8565b611779565b670de0b6b3a76400009392505050565b61131e8183146067611fee565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e4f545f494d504c454d454e5445440000000000000000000000000000000000604482015290516000916060919081900360640190fd5b815181516125e890829061255f565b60005b8181101561125f5761262384828151811061260257fe5b602002602001015184838151811061261657fe5b6020026020010151613096565b84828151811061262f57fe5b60209081029190910101526001016125eb565b333014612736576000306001600160a01b0316600036604051808383808284376040519201945060009350909150508083038183865af19150503d80600081146126a8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ad565b606091505b5050905080600081146126bc57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612718573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61273e61286d565b6060612748611e13565b90506127548782612875565b6000606061276c8c8c8c8c8c8c898d8d63ffffffff16565b9150915061277e81848663ffffffff16565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6000808251118015611347575060ff801682806020019051602081101561282257600080fd5b505160ff161492915050565b61130261283961174a565b6101b6611fee565b600060606000612850846130e7565b9050606061285f878784613109565b919791965090945050505050565b61130261220b565b8151815161288490829061255f565b60005b8181101561125f576128bf84828151811061289e57fe5b60200260200101518483815181106128b257fe5b6020026020010151612f33565b8482815181106128cb57fe5b6020908102919091010152600101612887565b61131e82826131b8565b600061134782826060611b50565b600061134782606080611b50565b600080612910836120e4565b915061291f8360e06020611b50565b9050915091565b8151815161293590829061255f565b60005b8181101561125f5761297084828151811061294f57fe5b602002602001015184838151811061296357fe5b6020026020010151613279565b84828151811061297c57fe5b6020908102919091010152600101612938565b6000612999611eac565b905060005b8181101561131e576129af816132c7565b156129bd576129bd816132f6565b60010161299e565b60006129cf61163a565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0757600080fd5b505afa158015612a1b573d6000803e3d6000fd5b505050506040513d6020811015612a3157600080fd5b5051905090565b60006113477f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b8151606090818167ffffffffffffffff81118015612a8757600080fd5b50604051908082528060200260200182016040528015612ab1578160200160208202803683370190505b50905060005b82811015612b6a576000612ac9611549565b821015612ad65781612adb565b816001015b9050612ae681612a38565b80612afd5750858015612afd5750612afd816132c7565b612b1a57868281518110612b0d57fe5b6020026020010151612b4a565b612b4a878381518110612b2957fe5b60200260200101516009600084815260200190815260200160002054613324565b838381518110612b5657fe5b602090810291909101015250600101612ab7565b50949350505050565b6000612b7d611eac565b905060005b8181101561131e57612b9381611cf8565b600101612b82565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612be585613349565b9050612bfb612bf58783876133b0565b83611fee565b612c0a428410156101b8611fee565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b620f424090565b61131e828261349b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612cda613535565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b600281511015612d3a5761100c565b600081600081518110612d4957fe5b602002602001015190506000600190505b8251811015611a7d576000838281518110612d7157fe5b60200260200101519050612d9a816001600160a01b0316846001600160a01b0316106065611fee565b9150600101612d5a565b612db361010083106064611fee565b612ddc60018210158015612dd55750612dd160ff8461010003611b3a565b8211155b6064611fee565b611a7d83821c156101b4611fee565b61100c817f42414c0000000000000000000000000000000000000000000000000000000000613539565b600081612e4357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160011415612e7357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160021415612ea357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160031415612ed357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160041415612f0357507f000000000000000000000000000000000000000000000000000000000000000061134a565b8160051415611ced57507f000000000000000000000000000000000000000000000000000000000000000061134a565b6000828202612f57841580612f50575083858381612f4d57fe5b04145b6003611fee565b670de0b6b3a764000090049392505050565b6000612f788484111583611fee565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612f9e611616565b6001600160a01b031614158015612fb95750612fb9836135b4565b15612fe157612fc6611616565b6001600160a01b0316336001600160a01b03161490506110b6565b612fe96129c5565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040180848152602001836001600160a01b03168152602001826001600160a01b03168152602001935050505060206040518083038186803b15801561304e57600080fd5b505afa158015613062573d6000803e3d6000fd5b505050506040513d602081101561307857600080fd5b505190506110b6565b64e8d4a5100090565b67016345785d8a000090565b60006130a58215156004611fee565b826130b2575060006110b6565b670de0b6b3a7640000838102906130d5908583816130cc57fe5b04146005611fee565b8281816130de57fe5b049150506110b6565b60008180602001905160408110156130fe57600080fd5b506020015192915050565b606060006131178385613096565b9050845167ffffffffffffffff8111801561313157600080fd5b5060405190808252806020026020018201604052801561315b578160200160208202803683370190505b50915060005b85518110156131af576131908287838151811061317a57fe5b6020026020010151612f3390919063ffffffff16565b83828151811061319c57fe5b6020908102919091010152600101613161565b50509392505050565b6131cf6001600160a01b038316151561019b611fee565b6131db82600083611a7d565b6001600160a01b03821660009081526020819052604090205461320190826101b2612f69565b6001600160a01b03831660009081526020819052604090205561323461322f826132296110bc565b906135f0565b6135fe565b6040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60006132888215156004611fee565b82613295575060006110b6565b670de0b6b3a7640000838102906132af908583816130cc57fe5b8260018203816132bb57fe5b046001019150506110b6565b60006113477f000000000000000000000000000000000000000000000000000000000000000060068401612a60565b60008181526009602052604090205461330e81611b22565b6000928352600960205260409092209190915550565b600061177961333b84613336856128f6565b613603565b613344846128e8565b61361d565b6000613353612c6d565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60006133c282516041146101b9611fee565b60008060006020850151925060408501519150606085015160001a9050600060018783868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561343b573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b0381161580159061348f5750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b6134a760008383611a7d565b6134bc61322f826134b66110bc565b90612292565b6001600160a01b0382166000908152602081905260409020546134df9082612292565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b4690565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b60006135df7ff4b7964d0000000000000000000000000000000000000000000000000000000061157f565b82148061134757506113478261363d565b600061177983836001612f69565b600255565b6000828202611779841580612f50575083858381612f4d57fe5b600061362c8215156004611fee565b81838161363557fe5b049392505050565b60006136687f38e9922e0000000000000000000000000000000000000000000000000000000061157f565b82148061369c57506136997f50dd6ed90000000000000000000000000000000000000000000000000000000061157f565b82145b806113475750600061134756fea26469706673582212204b8f97fce74fbee00f18daf87e5183f75bc9078e00e4d1fdf274df3a7fe5ec8164736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x315 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7F1260D1 GT PUSH2 0x1A7 JUMPI DUP1 PUSH4 0xAAABADC5 GT PUSH2 0xEE JUMPI DUP1 PUSH4 0xD329C63D GT PUSH2 0x97 JUMPI DUP1 PUSH4 0xDD62ED3E GT PUSH2 0x71 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xF99 JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0xFC7 JUMPI DUP1 PUSH4 0xF4B7964D EQ PUSH2 0xFCF JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0xD329C63D EQ PUSH2 0xDEA JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0xDF2 JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0xE43 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0xB7B814FC GT PUSH2 0xC8 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0xD35 JUMPI DUP1 PUSH4 0xBB2A71AC EQ PUSH2 0xD3D JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0xDE2 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xCFF JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0xD07 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0xD2D JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 GT PUSH2 0x150 JUMPI DUP1 PUSH4 0xA457C2D7 GT PUSH2 0x12A JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0xC9F JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xCCB JUMPI DUP1 PUSH4 0xAA51A570 EQ PUSH2 0xCF7 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xC69 JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0xC71 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0xC97 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x851C1BB3 GT PUSH2 0x181 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xAB0 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0xAEF JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0xC45 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x7F1260D1 EQ PUSH2 0xA54 JUMPI DUP1 PUSH4 0x82687A56 EQ PUSH2 0xAA0 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0xAA8 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x38E9922E GT PUSH2 0x26B JUMPI DUP1 PUSH4 0x54DEA00A GT PUSH2 0x214 JUMPI DUP1 PUSH4 0x70A08231 GT PUSH2 0x1EE JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x819 JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x83F JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0xA2E JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x54DEA00A EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x660 JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x668 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x3F4BA83A GT PUSH2 0x245 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x574 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x632 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x38E9922E EQ PUSH2 0x523 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x540 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x548 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA GT PUSH2 0x2CD JUMPI DUP1 PUSH4 0x2DF2C7C0 GT PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x2DF2C7C0 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x4FD JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x51B JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x441 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x499 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x4A1 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x95EA7B3 GT PUSH2 0x2FE JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3BF JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3FF JUMPI DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x419 JUMPI PUSH2 0x315 JUMP JUMPDEST DUP1 PUSH4 0x664F37B EQ PUSH2 0x31A JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x342 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x330 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFFB JUMP JUMPDEST STOP JUMPDEST PUSH2 0x34A PUSH2 0x100F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x384 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x36C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B1 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x3D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x10A5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH2 0x10BC JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x421 PUSH2 0x10C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP3 DUP3 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 RETURN JUMPDEST PUSH2 0x449 PUSH2 0x10EB JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x485 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x46D JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x449 PUSH2 0x10FA JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4B7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x1195 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1209 JUMP JUMPDEST PUSH2 0x505 PUSH2 0x1265 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH2 0x126E JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1278 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x55E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x12B5 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x12F0 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x592 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1304 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x340 PUSH2 0x1322 JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x650 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1334 JUMP JUMPDEST PUSH2 0x407 PUSH2 0x134F JUMP JUMPDEST PUSH2 0x7BE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x67E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x6ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x749 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x75B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x77D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1362 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x804 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x7EC JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x82F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1399 JUMP JUMPDEST PUSH2 0x995 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x855 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x890 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x8A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x8C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x920 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x932 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x13B4 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP4 DUP2 SUB DUP4 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9D9 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x9C1 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD DUP4 DUP2 SUB DUP3 MSTORE DUP5 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH1 0x20 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xA18 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xA00 JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14DC JUMP JUMPDEST PUSH2 0xA7A PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x14E7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE DUP4 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x80 ADD SWAP1 RETURN JUMPDEST PUSH2 0x407 PUSH2 0x1549 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x156D JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAC6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x157F JUMP JUMPDEST PUSH2 0x7BE PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xB05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xB40 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xB52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xB74 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xBD0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xC04 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x15F0 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xC4D PUSH2 0x163A JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xC87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x165E JUMP JUMPDEST PUSH2 0x34A PUSH2 0x1679 JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCB5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x16DA JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x1718 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x1725 JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x172D JUMP JUMPDEST PUSH2 0x3EB PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1737 JUMP JUMPDEST PUSH2 0x3EB PUSH2 0x174A JUMP JUMPDEST PUSH2 0x340 PUSH2 0x175B JUMP JUMPDEST PUSH2 0x449 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xD53 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD80 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP POP POP CALLDATALOAD ISZERO ISZERO SWAP1 POP PUSH2 0x176D JUMP JUMPDEST PUSH2 0xC4D PUSH2 0x1780 JUMP JUMPDEST PUSH2 0x340 PUSH2 0x17A4 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xE08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xFF PUSH1 0x80 DUP3 ADD CALLDATALOAD AND SWAP1 PUSH1 0xA0 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0xC0 ADD CALLDATALOAD PUSH2 0x17AC JUMP JUMPDEST PUSH2 0x995 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0xE59 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x40 DUP4 ADD CALLDATALOAD SWAP1 SWAP2 AND SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xE94 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xEA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xEC8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 DUP5 CALLDATALOAD SWAP6 PUSH1 0x20 DUP7 ADD CALLDATALOAD SWAP6 SWAP2 SWAP5 POP SWAP3 POP PUSH1 0x60 DUP2 ADD SWAP2 POP PUSH1 0x40 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xF24 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xF36 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x1867 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x407 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xFAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x198A JUMP JUMPDEST PUSH2 0x407 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x340 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xFE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x19D1 JUMP JUMPDEST PUSH2 0x100C PUSH2 0x1007 DUP3 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x1CF8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x109B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1070 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x109B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x107E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B2 CALLER DUP5 DUP5 PUSH2 0x1D4C JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x10CF PUSH2 0x1DAE JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x10DA PUSH2 0x1DCB JUMP JUMPDEST SWAP2 POP PUSH2 0x10E4 PUSH2 0x1DEF JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x10F5 PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1106 PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1121 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x114B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x118E JUMPI PUSH2 0x1162 DUP2 PUSH2 0x1ED0 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x116E JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1151 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x11A2 DUP6 CALLER PUSH2 0x198A JUMP JUMPDEST SWAP1 POP PUSH2 0x11C6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0x11BE JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x11D1 DUP6 DUP6 DUP6 PUSH2 0x1FFC JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x11EC JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x11FE JUMPI PUSH2 0x11FE DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x1D4C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1214 DUP3 PUSH2 0x1B5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1221 DUP3 PUSH2 0x1ED0 JUMP JUMPDEST SWAP1 POP PUSH2 0x123A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD PUSH2 0x1252 SWAP1 PUSH2 0x20E4 JUMP JUMPDEST SWAP1 POP PUSH2 0x125F DUP4 DUP4 DUP4 PUSH2 0x20F3 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10F5 PUSH2 0x19C7 JUMP JUMPDEST PUSH2 0x1280 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1288 PUSH2 0x220B JUMP JUMPDEST PUSH2 0x100C DUP2 PUSH2 0x221E JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x10B2 SWAP2 DUP6 SWAP1 PUSH2 0x12EB SWAP1 DUP7 PUSH2 0x2292 JUMP JUMPDEST PUSH2 0x1D4C JUMP JUMPDEST PUSH2 0x12F8 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x0 PUSH2 0x22A4 JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x130C PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1314 PUSH2 0x220B JUMP JUMPDEST PUSH2 0x131E DUP3 DUP3 PUSH2 0x233E JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x132A PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x1 PUSH2 0x24B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH2 0x1342 DUP4 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x250C JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x10F5 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1378 DUP7 MLOAD PUSH2 0x1373 PUSH2 0x1EAC JUMP JUMPDEST PUSH2 0x255F JUMP JUMPDEST PUSH2 0x138D DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x256C PUSH2 0x25D9 PUSH2 0x2642 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x13DE PUSH2 0x13C3 PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x13F3 PUSH2 0x13E9 PUSH2 0x1291 JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1400 DUP7 PUSH2 0x27FC JUMP JUMPDEST ISZERO PUSH2 0x1428 JUMPI PUSH2 0x140D PUSH2 0x282E JUMP JUMPDEST PUSH2 0x141F DUP10 PUSH2 0x1419 PUSH2 0x10BC JUMP JUMPDEST DUP9 PUSH2 0x2841 JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0x147A JUMP JUMPDEST PUSH2 0x1430 PUSH2 0x286D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x143A PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP PUSH2 0x1446 DUP11 DUP3 PUSH2 0x2875 JUMP JUMPDEST PUSH2 0x146A DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1456 PUSH2 0x174A JUMP JUMPDEST PUSH2 0x1460 JUMPI DUP14 PUSH2 0x1463 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x256C JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0x1478 DUP4 DUP3 PUSH2 0x25D9 JUMP JUMPDEST POP JUMPDEST PUSH2 0x1484 DUP12 DUP3 PUSH2 0x28DE JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x149D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x14C7 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 PUSH2 0x165E JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x9 PUSH1 0x0 PUSH2 0x14FC DUP9 PUSH2 0x1B5F JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH2 0x151D DUP2 ISZERO ISZERO PUSH2 0x155 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1526 DUP2 PUSH2 0x28E8 JUMP JUMPDEST SWAP5 POP PUSH2 0x1531 DUP2 PUSH2 0x28F6 JUMP JUMPDEST SWAP4 POP PUSH2 0x153C DUP2 PUSH2 0x2904 JUMP JUMPDEST SWAP6 SWAP8 SWAP5 SWAP7 POP SWAP5 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1575 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x1 PUSH2 0x22A4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x0 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP5 AND DUP3 DUP5 ADD MSTORE DUP3 MLOAD PUSH1 0x24 DUP2 DUP5 SUB ADD DUP2 MSTORE PUSH1 0x44 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1601 DUP7 MLOAD PUSH2 0x1373 PUSH2 0x1EAC JUMP JUMPDEST PUSH2 0x138D DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x256C PUSH2 0x2926 PUSH2 0x2642 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x109B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1070 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x109B JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x16E7 CALLER DUP6 PUSH2 0x198A JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0x1701 JUMPI PUSH2 0x16FC CALLER DUP6 PUSH1 0x0 PUSH2 0x1D4C JUMP JUMPDEST PUSH2 0x170E JUMP JUMPDEST PUSH2 0x170E CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x1D4C JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B2 CALLER DUP5 DUP5 PUSH2 0x1FFC JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x298F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10F5 PUSH2 0x29C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH2 0x1745 DUP4 PUSH2 0x1B5F JUMP JUMPDEST PUSH2 0x2A38 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x10F5 SWAP1 PUSH1 0xFF PUSH2 0x2A60 JUMP JUMPDEST PUSH2 0x1763 PUSH2 0x21C5 JUMP JUMPDEST PUSH2 0x1302 PUSH1 0x0 PUSH2 0x24B8 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1779 DUP4 DUP4 PUSH2 0x2A6A JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x2B73 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0x17DB DUP13 PUSH2 0x165E JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP7 POP POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x1852 DUP9 DUP3 PUSH2 0x1849 DUP8 DUP8 DUP8 PUSH2 0x2B9B JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2BDA JUMP JUMPDEST PUSH2 0x185D DUP9 DUP9 DUP9 PUSH2 0x1D4C JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0x1876 PUSH2 0x13C3 PUSH2 0x163A JUMP JUMPDEST PUSH2 0x1881 PUSH2 0x13E9 PUSH2 0x1291 JUMP JUMPDEST PUSH2 0x1889 PUSH2 0x286D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1893 PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP PUSH2 0x189D PUSH2 0x10BC JUMP JUMPDEST PUSH2 0x194A JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x18B2 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x256C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x18CB PUSH2 0x18C1 PUSH2 0x2C31 JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x18DD PUSH1 0x0 PUSH2 0x18D8 PUSH2 0x2C31 JUMP JUMPDEST PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x18F0 DUP12 PUSH2 0x18E9 PUSH2 0x2C31 JUMP JUMPDEST DUP5 SUB PUSH2 0x2C38 JUMP JUMPDEST PUSH2 0x18FA DUP2 DUP5 PUSH2 0x2926 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1913 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x193D JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0x14CF JUMP JUMPDEST PUSH2 0x1954 DUP9 DUP3 PUSH2 0x2875 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x197C DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x1968 PUSH2 0x174A JUMP JUMPDEST PUSH2 0x1972 JUMPI DUP14 PUSH2 0x1975 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x256C JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x18F0 DUP12 DUP4 PUSH2 0x2C38 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1994 PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x19B6 JUMPI POP PUSH1 0x0 NOT PUSH2 0x10B6 JUMP JUMPDEST PUSH2 0x19C0 DUP4 DUP4 PUSH2 0x2C42 JUMP JUMPDEST SWAP1 POP PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10F5 PUSH2 0x2C6D JUMP JUMPDEST PUSH2 0x19D9 PUSH2 0x21C5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19E4 DUP4 PUSH2 0x1B5F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x19F1 DUP3 PUSH2 0x1ED0 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A0A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO ISZERO PUSH2 0x155 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1A15 DUP3 DUP3 DUP6 PUSH2 0x20F3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 DUP5 SWAP2 PUSH32 0xDD6D1C9BADB346DE6925B358A472C937B41698D2632696759E43FD6527FEEEC4 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x131E DUP2 PUSH2 0x2D2B JUMP JUMPDEST PUSH2 0x1A7D DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x1A76 JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x1FEE JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x1A98 JUMPI PUSH1 0x0 PUSH2 0x1A9B JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AB6 DUP5 DUP5 DUP5 PUSH2 0x2DA4 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1ADC DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x1FEE JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AF5 PUSH1 0x60 DUP5 SWAP1 SHR ISZERO PUSH2 0x149 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1B1A TIMESTAMP DUP4 ADD PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1B12 DUP7 PUSH1 0xC0 DUP4 DUP4 DUP13 DUP13 PUSH1 0x0 PUSH1 0x60 PUSH2 0x1AA9 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH2 0x1AA9 JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH2 0x1B30 DUP4 PUSH2 0x28E8 JUMP JUMPDEST DUP4 SWAP1 PUSH1 0x60 DUP1 PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1B49 JUMPI DUP2 PUSH2 0x1779 JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1BA3 JUMPI POP PUSH1 0x0 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1BE5 JUMPI POP PUSH1 0x1 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C27 JUMPI POP PUSH1 0x2 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1C69 JUMPI POP PUSH1 0x3 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1CAB JUMPI POP PUSH1 0x4 PUSH2 0x134A JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1CED JUMPI POP PUSH1 0x5 PUSH2 0x134A JUMP JUMPDEST PUSH2 0x134A PUSH2 0x135 PUSH2 0x2DEB JUMP JUMPDEST PUSH2 0x1D00 PUSH2 0x1549 JUMP JUMPDEST DUP2 EQ ISZERO PUSH2 0x1D0C JUMPI PUSH2 0x100C JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x131E JUMPI PUSH1 0x0 DUP1 PUSH2 0x1D2D DUP4 PUSH2 0x2904 JUMP JUMPDEST SWAP2 POP SWAP2 POP DUP1 TIMESTAMP GT ISZERO PUSH2 0x125F JUMPI PUSH2 0x125F DUP5 PUSH2 0x1D46 DUP7 PUSH2 0x1ED0 JUMP JUMPDEST DUP5 PUSH2 0x20F3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 DUP3 MSTORE SWAP2 DUP3 SWAP1 KECCAK256 DUP6 SWAP1 SSTORE DUP2 MLOAD DUP6 DUP2 MSTORE SWAP2 MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DB8 PUSH2 0x1DEF JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x10F5 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x1E1F PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1E3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1E64 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x118E JUMPI PUSH2 0x1E8D PUSH2 0x1E7E DUP3 PUSH2 0x250C JUMP JUMPDEST PUSH2 0x1E87 DUP4 PUSH2 0x2E15 JUMP JUMPDEST SWAP1 PUSH2 0x2F33 JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1E99 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1E6A JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1EFE JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1F2E JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x1F5E JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x1F8E JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1FBE JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1CED JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH2 0x131E JUMPI PUSH2 0x131E DUP2 PUSH2 0x2DEB JUMP JUMPDEST PUSH2 0x2013 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x202A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2035 DUP4 DUP4 DUP4 PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x205B SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x208A SWAP1 DUP3 PUSH2 0x2292 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP1 MLOAD DUP6 DUP2 MSTORE SWAP1 MLOAD SWAP2 SWAP4 SWAP3 DUP8 AND SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 SWAP2 DUP3 SWAP1 SUB ADD SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 PUSH1 0xC0 PUSH1 0x20 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x679AEFCE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x212E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2142 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2158 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH2 0x2177 DUP2 DUP4 DUP6 PUSH2 0x1AE2 JUMP JUMPDEST PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SWAP3 SWAP1 SWAP3 SSTORE DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD DUP8 SWAP3 PUSH32 0xB77A83204CA282E08DC3A65B0A1CA32EA4E6875C38EF0BF5BF75E52A67354FAC SWAP3 DUP3 SWAP1 SUB ADD SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21F4 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x157F JUMP JUMPDEST SWAP1 POP PUSH2 0x100C PUSH2 0x2203 DUP3 CALLER PUSH2 0x2F7F JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x2216 PUSH2 0x1DAE JUMP JUMPDEST PUSH2 0x192 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2233 PUSH2 0x2229 PUSH2 0x3081 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2248 PUSH2 0x223E PUSH2 0x308A JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x2259 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x1AA9 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x1779 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x1FEE JUMP JUMPDEST DUP1 ISZERO PUSH2 0x22C4 JUMPI PUSH2 0x22BF PUSH2 0x22B5 PUSH2 0x1DCB JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x22D9 JUMP JUMPDEST PUSH2 0x22D9 PUSH2 0x22CF PUSH2 0x1DEF JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD DUP3 ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2348 PUSH2 0x1291 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x2354 PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x23A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x23D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x60 ADD MLOAD PUSH1 0x40 DUP1 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 DUP2 MSTORE PUSH1 0x24 DUP3 ADD SWAP3 DUP4 MSTORE DUP7 MLOAD PUSH1 0x44 DUP4 ADD MSTORE DUP7 MLOAD SWAP4 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 PUSH4 0x18E736D4 SWAP4 DUP8 SWAP4 DUP10 SWAP4 SWAP3 PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 DUP6 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2457 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x243F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x2484 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x24A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x185D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x24C7 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x1A82 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 DUP1 MLOAD DUP3 ISZERO ISZERO DUP2 MSTORE SWAP1 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 DUP1 PUSH2 0x100C JUMPI PUSH2 0x100C PUSH2 0x1302 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2516 PUSH2 0x1549 JUMP JUMPDEST DUP3 EQ ISZERO PUSH2 0x252C JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP1 ISZERO PUSH2 0x254F JUMPI PUSH2 0x254A DUP2 PUSH2 0x28E8 JUMP JUMPDEST PUSH2 0x1779 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x131E DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E4F545F494D504C454D454E5445440000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x25E8 SWAP1 DUP3 SWAP1 PUSH2 0x255F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125F JUMPI PUSH2 0x2623 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2602 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2616 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3096 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x262F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x25EB JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x2736 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD DUP1 DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x40 MLOAD SWAP3 ADD SWAP5 POP PUSH1 0x0 SWAP4 POP SWAP1 SWAP2 POP POP DUP1 DUP4 SUB DUP2 DUP4 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26A8 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x26AD JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x26BC JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x2718 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x273E PUSH2 0x286D JUMP JUMPDEST PUSH1 0x60 PUSH2 0x2748 PUSH2 0x1E13 JUMP JUMPDEST SWAP1 POP PUSH2 0x2754 DUP8 DUP3 PUSH2 0x2875 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x276C DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x277E DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x1347 JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2822 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x2839 PUSH2 0x174A JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x2850 DUP5 PUSH2 0x30E7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x285F DUP8 DUP8 DUP5 PUSH2 0x3109 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1302 PUSH2 0x220B JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2884 SWAP1 DUP3 SWAP1 PUSH2 0x255F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125F JUMPI PUSH2 0x28BF DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x289E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x28B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2F33 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x28CB JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2887 JUMP JUMPDEST PUSH2 0x131E DUP3 DUP3 PUSH2 0x31B8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 DUP3 PUSH1 0x60 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 DUP3 PUSH1 0x60 DUP1 PUSH2 0x1B50 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2910 DUP4 PUSH2 0x20E4 JUMP JUMPDEST SWAP2 POP PUSH2 0x291F DUP4 PUSH1 0xE0 PUSH1 0x20 PUSH2 0x1B50 JUMP JUMPDEST SWAP1 POP SWAP2 POP SWAP2 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x2935 SWAP1 DUP3 SWAP1 PUSH2 0x255F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x125F JUMPI PUSH2 0x2970 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x294F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2963 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x3279 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x297C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x2938 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2999 PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x131E JUMPI PUSH2 0x29AF DUP2 PUSH2 0x32C7 JUMP JUMPDEST ISZERO PUSH2 0x29BD JUMPI PUSH2 0x29BD DUP2 PUSH2 0x32F6 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x299E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29CF PUSH2 0x163A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2A07 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x2A1B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A31 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH32 0x0 DUP4 JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x60 SWAP1 DUP2 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2A87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2AB1 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2B6A JUMPI PUSH1 0x0 PUSH2 0x2AC9 PUSH2 0x1549 JUMP JUMPDEST DUP3 LT ISZERO PUSH2 0x2AD6 JUMPI DUP2 PUSH2 0x2ADB JUMP JUMPDEST DUP2 PUSH1 0x1 ADD JUMPDEST SWAP1 POP PUSH2 0x2AE6 DUP2 PUSH2 0x2A38 JUMP JUMPDEST DUP1 PUSH2 0x2AFD JUMPI POP DUP6 DUP1 ISZERO PUSH2 0x2AFD JUMPI POP PUSH2 0x2AFD DUP2 PUSH2 0x32C7 JUMP JUMPDEST PUSH2 0x2B1A JUMPI DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2B0D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2B4A JUMP JUMPDEST PUSH2 0x2B4A DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2B29 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x9 PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x3324 JUMP JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x2B56 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x2AB7 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B7D PUSH2 0x1EAC JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x131E JUMPI PUSH2 0x2B93 DUP2 PUSH2 0x1CF8 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x2B82 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2BE5 DUP6 PUSH2 0x3349 JUMP JUMPDEST SWAP1 POP PUSH2 0x2BFB PUSH2 0x2BF5 DUP8 DUP4 DUP8 PUSH2 0x33B0 JUMP JUMPDEST DUP4 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2C0A TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x1FEE JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH2 0x131E DUP3 DUP3 PUSH2 0x349B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2CDA PUSH2 0x3535 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x2D3A JUMPI PUSH2 0x100C JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2D49 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x1A7D JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x2D71 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2D9A DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x1FEE JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2D5A JUMP JUMPDEST PUSH2 0x2DB3 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x2DDC PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x2DD5 JUMPI POP PUSH2 0x2DD1 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1B3A JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x1A7D DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x100C DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x3539 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x2E43 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x2E73 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x2EA3 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x2ED3 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x2F03 JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1CED JUMPI POP PUSH32 0x0 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x2F57 DUP5 ISZERO DUP1 PUSH2 0x2F50 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2F4D JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x1FEE JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2F78 DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x1FEE JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x2F9E PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x2FB9 JUMPI POP PUSH2 0x2FB9 DUP4 PUSH2 0x35B4 JUMP JUMPDEST ISZERO PUSH2 0x2FE1 JUMPI PUSH2 0x2FC6 PUSH2 0x1616 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x10B6 JUMP JUMPDEST PUSH2 0x2FE9 PUSH2 0x29C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x304E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3062 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3078 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD SWAP1 POP PUSH2 0x10B6 JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x30A5 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1FEE JUMP JUMPDEST DUP3 PUSH2 0x30B2 JUMPI POP PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x30D5 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x30CC JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x1FEE JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x30DE JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x30FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 ADD MLOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x3117 DUP4 DUP6 PUSH2 0x3096 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x315B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x31AF JUMPI PUSH2 0x3190 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x317A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x2F33 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x319C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x3161 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x31CF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x1FEE JUMP JUMPDEST PUSH2 0x31DB DUP3 PUSH1 0x0 DUP4 PUSH2 0x1A7D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x3201 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x3234 PUSH2 0x322F DUP3 PUSH2 0x3229 PUSH2 0x10BC JUMP JUMPDEST SWAP1 PUSH2 0x35F0 JUMP JUMPDEST PUSH2 0x35FE JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP2 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3288 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1FEE JUMP JUMPDEST DUP3 PUSH2 0x3295 JUMPI POP PUSH1 0x0 PUSH2 0x10B6 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x32AF SWAP1 DUP6 DUP4 DUP2 PUSH2 0x30CC JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x32BB JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x10B6 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1347 PUSH32 0x0 PUSH1 0x6 DUP5 ADD PUSH2 0x2A60 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x330E DUP2 PUSH2 0x1B22 JUMP JUMPDEST PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 SWAP3 KECCAK256 SWAP2 SWAP1 SWAP2 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1779 PUSH2 0x333B DUP5 PUSH2 0x3336 DUP6 PUSH2 0x28F6 JUMP JUMPDEST PUSH2 0x3603 JUMP JUMPDEST PUSH2 0x3344 DUP5 PUSH2 0x28E8 JUMP JUMPDEST PUSH2 0x361D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3353 PUSH2 0x2C6D JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP1 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x2 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x33C2 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x0 BYTE SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP8 DUP4 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x343B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x348F JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x34A7 PUSH1 0x0 DUP4 DUP4 PUSH2 0x1A7D JUMP JUMPDEST PUSH2 0x34BC PUSH2 0x322F DUP3 PUSH2 0x34B6 PUSH2 0x10BC JUMP JUMPDEST SWAP1 PUSH2 0x2292 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x34DF SWAP1 DUP3 PUSH2 0x2292 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 SWAP1 SWAP5 SSTORE DUP4 MLOAD DUP6 DUP2 MSTORE SWAP4 MLOAD SWAP3 SWAP4 SWAP2 SWAP3 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP3 DUP2 SWAP1 SUB SWAP1 SWAP2 ADD SWAP1 LOG3 POP POP JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x35DF PUSH32 0xF4B7964D00000000000000000000000000000000000000000000000000000000 PUSH2 0x157F JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x1347 JUMPI POP PUSH2 0x1347 DUP3 PUSH2 0x363D JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1779 DUP4 DUP4 PUSH1 0x1 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1779 DUP5 ISZERO DUP1 PUSH2 0x2F50 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2F4D JUMPI INVALID JUMPDEST PUSH1 0x0 PUSH2 0x362C DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1FEE JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x3635 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x3668 PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0x157F JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x369C JUMPI POP PUSH2 0x3699 PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0x157F JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0x1347 JUMPI POP PUSH1 0x0 PUSH2 0x1347 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4B DUP16 SWAP8 0xFC 0xE7 0x4F 0xBE 0xE0 0xF XOR 0xDA 0xF8 PUSH31 0x5183F75BC9078E00E4D1FDF274DF3A7FE5EC8164736F6C6343000701003300 ", + "sourceMap": "836:2368:64:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1950:124;;;;;;;;;;;;;;;;-1:-1:-1;1950:124:64;-1:-1:-1;;;;;1950:124:64;;:::i;:::-;;2254:81:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4857:164;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4857:164:51;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;3500:106;;;:::i;:::-;;;;;;;;;;;;;;;;3274:363:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29081:120:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14709:346:59;;;:::i;2575:655:26:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2575:655:26;;;;;;;;;;;;;;;;;:::i;6715:383:58:-;;;;;;;;;;;;;;;;-1:-1:-1;6715:383:58;-1:-1:-1;;;;;6715:383:58;;:::i;3156:81:51:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2243:113:52;;;:::i;8723:165:28:-;;;;;;;;;;;;;;;;-1:-1:-1;8723:165:28;;:::i;7114:91::-;;;:::i;6269:211:51:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6269:211:51;;;;;;;;:::i;12270:75:28:-;;;:::i;11034:231::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11034:231:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11034:231:28;;-1:-1:-1;11034:231:28;;-1:-1:-1;;;;;11034:231:28:i;3432:100:30:-;;;:::i;4246:128:58:-;;;;;;;;;;;;;;;;-1:-1:-1;4246:128:58;-1:-1:-1;;;;;4246:128:58;;:::i;7926:185:28:-;;;:::i;20592:913::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20592:913:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20592:913:28;;;;;;;;;;;;-1:-1:-1;20592:913:28;-1:-1:-1;20592:913:28;;;;-1:-1:-1;20592:913:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20592:913:28;;-1:-1:-1;20592:913:28;;-1:-1:-1;;;;;20592:913:28:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4022:117:51;;;;;;;;;;;;;;;;-1:-1:-1;4022:117:51;-1:-1:-1;;;;;4022:117:51;;:::i;16016:2311:28:-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16016:2311:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16016:2311:28;;;;;;;;;;;;-1:-1:-1;16016:2311:28;-1:-1:-1;16016:2311:28;;;;-1:-1:-1;16016:2311:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16016:2311:28;;-1:-1:-1;16016:2311:28;;-1:-1:-1;;;;;16016:2311:28:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2006:113:52;;;;;;;;;;;;;;;;-1:-1:-1;2006:113:52;-1:-1:-1;;;;;2006:113:52;;:::i;5256:599:58:-;;;;;;;;;;;;;;;;-1:-1:-1;5256:599:58;-1:-1:-1;;;;;5256:599:58;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10262:86:59;;;:::i;11817:72:28:-;;;:::i;2607:430:38:-;;;;;;;;;;;;;;;;-1:-1:-1;2607:430:38;;;;:::i;19019:911:28:-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19019:911:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19019:911:28;;;;;;;;;;;;-1:-1:-1;19019:911:28;-1:-1:-1;19019:911:28;;;;-1:-1:-1;19019:911:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19019:911:28;;-1:-1:-1;19019:911:28;;-1:-1:-1;;;;;19019:911:28:i;1751:80:29:-;;;:::i;:::-;;;;-1:-1:-1;;;;;1751:80:29;;;;;;;;;;;;;;1797:79:26;;;:::i;1303:121:41:-;;;;;;;;;;;;;;;;-1:-1:-1;1303:121:41;-1:-1:-1;;;;;1303:121:41;;:::i;2448:85:51:-;;;:::i;3356:429:26:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3356:429:26;;;;;;;;:::i;4342:170:51:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4342:170:51;;;;;;;;:::i;2080:69:64:-;;;:::i;1837:101:29:-;;;:::i;16438:167:59:-;;;;;;;;;;;;;;;;-1:-1:-1;16438:167:59;-1:-1:-1;;;;;16438:167:59;;:::i;9746:133:28:-;;;:::i;3780:102:30:-;;;:::i;2155:222:64:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2155:222:64;;-1:-1:-1;;;;2155:222:64;;;;-1:-1:-1;2155:222:64;:::i;8305:127:28:-;;;:::i;1851:93:64:-;;;:::i;1437:508:52:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1437:508:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13533:2321:28:-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13533:2321:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13533:2321:28;;;;;;;;;;;;-1:-1:-1;13533:2321:28;-1:-1:-1;13533:2321:28;;;;-1:-1:-1;13533:2321:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13533:2321:28;;-1:-1:-1;13533:2321:28;;-1:-1:-1;;;;;13533:2321:28:i;2178:254:26:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2178:254:26;;;;;;;;;;:::i;1184:113:41:-;;;:::i;6142:414:58:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6142:414:58;;;;;;;;:::i;1950:124:64:-;2018:49;2045:21;2060:5;2045:14;:21::i;:::-;2018:26;:49::i;:::-;1950:124;:::o;2254:81:51:-;2323:5;2316:12;;;;;;;;-1:-1:-1;;2316:12:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;;:::o;3500:106::-;3587:12;;3500:106;:::o;3274:363:45:-;3377:11;3402:26;3442:27;3504:14;:12;:14::i;:::-;3503:15;3494:24;;3549;:22;:24::i;:::-;3528:45;;3605:25;:23;:25::i;:::-;3583:47;;3274:363;;;:::o;29081:120:28:-;29142:16;29177:17;:15;:17::i;:::-;29170:24;;29081:120;:::o;14709:346:59:-;14760:22;14794:19;14816:17;:15;:17::i;:::-;14794:39;;14843:32;14898:11;14878:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14878:32:59;;14843:67;;14926:9;14921:101;14945:11;14941:1;:15;14921:101;;;14992:19;15009:1;14992:16;:19::i;:::-;14977:9;14987:1;14977:12;;;;;;;;-1:-1:-1;;;;;14977:34:59;;;:12;;;;;;;;;;;:34;14958:3;;14921:101;;;-1:-1:-1;15039:9:59;-1:-1:-1;;14709:346:59;:::o;2575:655:26:-;2703:4;2719:24;2746:29;2756:6;2764:10;2746:9;:29::i;:::-;2719:56;-1:-1:-1;2785:101:26;2794:10;-1:-1:-1;;;;;2794:20:26;;;;:50;;;2838:6;2818:16;:26;;2794:50;10712:3:10;2785:8:26;:101::i;:::-;2897:36;2907:6;2915:9;2926:6;2897:9;:36::i;:::-;2948:10;-1:-1:-1;;;;;2948:20:26;;;;;;:55;;;-1:-1:-1;;2972:16:26;:31;;2948:55;2944:258;;;3136:55;3145:6;3153:10;3184:6;3165:16;:25;3136:8;:55::i;:::-;-1:-1:-1;3219:4:26;;2575:655;-1:-1:-1;;;;2575:655:26:o;6715:383:58:-;6778:13;6794:21;6809:5;6794:14;:21::i;:::-;6778:37;;6826:22;6851:23;6868:5;6851:16;:23::i;:::-;6826:48;-1:-1:-1;6884:83:58;-1:-1:-1;;;;;6893:31:58;;;;9022:3:10;6884:8:58;:83::i;:::-;6977:16;6996:23;;;:16;:23;;;;;;:37;;:35;:37::i;:::-;6977:56;;7043:48;7065:5;7072:8;7082;7043:21;:48::i;:::-;6715:383;;;;:::o;3156:81:51:-;3221:9;;;;3156:81;:::o;2243:113:52:-;2303:7;2329:20;:18;:20::i;8723:165:28:-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;8841:40:28::2;8863:17;8841:21;:40::i;7114:91::-:0;7191:7;7114:91;:::o;6269:211:51:-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6403:32:51;;;;;;;;;;6357:4;;6373:79;;6394:7;;6403:48;;6440:10;6403:36;:48::i;:::-;6373:8;:79::i;12270:75:28:-;2276:21:38;:19;:21::i;:::-;12321:17:28::1;12332:5;12321:10;:17::i;:::-;12270:75::o:0;11034:231::-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;11213:45:28::2;11240:5;11247:10;11213:26;:45::i;:::-;11034:231:::0;;:::o;3432:100:30:-;2276:21:38;:19;:21::i;:::-;3503:22:30::1;3520:4;3503:16;:22::i;4246:128:58:-:0;4305:7;4331:36;4345:21;4360:5;4345:14;:21::i;:::-;4331:13;:36::i;:::-;4324:43;;4246:128;;;;:::o;7926:185:28:-;8022:9;;7996:7;;8022:82;;4326:3;4561:2;8022:20;:82::i;20592:913::-;20861:13;20876:27;20915:71;20951:8;:15;20968:17;:15;:17::i;:::-;20915:35;:71::i;:::-;20997:255;21023:6;21043;21063:9;21086:8;21108:15;21137:25;21176:8;21198:11;21223:19;20997:12;:255::i;:::-;20592:913;;;;;;;;;;:::o;4022:117:51:-;-1:-1:-1;;;;;4114:18:51;4088:7;4114:18;;;;;;;;;;;;4022:117::o;16016:2311:28:-;16304:16;16322;16287:6;13172:68;13203:10;:8;:10::i;:::-;-1:-1:-1;;;;;13181:33:28;:10;-1:-1:-1;;;;;13181:33:28;;6194:3:10;13172:8:28;:68::i;:::-;13250:55;13269:11;:9;:11::i;:::-;13259:6;:21;12526:3:10;13250:8:28;:55::i;:::-;16350:27:::1;16387:19;16841:33;:8;:31;:33::i;:::-;16837:1175;;;16956:23;:21;:23::i;:::-;17180:54;17200:8;17210:13;:11;:13::i;:::-;17225:8;17180:19;:54::i;:::-;17152:82:::0;-1:-1:-1;17152:82:28;-1:-1:-1;16837:1175:28::1;;;17346:21;:19;:21::i;:::-;17382:31;17416:17;:15;:17::i;:::-;17382:51;;17447:39;17461:8;17471:14;17447:13;:39::i;:::-;17529:336;17558:6;17582;17606:9;17633:8;17659:15;17692:16;:14;:16::i;:::-;:48;;17715:25;17692:48;;;17711:1;17692:48;17811:14;17843:8;17529:11;:336::i;:::-;17501:364:::0;-1:-1:-1;17501:364:28;-1:-1:-1;17954:47:28::1;17501:364:::0;17986:14;17954:19:::1;:47::i;:::-;16837:1175;;18117:36;18133:6;18141:11;18117:15;:36::i;:::-;18277:10;18303:8;:15;18289:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;18289:30:28::1;;18269:51;;;;;;13315:1;16016:2311:::0;;;;;;;;;;;:::o;2006:113:52:-;2067:7;2093:19;2106:5;2093:12;:19::i;5256:599:58:-;5357:12;5383:15;5412:16;5442:15;5482:13;5498:16;:39;5515:21;5530:5;5515:14;:21::i;:::-;5498:39;;;;;;;;;;;-1:-1:-1;5498:39:58;;;-1:-1:-1;5646:71:58;5655:19;;;9022:3:10;5646:8:58;:71::i;:::-;5735:22;:5;:20;:22::i;:::-;5728:29;;5777:18;:5;:16;:18::i;:::-;5767:28;;5827:21;:5;:19;:21::i;:::-;5256:599;;;;-1:-1:-1;5805:43:58;;5256:599;-1:-1:-1;;;5256:599:58:o;10262:86:59:-;10332:9;10262:86;:::o;11817:72:28:-;2276:21:38;:19;:21::i;:::-;11866:16:28::1;11877:4;11866:10;:16::i;2607:430:38:-:0;2979:50;;;2996:22;2979:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2969:61;;;;;2607:430;;;:::o;19019:911:28:-;19288:14;19304:26;19342:71;19378:8;:15;19395:17;:15;:17::i;19342:71::-;19424:253;19450:6;19470;19490:9;19513:8;19535:15;19564:25;19603:8;19625:11;19650:17;19424:12;:253::i;1751:80:29:-;1818:6;1751:80;:::o;1797:79:26:-;1863:6;1797:79;:::o;1303:121:41:-;-1:-1:-1;;;;;1398:19:41;1372:7;1398:19;;;:10;:19;;;;;;;1303:121::o;2448:85:51:-;2519:7;2512:14;;;;;;;;-1:-1:-1;;2512:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;3356:429:26;3441:4;3457:24;3484:30;3494:10;3506:7;3484:9;:30::i;:::-;3457:57;;3539:16;3529:6;:26;3525:232;;3571:32;3580:10;3592:7;3601:1;3571:8;:32::i;:::-;3525:232;;;3690:56;3699:10;3711:7;3739:6;3720:16;:25;3690:8;:56::i;:::-;-1:-1:-1;3774:4:26;;3356:429;-1:-1:-1;;;3356:429:26:o;4342:170:51:-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;2080:69:64:-;2125:17;:15;:17::i;1837:101:29:-;1885:11;1915:16;:14;:16::i;16438:167:59:-;16518:4;16541:57;16576:21;16591:5;16576:14;:21::i;:::-;16541:34;:57::i;9746:133:28:-;9825:9;;9802:4;;9825:47;;4388:3;9825:20;:47::i;3780:102:30:-;2276:21:38;:19;:21::i;:::-;3852:23:30::1;3869:5;3852:16;:23::i;2155:222:64:-:0;2282:16;2321:49;2342:8;2352:17;2321:20;:49::i;:::-;2314:56;2155:222;-1:-1:-1;;;2155:222:64:o;8305:127:28:-;8403:22;8305:127;:::o;1851:93:64:-;1908:29;:27;:29::i;1437:508:52:-;1645:18;921:109;1718:5;1725:7;1734:5;1741:19;1754:5;1741:12;:19::i;:::-;1762:8;1689:82;;;;;;;;;;;-1:-1:-1;;;;;1689:82:52;;;;;;-1:-1:-1;;;;;1689:82:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1666:115;;;;;;1645:136;;1792:104;1814:5;1821:10;1833:26;1851:1;1854;1857;1833:17;:26::i;:::-;1861:8;12759:3:10;1792:21:52;:104::i;:::-;1907:31;1916:5;1923:7;1932:5;1907:8;:31::i;:::-;1437:508;;;;;;;;:::o;13533:2321:28:-;13821:16;13839;13804:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;13867:21:::1;:19;:21::i;:::-;13899:31;13933:17;:15;:17::i;:::-;13899:51;;13965:13;:11;:13::i;:::-;13961:1887;;14000:20;14022:26;14052:164;14087:6;14111;14135:9;14162:14;14194:8;14052:17;:164::i;:::-;13999:217;;;;14515:62;14540:16;:14;:16::i;:::-;14524:12;:32;;6140:3:10;14515:8:28;:62::i;:::-;14591:45;14615:1;14619:16;:14;:16::i;:::-;14591:15;:45::i;:::-;14650:59;14666:9;14692:16;:14;:16::i;:::-;14677:12;:31;14650:15;:59::i;:::-;14796:44;14814:9;14825:14;14796:17;:44::i;:::-;14863:9;14888:8;:15;14874:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;14874:30:28::1;;14855:50;;;;;;;;;13961:1887;14936:39;14950:8;14960:14;14936:13;:39::i;:::-;14990:20;15012:26;15042:336;15071:6;15095;15119:9;15146:8;15172:15;15205:16;:14;:16::i;:::-;:48;;15228:25;15205:48;;;15224:1;15205:48;15324:14;15356:8;15042:11;:336::i;:::-;14989:389;;;;15492:40;15508:9;15519:12;15492:15;:40::i;2178:254:26:-:0;2259:7;2301:10;:8;:10::i;:::-;-1:-1:-1;;;;;2282:30:26;:7;-1:-1:-1;;;;;2282:30:26;;2278:148;;;-1:-1:-1;;;2328:18:26;;2278:148;2384:31;2400:5;2407:7;2384:15;:31::i;:::-;2377:38;;;;1184:113:41;1244:7;1270:20;:18;:20::i;6142:414:58:-;2276:21:38;:19;:21::i;:::-;6241:13:58::1;6257:21;6272:5;6257:14;:21::i;:::-;6241:37;;6288:22;6313:23;6330:5;6313:16;:23::i;:::-;6288:48:::0;-1:-1:-1;6346:83:58::1;-1:-1:-1::0;;;;;6355:31:58;::::1;::::0;::::1;9022:3:10;6346:8:58;:83::i;:::-;6439:48;6461:5;6468:8;6478;6439:21;:48::i;:::-;6502:47;::::0;;;;;;;-1:-1:-1;;;;;6502:47:58;::::1;::::0;6523:5;;6502:47:::1;::::0;;;;::::1;::::0;;::::1;2307:1:38;;6142:414:58::0;;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;1057:182::-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;2512:395::-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;1193:166:49:-;1251:7;1270:37;1284:1;1279;:6;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3420:590:36:-;3551:7;3570:67;1895:2;3579:24;;;:29;8253:3:10;3570:8:36;:67::i;:::-;3711:292;3920:15;:26;;1841:3;1951:2;3711:180;3938:8;1772:3;1951:2;3711:180;:5;3745:4;1646:1;1895:2;3711:33;:85::i;:::-;:113;:180;;:113;:180::i;:292::-;3692:311;3420:590;-1:-1:-1;;;;3420:590:36:o;2499:175::-;2560:7;2586:81;2603:21;2618:5;2603:14;:21::i;:::-;2586:5;;1703:2;;2586:16;:81::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;1928:104;-1:-1:-1;1928:104:49:o;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;10354:357:59:-;10415:7;10447;-1:-1:-1;;;;;10438:16:59;:5;-1:-1:-1;;;;;10438:16:59;;10434:30;;;-1:-1:-1;10463:1:59;10456:8;;10434:30;10487:7;-1:-1:-1;;;;;10478:16:59;:5;-1:-1:-1;;;;;10478:16:59;;10474:30;;;-1:-1:-1;10503:1:59;10496:8;;10474:30;10527:7;-1:-1:-1;;;;;10518:16:59;:5;-1:-1:-1;;;;;10518:16:59;;10514:30;;;-1:-1:-1;10543:1:59;10536:8;;10514:30;10567:7;-1:-1:-1;;;;;10558:16:59;:5;-1:-1:-1;;;;;10558:16:59;;10554:30;;;-1:-1:-1;10583:1:59;10576:8;;10554:30;10607:7;-1:-1:-1;;;;;10598:16:59;:5;-1:-1:-1;;;;;10598:16:59;;10594:30;;;-1:-1:-1;10623:1:59;10616:8;;10594:30;10647:7;-1:-1:-1;;;;;10638:16:59;:5;-1:-1:-1;;;;;10638:16:59;;10634:30;;;-1:-1:-1;10663:1:59;10656:8;;10634:30;10675:29;7054:3:10;10675:7:59;:29::i;8058:913:58:-;8569:13;:11;:13::i;:::-;8560:5;:22;8556:35;;;8584:7;;8556:35;8601:13;8617:23;;;:16;:23;;;;;;8654:19;;8650:315;;8690:16;8708:15;8727:21;:5;:19;:21::i;:::-;8689:59;;;;8784:7;8766:15;:25;8762:193;;;8877:63;8899:5;8906:23;8923:5;8906:16;:23::i;:::-;8931:8;8877:21;:63::i;10034:213:51:-;-1:-1:-1;;;;;10157:18:51;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10208:32;;;;;;;;;;;;;;;;;10034:213;;;:::o;4837:237:45:-;4884:4;5030:25;:23;:25::i;:::-;5012:15;:43;:55;;;-1:-1:-1;;5060:7:45;;;;5059:8;;4837:237::o;5187:108::-;5269:19;5187:108;:::o;5301:110::-;5384:20;5301:110;:::o;10780:483:58:-;10847:16;10972:19;10994:17;:15;:17::i;:::-;10972:39;;11021:31;11069:11;11055:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11055:26:58;;11021:60;;11097:9;11092:133;11116:11;11112:1;:15;11092:133;;;11168:46;11197:16;11211:1;11197:13;:16::i;:::-;11168:20;11186:1;11168:17;:20::i;:::-;:28;;:46::i;:::-;11148:14;11163:1;11148:17;;;;;;;;;;;;;;;;;:66;11129:3;;11092:133;;9914:112:59;10007:12;9914:112;:::o;15061:436::-;15125:13;15154:10;15150:37;;-1:-1:-1;15173:14:59;15166:21;;15150:37;15201:5;15210:1;15201:10;15197:37;;;-1:-1:-1;15220:14:59;15213:21;;15197:37;15248:5;15257:1;15248:10;15244:37;;;-1:-1:-1;15267:14:59;15260:21;;15244:37;15295:5;15304:1;15295:10;15291:37;;;-1:-1:-1;15314:14:59;15307:21;;15291:37;15342:5;15351:1;15342:10;15338:37;;;-1:-1:-1;15361:14:59;15354:21;;15338:37;15389:5;15398:1;15389:10;15385:106;;;-1:-1:-1;15408:14:59;15401:21;;918:101:10;987:9;982:34;;998:18;1006:9;998:7;:18::i;7753:559:51:-;7880:71;-1:-1:-1;;;;;7889:20:51;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;-1:-1:-1;;;;;7970:23:51;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;-1:-1:-1;;;;;8122:17:51;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;-1:-1:-1;;;;;8102:17:51;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;-1:-1:-1;;;;;8200:20:51;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;8200:20;;8270:35;;;;;;;;;;;;;7753:559;;;:::o;2752:165:36:-;2811:7;2837:73;:5;1772:3;1951:2;2837:16;:73::i;7282:364:58:-;7427:12;7442:8;-1:-1:-1;;;;;7442:16:58;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7442:18:58;7470:13;7486:23;;;:16;7442:18;7486:23;;;;;7442:18;;-1:-1:-1;7546:43:58;7486:23;7442:18;7580:8;7546:27;:43::i;:::-;7520:23;;;;:16;:23;;;;;;;;;:69;;;;7605:34;;;;;;;7537:5;;7605:34;;;;;;;;7282:364;;;;;:::o;2420:181:38:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;4340:98:45:-;4392:39;4401:14;:12;:14::i;:::-;9935:3:10;4392:8:45;:39::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:17;:47;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:17;:47;;6030:3:10;9078:8:28;:89::i;:::-;9190:9;;:147;;9224:17;4326:3;4561:2;9190:20;:147::i;:::-;9178:9;:159;9353:43;;;;;;;;;;;;;;;;;8894:509;:::o;966:167:54:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;3913:358:45:-;3969:6;3965:232;;;3991:81;4018:24;:22;:24::i;:::-;4000:15;:42;9993:3:10;3991:8:45;:81::i;:::-;3965:232;;;4103:83;4130:25;:23;:25::i;:::-;4112:15;:43;11423:3:10;4103:8:45;:83::i;:::-;4207:7;:16;;;;;;;;;;;;;;4238:26;;;;;;;;;;;;;;;;3913:358;:::o;11271:279:28:-;11364:14;11381:11;:9;:11::i;:::-;11364:28;;11409:20;11433:10;:8;:10::i;:::-;-1:-1:-1;;;;;11433:27:28;;11461:6;11469:5;11433:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11433:42:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11433:42:28;;;;11486:57;;;;;;;;;;;;;;;;;;;;;;;;;11433:42;;-1:-1:-1;;;;;;11486:37:28;;;;;11524:6;;11532:10;;11486:57;;;;;;11433:42;11486:57;;;;;;-1:-1:-1;11486:57:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:488;10065:9;;:56;;10086:7;4388:3;10065:20;:56::i;:::-;10053:9;:68;10137:33;;;;;;;;;;;;;;;;;;;10425:7;10420:38;;10434:24;:22;:24::i;4380:719:58:-;4449:7;4877:13;:11;:13::i;:::-;4868:5;:22;4864:74;;;-1:-1:-1;945:4:47;4906:21:58;;4864:74;4948:22;4973:23;;;:16;:23;;;;;;5013:28;;:79;;5061:31;:14;:29;:31::i;:::-;5013:79;;;945:4:47;5006:86:58;4380:719;-1:-1:-1;;;4380:719:58:o;920:131:43:-;998:46;1012:1;1007;:6;5804:3:10;998:8:43;:46::i;2915:287:64:-;3170:25;;;;;;;;;;;;;;;;;;;;;;;3133:7;;3142:16;;3170:25;;;;;;;;31004:360:28;31133:14;;31201:21;;31157:66;;31133:14;;31157:35;:66::i;:::-;31239:9;31234:124;31258:6;31254:1;:10;31234:124;;;31298:49;31317:7;31325:1;31317:10;;;;;;;;;;;;;;31329:14;31344:1;31329:17;;;;;;;;;;;;;;31298:18;:49::i;:::-;31285:7;31293:1;31285:10;;;;;;;;;;;;;;;;;:62;31266:3;;31234:124;;32751:7126;33432:10;33454:4;33432:27;33428:6443;;33728:12;33754:4;-1:-1:-1;;;;;33746:18:28;33765:8;;33746:28;;;;;;;;;;;;;;-1:-1:-1;33746:28:28;;-1:-1:-1;33746:28:28;;-1:-1:-1;;33746:28:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33727:47;;;33992:7;34025:1;34020:3336;;;;37516:9;34020:3336;34496:4;34493:1;34490;34475:26;34549:1;34543:8;34553:66;34539:81;34781:66;34771:77;;34765:2;;34904:16;34901:1;34898;34883:38;34960:16;34957:1;34950:27;34765:2;;36371;36365:4;36362:1;36347:27;36568:2;36562:4;36555:16;36992:2;36974:16;36970:25;36964:4;36958;36943:53;37330:2;37312:16;37308:25;37305:1;37298:36;33858:3703;37816:21;:19;:21::i;:::-;37852:31;37886:17;:15;:17::i;:::-;37852:51;;37917:39;37931:8;37941:14;37917:13;:39::i;:::-;37972:17;37991:29;38024:256;38049:6;38073;38097:9;38124:8;38150:15;38183:25;38226:14;38258:8;38024:7;:256;;:::i;:::-;37971:309;;;;38295:45;38311:12;38325:14;38295:15;:45;;:::i;:::-;38821:19;;39208:23;;;39248:24;;;39494:66;39476:16;;;39469:92;38842:2;38817:28;39587:16;;;39843:2;39833:13;;39587:16;39819:28;1066:243:2;1140:4;1245:1;1231:4;:11;:15;:71;;;;;1003:3;1250:52;;1261:4;1250:25;;;;;;;;;;;;;;;-1:-1:-1;1250:25:2;:52;;;;1066:243;-1:-1:-1;;1066:243:2:o;4531:119:30:-;4588:55;4597:16;:14;:16::i;:::-;12169:3:10;4588:8:30;:55::i;5268:399::-;5424:7;5433:16;5461:19;5483:27;:8;:25;:27::i;:::-;5461:49;;5521:27;5551:66;5582:8;5592:11;5605;5551:30;:66::i;:::-;5636:11;;;;-1:-1:-1;5268:399:30;;-1:-1:-1;;;;;5268:399:30:o;26094:164:28:-;26233:18;:16;:18::i;30111:354::-;30234:14;;30302:21;;30258:66;;30234:14;;30258:35;:66::i;:::-;30340:9;30335:124;30359:6;30355:1;:10;30335:124;;;30399:49;30418:7;30426:1;30418:10;;;;;;;;;;;;;;30430:14;30445:1;30430:17;;;;;;;;;;;;;;30399:18;:49::i;:::-;30386:7;30394:1;30386:10;;;;;;;;;;;;;;;;;:62;30367:3;;30335:124;;3934:104:26;4010:21;4016:6;4024;4010:5;:21::i;2038:157:36:-;2100:7;2126:62;:5;2100:7;1895:2;2126:16;:62::i;2275:149::-;2333:7;2359:58;:5;1703:2;;2359:16;:58::i;3015:234::-;3076:16;3094:15;3132:18;3144:5;3132:11;:18::i;:::-;3121:29;-1:-1:-1;3170:72:36;:5;1841:3;1951:2;3170:16;:72::i;:::-;3160:82;;3015:234;;;:::o;31895:356:28:-;32022:14;;32090:21;;32046:66;;32022:14;;32046:35;:66::i;:::-;32128:9;32123:122;32147:6;32143:1;:10;32123:122;;;32187:47;32204:7;32212:1;32204:10;;;;;;;;;;;;;;32216:14;32231:1;32216:17;;;;;;;;;;;;;;32187:16;:47::i;:::-;32174:7;32182:1;32174:10;;;;;;;;;;;;;;;;;:60;32155:3;;32123:122;;9206:210:58;9252:19;9274:17;:15;:17::i;:::-;9252:39;;9306:9;9301:109;9325:11;9321:1;:15;9301:109;;;9361:19;9378:1;9361:16;:19::i;:::-;9357:42;;;9382:17;9397:1;9382:14;:17::i;:::-;9338:3;;9301:109;;32257:488:28;32315:11;32712:10;:8;:10::i;:::-;-1:-1:-1;;;;;32712:24:28;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32712:26:28;;-1:-1:-1;32257:488:28;:::o;16696:183:59:-;16793:4;16816:56;:23;16851:20;5949:143:46;6054:14;2246:10;6046:33;;;6045:40;;5949:143::o;9635:737:58:-;9827:15;;9763:16;;;9827:15;9888:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9888:36:58;;9852:72;;9940:9;9935:397;9959:21;9955:1;:25;9935:397;;;10001:20;10029:13;:11;:13::i;:::-;10024:1;:18;;:30;;10053:1;10024:30;;;10045:1;10049;10045:5;10024:30;10001:53;;10090:48;10125:12;10090:34;:48::i;:::-;:121;;;;10159:17;:51;;;;;10180:30;10197:12;10180:16;:30::i;:::-;10090:231;;10310:8;10319:1;10310:11;;;;;;;;;;;;;;10090:231;;;10230:61;10247:8;10256:1;10247:11;;;;;;;;;;;;;;10260:16;:30;10277:12;10260:30;;;;;;;;;;;;10230:16;:61::i;:::-;10068:16;10085:1;10068:19;;;;;;;;;;;;;;;;;:253;-1:-1:-1;9982:3:58;;9935:397;;;-1:-1:-1;10349:16:58;9635:737;-1:-1:-1;;;;9635:737:58:o;7724:209::-;7782:19;7804:17;:15;:17::i;:::-;7782:39;;7836:9;7831:96;7855:11;7851:1;:15;7831:96;;;7887:29;7914:1;7887:26;:29::i;:::-;7868:3;;7831:96;;3803:419:41;3963:13;;;3973:2;3963:13;;;;;;;;;3914:12;;;;3963:13;;;;;;;;;;;-1:-1:-1;3963:13:41;3938:38;;4092:1;4087:2;4076:9;4072:18;4065:29;4134:1;4129:2;4118:9;4114:18;4107:29;4177:1;4172:2;4161:9;4157:18;4149:30;4206:9;3803:419;-1:-1:-1;;;;3803:419:41:o;1701:1214::-;1895:14;1912:28;1929:10;1912:16;:28::i;:::-;1895:45;;1950:66;1959:45;1977:7;1986:6;1994:9;1959:17;:45::i;:::-;2006:9;1950:8;:66::i;:::-;2487:63;2508:15;2496:8;:27;;12277:3:10;2487:8:41;:63::i;:::-;-1:-1:-1;;;;;;;;2884:19:41;;;;;;;:10;:19;;;;;:24;;2907:1;2884:24;;;-1:-1:-1;;1701:1214:41:o;7683:110:28:-;3257:3;7683:110;:::o;3818::26:-;3897:24;3903:9;3914:6;3897:5;:24::i;4570:149:51:-;-1:-1:-1;;;;;4685:18:51;;;4659:7;4685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;2386:188:50:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2483:83:50;;;;;;;;;;;;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;:51::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;7061:607:46;7197:44;7215:3;7206:6;:12;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;:27::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;1437:126:10:-;1484:28;1492:9;1484:28;:7;:28::i;14150:437:59:-;14215:7;14238:10;14234:38;;-1:-1:-1;14257:15:59;14250:22;;14234:38;14286:5;14295:1;14286:10;14282:38;;;-1:-1:-1;14305:15:59;14298:22;;14282:38;14334:5;14343:1;14334:10;14330:38;;;-1:-1:-1;14353:15:59;14346:22;;14330:38;14382:5;14391:1;14382:10;14378:38;;;-1:-1:-1;14401:15:59;14394:22;;14378:38;14430:5;14439:1;14430:10;14426:38;;;-1:-1:-1;14449:15:59;14442:22;;14426:38;14478:5;14487:1;14478:10;14474:107;;;-1:-1:-1;14497:15:59;14490:22;;1790:209:47;1852:7;1889:5;;;1904:57;1913:6;;;:26;;;1938:1;1933;1923:7;:11;;;;;;:16;1913:26;5269:1:10;1904:8:47;:57::i;:::-;945:4;1979:13;;;;-1:-1:-1;;;1790:209:47:o;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;1944:544:29:-;2032:4;1638:42;2053:10;:8;:10::i;:::-;-1:-1:-1;;;;;2053:29:29;;;2052:63;;;;;2087:28;2106:8;2087:18;:28::i;:::-;2048:434;;;2247:10;:8;:10::i;:::-;-1:-1:-1;;;;;2233:24:29;:10;-1:-1:-1;;;;;2233:24:29;;2226:31;;;;2048:434;2410:16;:14;:16::i;:::-;-1:-1:-1;;;;;2410:27:29;;2438:8;2448:7;2465:4;2410:61;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2410:61:29;;;;;;-1:-1:-1;;;;;2410:61:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2410:61:29;;-1:-1:-1;2403:68:29;;9409:124:28;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2628:355:47:-;2690:7;2709:38;2718:6;;;5318:1:10;2709:8:47;:38::i;:::-;2762:6;2758:219;;-1:-1:-1;2791:1:47;2784:8;;2758:219;945:4;2843:7;;;;2864:51;;2843:1;:7;:1;2873:13;;;;;:20;5366:1:10;2864:8:47;:51::i;:::-;2965:1;2953:9;:13;;;;;;2946:20;;;;;1364:158:2;1432:19;1492:4;1481:34;;;;;;;;;;;;;;;-1:-1:-1;1481:34:2;;;;1364:158;-1:-1:-1;;1364:158:2:o;5673:1420:30:-;5835:27;6856:16;6875:32;:11;6895;6875:19;:32::i;:::-;6856:51;;6945:8;:15;6931:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6931:30:30;;6918:43;;6976:9;6971:116;6995:8;:15;6991:1;:19;6971:116;;;7047:29;7067:8;7047;7056:1;7047:11;;;;;;;;;;;;;;:19;;:29;;;;:::i;:::-;7031:10;7042:1;7031:13;;;;;;;;;;;;;;;;;:45;7012:3;;6971:116;;;;5673:1420;;;;;;:::o;9200:411:51:-;9275:68;-1:-1:-1;;;;;9284:21:51;;;;10506:3:10;9275:8:51;:68::i;:::-;9354:49;9375:7;9392:1;9396:6;9354:20;:49::i;:::-;-1:-1:-1;;;;;9435:18:51;;:9;:18;;;;;;;;;;;:65;;9458:6;11950:3:10;9435:22:51;:65::i;:::-;-1:-1:-1;;;;;9414:18:51;;:9;:18;;;;;;;;;;:86;9510:42;9526:25;9544:6;9526:13;:11;:13::i;:::-;:17;;:25::i;:::-;9510:15;:42::i;:::-;9567:37;;;;;;;;9593:1;;-1:-1:-1;;;;;9567:37:51;;;;;;;;;;;;9200:411;;:::o;2989:682:47:-;3049:7;3068:38;3077:6;;;5318:1:10;3068:8:47;:38::i;:::-;3121:6;3117:548;;-1:-1:-1;3150:1:47;3143:8;;3117:548;945:4;3202:7;;;;3223:51;;3202:1;:7;:1;3232:13;;;3223:51;3648:1;3643;3631:9;:13;3630:19;;;;;;3653:1;3629:25;3622:32;;;;;15593:175:59;15662:4;15685:76;:23;4198:1;15720:40;;15685:34;:76::i;3871:161:58:-;3929:13;3945:23;;;:16;:23;;;;;;4004:21;3945:23;4004:19;:21::i;:::-;3978:23;;;;:16;:23;;;;;;:47;;;;-1:-1:-1;3871:161:58:o;10472:188::-;10552:7;10578:75;10591:37;10600:7;10609:18;:5;:16;:18::i;:::-;10591:8;:37::i;:::-;10630:22;:5;:20;:22::i;:::-;10578:12;:75::i;3199:183:50:-;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3302:73;;;;;;3295:80;;3199:183;;;:::o;2921:876:41:-;3066:4;3082:60;3091:9;:16;3111:2;3091:22;12334:3:10;3082:8:41;:60::i;:::-;3153:9;3172;3191:7;3427:4;3416:9;3412:20;3406:27;3401:32;;3472:4;3461:9;3457:20;3451:27;3446:32;;3525:4;3514:9;3510:20;3504:27;3501:1;3496:36;3491:41;;3552:24;3579:26;3589:6;3597:1;3600;3603;3579:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3579:26:41;;;;;;-1:-1:-1;;;;;;;3728:30:41;;;;;;:61;;;3782:7;-1:-1:-1;;;;;3762:27:41;:16;-1:-1:-1;;;;;3762:27:41;;3728:61;3720:70;2921:876;-1:-1:-1;;;;;;;;2921:876:41:o;8583:297:51:-;8658:49;8687:1;8691:7;8700:6;8658:20;:49::i;:::-;8718:42;8734:25;8752:6;8734:13;:11;:13::i;:::-;:17;;:25::i;8718:42::-;-1:-1:-1;;;;;8791:18:51;;:9;:18;;;;;;;;;;;:30;;8814:6;8791:22;:30::i;:::-;-1:-1:-1;;;;;8770:18:51;;:9;:18;;;;;;;;;;;:51;;;;8836:37;;;;;;;8770:18;;:9;;8836:37;;;;;;;;;;8583:297;;:::o;3388:427:50:-;3790:9;;3765:44::o;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;11381:220:58;11467:4;11503:52;11515:39;11503:11;:52::i;:::-;11491:8;:64;11490:104;;;;11560:34;11585:8;11560:24;:34::i;1404:121:54:-;1462:7;1488:30;1492:1;1495;5172::10;1488:3:54;:30::i;3870:94:51:-;3937:12;:20;3870:94::o;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;2402:148;2464:7;2483:38;2492:6;;;5318:1:10;2483:8:49;:38::i;:::-;2542:1;2538;:5;;;;;;;2402:148;-1:-1:-1;;;2402:148:49:o;12351:321:28:-;12437:4;12485:47;12497:34;12485:11;:47::i;:::-;12473:8;:59;12472:143;;;-1:-1:-1;12562:52:28;12574:39;12562:11;:52::i;:::-;12550:8;:64;12472:143;:193;;;-1:-1:-1;2562:4:29;12631:34:28;2494:103:29:o" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "cacheTokenRateIfNecessary(address)": "0664f37b", + "cacheTokenRatesIfNecessary()": "d329c63d", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAdjustedBalances(uint256[],bool)": "bb2a71ac", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeesCollector()": "d2946c2b", + "getRateProviders()": "238a2d59", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getTokenRate(address)": "54dea00a", + "getTokenRateCache(address)": "7f1260d1", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "setTokenRateCacheDuration(address,uint256)": "f4b7964d", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a", + "updateOldRates()": "aa51a570", + "updateTokenRateCache(address)": "2df2c7c0" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"tokenRateProviders\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRateCacheDurations\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"exemptFromYieldProtocolFeeFlags\",\"type\":\"bool[]\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"name\":\"TokenRateCacheUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRateProvider\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cacheDuration\",\"type\":\"uint256\"}],\"name\":\"TokenRateProviderSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"cacheTokenRateIfNecessary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cacheTokenRatesIfNecessary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"ignoreExemptFlags\",\"type\":\"bool\"}],\"name\":\"getAdjustedBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenRateCache\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expires\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setTokenRateCacheDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateOldRates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"updateTokenRateCache\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"getTokenRate(address)\":{\"details\":\"Returns the rate for a given token. All token rates are fixed-point values with 18 decimals. If there is no rate provider for the provided token, it returns FixedPoint.ONE.\"},\"getTokenRateCache(address)\":{\"details\":\"Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate provider.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"setTokenRateCacheDuration(address,uint256)\":{\"details\":\"Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially. Note this function also updates the current cached value.\",\"params\":{\"duration\":\"Number of seconds until the current token rate is fetched again.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"},\"updateTokenRateCache(address)\":{\"details\":\"Forces a rate cache hit for a token. It will revert if the requested token does not have an associated rate provider.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockComposableStablePoolRates.sol\":\"MockComposableStablePoolRates\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol\":{\"keccak256\":\"0xcc2a86a1628aa32f5c55c1e22bfed26ec2bf6cc41b1ba00ee0787b7204911698\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://907581cddf2f608fffcb47f69b7a16060f31d8eb8abf85bc935e73bf1eb2d515\",\"dweb:/ipfs/QmXYcbjuxfLs4v7qyzrP55gemhBMaoJKaZ1fSx4mYLdmCH\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePoolRates.sol\":{\"keccak256\":\"0xaf50151a16f7788c7062aec02ce6fa153ffef254a6b50728982f5238e36b4930\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://235e0b5301ef2e05ca45b16097987d90d293aea9e179bf445baf4415a544ba7a\",\"dweb:/ipfs/QmQxfLRT8qtLjHtyDKm8oGPzXDU9nHQ1w4AGD3g9enrD8S\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/test/MockComposableStablePoolRates.sol\":{\"keccak256\":\"0x48daf46b539e40e90f8cccb9386312755d12f41abf9de37d0f0d2c18e35f2d7d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://00272b4a3786f29275a58d0e7725b12e3f8d9ab247b8c7cac5298c2ee1622eb4\",\"dweb:/ipfs/QmXbxn2td7cAtzJErwYivLqhzy22dwbnUcC2zD46NstFJT\"]}},\"version\":1}" + } + }, + "contracts/test/MockComposableStablePoolStorage.sol": { + "MockComposableStablePoolStorage": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "tokens", + "type": "address[]" + }, + { + "internalType": "contract IRateProvider[]", + "name": "tokenRateProviders", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "exemptFromYieldProtocolFeeFlags", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "PausedStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "name": "RecoveryModeStateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "SwapFeePercentageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "addBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptAmount", + "type": "uint256" + } + ], + "name": "addBptItem", + "outputs": [ + { + "internalType": "uint256[]", + "name": "amountsWithBpt", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "areAllTokensExempt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "areNoTokensExempt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "dropBptItem", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enableRecoveryMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDomainSeparator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getNextNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPausedState", + "outputs": [ + { + "internalType": "bool", + "name": "paused", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "pauseWindowEndTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bufferPeriodEndTime", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProtocolFeesCollector", + "outputs": [ + { + "internalType": "contract IProtocolFeesCollector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRateProvider", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProvider0", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProvider1", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProvider2", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProvider3", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProvider4", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProvider5", + "outputs": [ + { + "internalType": "contract IRateProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRateProviders", + "outputs": [ + { + "internalType": "contract IRateProvider[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactor0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactor1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactor2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactor3", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactor4", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactor5", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScalingFactors", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFeePercentage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "inRecoveryMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "isTokenExemptFromYieldProtocolFee", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + } + ], + "name": "isTokenExemptFromYieldProtocolFeeByIndex", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onExitPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "onJoinPool", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryExit", + "outputs": [ + { + "internalType": "uint256", + "name": "bptIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "poolId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "lastChangeBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "protocolSwapFeePercentage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + } + ], + "name": "queryJoin", + "outputs": [ + { + "internalType": "uint256", + "name": "bptOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "bytes", + "name": "poolConfig", + "type": "bytes" + } + ], + "name": "setAssetManagerPoolConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + } + ], + "name": "setSwapFeePercentage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "skipBptIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "6104a06040523480156200001257600080fd5b50604051620046d3380380620046d38339810160408190526200003591620011a0565b604051806060016040528062000052853062000a9660201b60201c565b8152602001838152602001828152508460006040518060400160405280601f81526020017f4d6f636b436f6d706f7361626c65537461626c65506f6f6c53746f7261676500815250604051806040016040528060088152602001671353d0d2d7d0941560c21b815250620000cd883062000a9660201b60201c565b88516001016001600160401b0381118015620000e857600080fd5b5060405190808252806020026020018201604052801562000113578160200160208202803683370190505b5064e8d4a510006000806000828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200016892919062000fcb565b5080516200017e90600490602084019062000fcb565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001fc90506276a70083111561019462000c30565b6200021062278d0082111561019562000c30565b429091016101408190520161016052855162000232906002111560c862000c30565b6200024c6200024062000c45565b8751111560c962000c30565b620002628662000c4a60201b6200119f1760201c565b6200026d8462000c56565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f906200029e908d906004016200136c565b602060405180830381600087803b158015620002b957600080fd5b505af1158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f4919062001168565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620003299084908b908b90600401620012d0565b600060405180830381600087803b1580156200034457600080fd5b505af115801562000359573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a057600080fd5b505afa158015620003b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003db919062001181565b60601b6001600160601b0319166101a052505089515198506200040f97505060028811955060c8945062000c309350505050565b620004346001820383602001515184604001515162000cea60201b620011a91760201c565b6101c0819052815180516000906200044857fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200047f57fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004b657fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620004ec57600062000505565b815180516003908110620004fc57fe5b60200260200101515b60601b6001600160601b03191661026052600481116200052757600062000540565b8151805160049081106200053757fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005625760006200057b565b8151805160059081106200057257fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005b49190600090620005a057fe5b602002602001015162000d0a60201b60201c565b6102c05281518051620005ce91906001908110620005a057fe5b6102e05281518051620005e891906002908110620005a057fe5b6103005260038111620005fd57600062000613565b620006138260000151600381518110620005a057fe5b6103205260048111620006285760006200063e565b6200063e8260000151600481518110620005a057fe5b61034052600581116200065357600062000669565b620006698260000151600581518110620005a057fe5b61036052815151600019015b600081118015620006a6575082518051309190839081106200069357fe5b60200260200101516001600160a01b0316115b15620006b6576000190162000675565b6101e08190528251516060906001600160401b0381118015620006d857600080fd5b5060405190808252806020026020018201604052801562000703578160200160208202803683370190505b50905060008080805b8751518110156200092657858110156200084257876020015181815181106200073157fe5b60200260200101518582815181106200074657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007af60006001600160a01b03168683815181106200078257fe5b60200260200101516001600160a01b03161415826006018662000dde60201b620011c6179092919060201c565b935087604001518181518110620007c257fe5b60200260200101511562000837576200080e60006001600160a01b0316868381518110620007ec57fe5b60200260200101516001600160a01b0316141561015562000c3060201b60201c565b6200082b6001828662000dde60201b620011c6179092919060201c565b9350600192506200083c565b600191505b6200091d565b8581146200091d57876020015160018203815181106200085e57fe5b60200260200101518582815181106200087357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008af60006001600160a01b03168683815181106200078257fe5b935087604001516001820381518110620008c557fe5b6020026020010151156200091857620008ef60006001600160a01b0316868381518110620007ec57fe5b6200090c6001828662000dde60201b620011c6179092919060201c565b9350600192506200091d565b600191505b6001016200070c565b50811560f890811b610460528115901b61048052835184906000906200094857fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200097b57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009ae57fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003845111620009e5576000620009fc565b83600381518110620009f357fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a1f57600062000a36565b8360048151811062000a2d57fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a5957600062000a70565b8360058151811062000a6757fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250620013f39650505050505050565b606082516001016001600160401b038111801562000ab357600080fd5b5060405190808252806020026020018201604052801562000ade578160200160208202803683370190505b50905082516000141562000b2157818160008151811062000afb57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000c2a565b82515b60008111801562000b5d5750826001600160a01b031684600183038151811062000b4a57fe5b60200260200101516001600160a01b0316115b1562000baa5783600182038151811062000b7357fe5b602002602001015182828151811062000b8857fe5b6001600160a01b03909216602092830291909101909101526000190162000b24565b60005b8181101562000bf95784818151811062000bc357fe5b602002602001015183828151811062000bd857fe5b6001600160a01b039092166020928302919091019091015260010162000bad565b508282828151811062000c0857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000c415762000c418162000e07565b5050565b600690565b8062000c418162000e1c565b62000c6f62000c6462000ea3565b82101560cb62000c30565b62000c8862000c7d62000eac565b82111560ca62000c30565b62000caa8160c0603f60085462000eb860201b620011ed17909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9062000cdf90839062001381565b60405180910390a150565b62000d05828414801562000cfd57508183145b606762000c30565b505050565b60006001600160a01b03821630141562000d2e5750670de0b6b3a764000062000dd9565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d6a57600080fd5b505afa15801562000d7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000da59190620012ad565b60ff169050600062000dc460128362000edd60201b620012101760201c565b905080600a0a670de0b6b3a764000002925050505b919050565b60006001821b198416828462000df657600062000df9565b60015b60ff16901b17949350505050565b62000e19816210905360ea1b62000ef5565b50565b60028151101562000e2d5762000e19565b60008160008151811062000e3d57fe5b602002602001015190506000600190505b825181101562000d0557600083828151811062000e6757fe5b6020026020010151905062000e98816001600160a01b0316846001600160a01b031610606562000c3060201b60201c565b915060010162000e4e565b64e8d4a5100090565b67016345785d8a000090565b600062000ec784848462000f56565b506001901b60001901811b1992909216911b1790565b600062000eef83831115600162000c30565b50900390565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b62000f676101008310606462000c30565b62000fa06001821015801562000f98575062000f9460ff846101000362000fb160201b620012261760201c565b8211155b606462000c30565b62000d0583821c156101b462000c30565b600081831062000fc2578162000fc4565b825b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200100e57805160ff19168380011785556200103e565b828001600101855582156200103e579182015b828111156200103e57825182559160200191906001019062001021565b506200104c92915062001050565b5090565b5b808211156200104c576000815560010162001051565b600082601f83011262001078578081fd5b81516200108f6200108982620013b1565b6200138a565b818152915060208083019084810181840286018201871015620010b157600080fd5b6000805b85811015620010e15782518015158114620010ce578283fd5b85529383019391830191600101620010b5565b50505050505092915050565b600082601f830112620010fe578081fd5b81516200110f6200108982620013b1565b8181529150602080830190848101818402860182018710156200113157600080fd5b60005b848110156200115d5781516200114a81620013dd565b8452928201929082019060010162001134565b505050505092915050565b6000602082840312156200117a578081fd5b5051919050565b60006020828403121562001193578081fd5b815162000fc481620013dd565b60008060008060808587031215620011b6578283fd5b8451620011c381620013dd565b602086810151919550906001600160401b0380821115620011e2578586fd5b818801915088601f830112620011f6578586fd5b8151620012076200108982620013b1565b81815284810190848601868402860187018d10156200122457898afd5b8995505b83861015620012535780516200123e81620013dd565b83526001959095019491860191860162001228565b5060408b015190985094505050808311156200126d578485fd5b6200127b89848a01620010ed565b9450606088015192508083111562001291578384fd5b5050620012a18782880162001067565b91505092959194509250565b600060208284031215620012bf578081fd5b815160ff8116811462000fc4578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b818110156200131c57620013098551620013d1565b83529383019391830191600101620012f4565b505084810360408601528551808252908201925081860190845b818110156200135e576200134b8351620013d1565b8552938301939183019160010162001336565b509298975050505050505050565b60208101600383106200137b57fe5b91905290565b90815260200190565b6040518181016001600160401b0381118282101715620013a957600080fd5b604052919050565b60006001600160401b03821115620013c7578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b038116811462000e1957600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c613132620015a160003980611fb7525080611d815250806112ab525080610efc5280611515525080610a4f52806114e552508061085b52806114b5525080610dd75280611485525080610e435280611455525080610ed8528061142552508061088e525080611168525080610e9152508061071152508061080e525080611144525080611f6b525080611f29525080611ee7525080611ea5525080611e63525080611e21525080610c655250806113f952806121aa525080610f2a5250806109f05250806113d05250806113ac525080610d37525080610d13525080610c9d5250806120e852508061212a52508061210952506131326000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c806382687a56116101e9578063b24694461161010f578063d505accf116100ad578063e3c6137d1161007c578063e3c6137d146106e4578063eaecb2b8146106ec578063ed24911d146106f4578063f4e81884146106fc57610399565b8063d505accf14610698578063d5c096c4146106ab578063dd62ed3e146106be578063dd93a2c9146106d157610399565b8063bb2478d4116100e9578063bb2478d414610678578063c9e51c9014610680578063d25fc61a14610688578063d2946c2b1461069057610399565b8063b246944614610660578063b35056b814610668578063b7b814fc1461067057610399565b806395d89b4111610187578063a8e59c7c11610156578063a8e59c7c1461062a578063a9059cbb14610632578063aaabadc514610645578063ab7759f11461064d57610399565b806395d89b41146105ff57806398411490146106075780639a3b9cce1461060f578063a457c2d71461061757610399565b806387ec6817116101c357806387ec6817146105c9578063893d20e8146105dc5780638d928af8146105e457806390193b7c146105ec57610399565b806382687a56146105a65780638456cb59146105ae578063851c1bb3146105b657610399565b80633644e515116102ce57806348ade7b01161026c5780636028bfd41161023b5780636028bfd41461053e57806370a082311461055f57806374f3b009146105725780637ecebe001461059357610399565b806348ade7b01461050857806350dd6ed91461051b57806354a844ba1461052e57806355c676281461053657610399565b806339509351116102a857806339509351146104d25780633eb3ed29146104e55780633f4ba83a146104ed57806342e68aad146104f557610399565b80633644e515146104ad57806338e9922e146104b557806338fff2d0146104ca57610399565b80631c0de0511161033b57806321e631461161031557806321e6314614610468578063238a2d591461047057806323b872dd14610485578063313ce5671461049857610399565b80631c0de051146104345780631d936c671461044b5780631dd746ea1461046057610399565b80630a3f0f60116103775780630a3f0f60146103f157806314841db41461040457806318160ddd146104245780631a16a9231461042c57610399565b8063064ca1b81461039e57806306fdde03146103bc578063095ea7b3146103d1575b600080fd5b6103a661070f565b6040516103b39190612f6a565b60405180910390f35b6103c4610733565b6040516103b39190613040565b6103e46103df366004612ad5565b6107c9565b6040516103b39190612f47565b6103e46103ff366004612ceb565b6107e0565b610417610412366004612b3b565b6107f3565b6040516103b39190612f06565b6103a6610806565b6103a661080c565b61043c610830565b6040516103b393929190612f52565b610453610859565b6040516103b39190612ea5565b61041761087d565b6103a661088c565b6104786108b0565b6040516103b39190612eb9565b6103e4610493366004612a25565b61094b565b6104a06109bf565b6040516103b391906130a3565b6103a66109c8565b6104c86104c3366004612ceb565b6109d2565b005b6103a66109ee565b6103e46104e0366004612ad5565b610a12565b610453610a4d565b6104c8610a71565b610417610503366004612b00565b610a85565b610453610516366004612ceb565b610a90565b6104c8610529366004612c9d565b610a9b565b6104c8610ab9565b6103a6610acb565b61055161054c366004612b9e565b610ade565b6040516103b392919061308a565b6103a661056d3660046129d1565b610b15565b610585610580366004612b9e565b610b30565b6040516103b3929190612f19565b6103a66105a13660046129d1565b610c58565b6103a6610c63565b6104c8610c87565b6103a66105c4366004612c41565b610c99565b6105516105d7366004612b9e565b610ceb565b610453610d11565b610453610d35565b6103a66105fa3660046129d1565b610d59565b6103c4610d74565b610453610dd5565b6103e4610df9565b6103e4610625366004612ad5565b610e03565b610453610e41565b6103e4610640366004612ad5565b610e65565b610453610e72565b6103e461065b3660046129d1565b610e7c565b6103a6610e8f565b6103e4610eb3565b6104c8610ec4565b610453610ed6565b610453610efa565b6103e4610f1e565b610453610f28565b6104c86106a6366004612a65565b610f4c565b6105856106b9366004612b9e565b610fd7565b6103a66106cc3660046129ed565b6110fa565b6103a66106df366004612ceb565b611137565b6103a6611142565b6103a6611166565b6103a661118a565b6103a661070a366004612ceb565b611194565b7f000000000000000000000000000000000000000000000000000000000000000090565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107bf5780601f10610794576101008083540402835291602001916107bf565b820191906000526020600020905b8154815290600101906020018083116107a257829003601f168201915b5050505050905090565b60006107d633848461123c565b5060015b92915050565b60006107eb826112a4565b90505b919050565b60606107ff83836112d0565b9392505050565b60025490565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080600061083d61138d565b1592506108486113aa565b91506108526113ce565b9050909192565b7f000000000000000000000000000000000000000000000000000000000000000090565b60606108876113f2565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606060006108bc6113f7565b905060608167ffffffffffffffff811180156108d757600080fd5b50604051908082528060200260200182016040528015610901578160200160208202803683370190505b50905060005b82811015610944576109188161141b565b82828151811061092457fe5b6001600160a01b0390921660209283029190910190910152600101610907565b5091505090565b60008061095885336110fa565b905061097c336001600160a01b03871614806109745750838210155b61019e611544565b610987858585611552565b336001600160a01b038616148015906109a257506000198114155b156109b4576109b4853385840361123c565b506001949350505050565b60055460ff1690565b600061088761118a565b6109da611632565b6109e2611678565b6109eb8161168b565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107d6918590610a489086611704565b61123c565b7f000000000000000000000000000000000000000000000000000000000000000090565b610a79611632565b610a836000611716565b565b60606107eb826117a7565b60006107eb8261141b565b610aa3611632565b610aab611678565b610ab58282611849565b5050565b610ac1611632565b610a836001611957565b6008546000906108879060c0603f6119ae565b60006060610af48651610aef6113f7565b6119bd565b610b09898989898989896119ca611a09611a78565b97509795505050505050565b6001600160a01b031660009081526020819052604090205490565b60608088610b5a610b3f610d35565b6001600160a01b0316336001600160a01b03161460cd611544565b610b6f610b656109ee565b82146101f4611544565b60606000610b7c86611c2d565b15610ba457610b89611c5c565b610b9b89610b95610806565b88611c6f565b92509050610bf6565b610bac611c9b565b6060610bb66113f2565b9050610bc28a82611ca3565b610be68d8d8d8d8d610bd2610eb3565b610bdc578d610bdf565b60005b878e6119ca565b93509150610bf48382611a09565b505b610c008b82611d0c565b81895167ffffffffffffffff81118015610c1957600080fd5b50604051908082528060200260200182016040528015610c43578160200160208202803683370190505b509450945050505b5097509795505050505050565b60006107eb82610d59565b7f000000000000000000000000000000000000000000000000000000000000000090565b610c8f611632565b610a836001611716565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610cce929190612e2f565b604051602081830303815290604052805190602001209050919050565b60006060610cfc8651610aef6113f7565b610b09898989898989896119ca611d16611a78565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107bf5780601f10610794576101008083540402835291602001916107bf565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610887611d7f565b600080610e1033856110fa565b9050808310610e2a57610e253385600061123c565b610e37565b610e37338585840361123c565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006107d6338484611552565b6000610887611da3565b60006107eb610e8a83611e1d565b6112a4565b7f000000000000000000000000000000000000000000000000000000000000000090565b6008546000906108879060ff611fab565b610ecc611632565b610a836000611957565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610887611fb5565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f7b8c610d59565b89604051602001610f9196959493929190612f92565b604051602081830303815290604052805190602001209050610fc28882610fb9878787611fd9565b886101f8612018565b610fcd88888861123c565b5050505050505050565b60608088610fe6610b3f610d35565b610ff1610b656109ee565b610ff9611c9b565b60606110036113f2565b905061100d610806565b6110ba57600060606110228d8d8d868b6119ca565b9150915061103b61103161206f565b83101560cc611544565b61104d600061104861206f565b612076565b6110608b61105961206f565b8403612076565b61106a8184611d16565b808a5167ffffffffffffffff8111801561108357600080fd5b506040519080825280602002602001820160405280156110ad578160200160208202803683370190505b5095509550505050610c4b565b6110c48882611ca3565b600060606110ec8d8d8d8d8d6110d8610eb3565b6110e2578d6110e5565b60005b898e6119ca565b915091506110608b83612076565b6000611104610d35565b6001600160a01b0316826001600160a01b0316141561112657506000196107da565b6111308383612080565b90506107da565b60006107eb826120ab565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006108876120e4565b60006107eb82612181565b80610ab5816121e5565b6111c182841480156111ba57508183145b6067611544565b505050565b60006001821b19841682846111dc5760006111df565b60015b60ff16901b17949350505050565b60006111fa84848461225e565b506001901b60001901811b1992909216911b1790565b6000611220838311156001611544565b50900390565b600081831061123557816107ff565b5090919050565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611297908590612f6a565b60405180910390a3505050565b60006107eb7f000000000000000000000000000000000000000000000000000000000000000083611fab565b6060825160010167ffffffffffffffff811180156112ed57600080fd5b50604051908082528060200260200182016040528015611317578160200160208202803683370190505b50905060005b81518110156113865761132e610c63565b8114611365578361133d610c63565b821061134c576001820361134e565b815b8151811061135857fe5b6020026020010151611367565b825b82828151811061137357fe5b602090810291909101015260010161131d565b5092915050565b60006113976113ce565b42118061088757505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008161144957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b816001141561147957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b81600214156114a957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b81600314156114d957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b816004141561150957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b816005141561153957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b6107ee6101356122a4565b81610ab557610ab5816122a4565b6115696001600160a01b0384161515610198611544565b6115806001600160a01b0383161515610199611544565b61158b8383836111c1565b6001600160a01b0383166000908152602081905260409020546115b190826101a06122ce565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546115e09082611704565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611297908590612f6a565b60006116616000357fffffffff0000000000000000000000000000000000000000000000000000000016610c99565b90506109eb61167082336122e4565b610191611544565b610a8361168361138d565b610192611544565b6116a06116966123cd565b82101560cb611544565b6116b56116ab6123d6565b82111560ca611544565b6008546116c6908260c0603f6111ed565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906116f9908390612f6a565b60405180910390a150565b60008282016107ff8482101583611544565b8015611736576117316117276113aa565b4210610193611544565b61174b565b61174b6117416113ce565b42106101a9611544565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906116f9908390612f47565b606080600183510367ffffffffffffffff811180156117c557600080fd5b506040519080825280602002602001820160405280156117ef578160200160208202803683370190505b50905060005b81518110156113865783611807610c63565b82106118165781600101611818565b815b8151811061182257fe5b602002602001015182828151811061183657fe5b60209081029190910101526001016117f5565b60006118536109ee565b9050600061185f610d35565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b815260040161188c92919061300b565b60806040518083038186803b1580156118a457600080fd5b505afa1580156118b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dc9190612d03565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250611929915085908790600401612ff2565b600060405180830381600087803b15801561194357600080fd5b505af1158015610fcd573d6000803e3d6000fd5b600854611966908260ff6111c6565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c890611999908390612f47565b60405180910390a1806109eb576109eb610a83565b6001901b6000190191901c1690565b610ab58183146067611544565b600060606040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613053565b60405180910390fd5b81518151611a189082906119bd565b60005b81811015611a7257611a53848281518110611a3257fe5b6020026020010151848381518110611a4657fe5b60200260200101516123e2565b848281518110611a5f57fe5b6020908102919091010152600101611a1b565b50505050565b333014611b67576000306001600160a01b0316600036604051611a9c929190612e5f565b6000604051808303816000865af19150503d8060008114611ad9576040519150601f19603f3d011682016040523d82523d6000602084013e611ade565b606091505b505090508060008114611aed57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114611b49573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b611b6f611c9b565b6060611b796113f2565b9050611b858782611ca3565b60006060611b9d8c8c8c8c8c8c898d8d63ffffffff16565b91509150611baf81848663ffffffff16565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b60008082511180156107eb575060ff801682806020019051810190611c529190612d43565b60ff161492915050565b610a83611c67610eb3565b6101b6611544565b600060606000611c7e84612433565b90506060611c8d878784612449565b919791965090945050505050565b610a83611678565b81518151611cb29082906119bd565b60005b81811015611a7257611ced848281518110611ccc57fe5b6020026020010151848381518110611ce057fe5b60200260200101516124f8565b848281518110611cf957fe5b6020908102919091010152600101611cb5565b610ab5828261252e565b81518151611d259082906119bd565b60005b81811015611a7257611d60848281518110611d3f57fe5b6020026020010151848381518110611d5357fe5b60200260200101516125fa565b848281518110611d6c57fe5b6020908102919091010152600101611d28565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000611dad610d35565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015611de557600080fd5b505afa158015611df9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190612c81565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e61575060006107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ea3575060016107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ee5575060026107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f27575060036107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f69575060046107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611539575060056107ee565b1c60019081161490565b7f000000000000000000000000000000000000000000000000000000000000000090565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b600061202385612648565b9050612039612033878387612664565b83611544565b612048428410156101b8611544565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b620f424090565b610ab58282612731565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006120c26120b8610c63565b8314156064611544565b6120ca610c63565b82106120e0576120db826001611210565b6107eb565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006121516127c4565b30604051602001612166959493929190612fc6565b60405160208183030381529060405280519060200120905090565b600061218b610c63565b82106121a15761219c826001611704565b6121a3565b815b90506107ee7f0000000000000000000000000000000000000000000000000000000000000000821080156121de57506121da610c63565b8214155b6064611544565b6002815110156121f4576109eb565b60008160008151811061220357fe5b602002602001015190506000600190505b82518110156111c157600083828151811061222b57fe5b60200260200101519050612254816001600160a01b0316846001600160a01b0316106065611544565b9150600101612214565b61226d61010083106064611544565b612295600182101580156121de575061228b60ff8461010003611226565b8211156064611544565b6111c183821c156101b4611544565b6109eb817f42414c00000000000000000000000000000000000000000000000000000000006127c8565b60006122dd8484111583611544565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612303610d11565b6001600160a01b03161415801561231e575061231e83612843565b156123465761232b610d11565b6001600160a01b0316336001600160a01b03161490506107da565b61234e611da3565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040161237d93929190612f73565b60206040518083038186803b15801561239557600080fd5b505afa1580156123a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190612b7e565b64e8d4a5100090565b67016345785d8a000090565b60006123f18215156004611544565b826123fe575060006107da565b670de0b6b3a7640000838102906124219085838161241857fe5b04146005611544565b82818161242a57fe5b049150506107da565b6000818060200190518101906107ff9190612d5f565b6060600061245783856123e2565b9050845167ffffffffffffffff8111801561247157600080fd5b5060405190808252806020026020018201604052801561249b578160200160208202803683370190505b50915060005b85518110156124ef576124d0828783815181106124ba57fe5b60200260200101516124f890919063ffffffff16565b8382815181106124dc57fe5b60209081029190910101526001016124a1565b50509392505050565b600082820261251c84158061251557508385838161251257fe5b04145b6003611544565b670de0b6b3a764000090049392505050565b6125456001600160a01b038316151561019b611544565b612551826000836111c1565b6001600160a01b03821660009081526020819052604090205461257790826101b26122ce565b6001600160a01b0383166000908152602081905260409020556125aa6125a58261259f610806565b906128b1565b6128bf565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125ee9190612f6a565b60405180910390a35050565b60006126098215156004611544565b82612616575060006107da565b670de0b6b3a7640000838102906126309085838161241857fe5b82600182038161263c57fe5b046001019150506107da565b60006126526120e4565b82604051602001610cce929190612e6f565b600061267682516041146101b9611544565b60208281015160408085015160608601518251600080825295019283905292939092811a916001906126af908990859088908890613022565b6020604051602081039080840390855afa1580156126d1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116158015906127255750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b61273d600083836111c1565b6127526125a58261274c610806565b90611704565b6001600160a01b0382166000908152602081905260409020546127759082611704565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125ee908590612f6a565b4690565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b600061286e7f38e9922e00000000000000000000000000000000000000000000000000000000610c99565b8214806128a2575061289f7f50dd6ed900000000000000000000000000000000000000000000000000000000610c99565b82145b806107eb57506107eb826128c4565b60006107ff838360016122ce565b600255565b50600090565b600082601f8301126128da578081fd5b813567ffffffffffffffff8111156128f0578182fd5b60208082026129008282016130b1565b8381529350818401858301828701840188101561291c57600080fd5b600092505b8483101561293f578035825260019290920191908301908301612921565b505050505092915050565b600082601f83011261295a578081fd5b813567ffffffffffffffff811115612970578182fd5b6129a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016130b1565b91508082528360208285010111156129b857600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156129e2578081fd5b81356107ff816130d8565b600080604083850312156129ff578081fd5b8235612a0a816130d8565b91506020830135612a1a816130d8565b809150509250929050565b600080600060608486031215612a39578081fd5b8335612a44816130d8565b92506020840135612a54816130d8565b929592945050506040919091013590565b600080600080600080600060e0888a031215612a7f578283fd5b8735612a8a816130d8565b96506020880135612a9a816130d8565b955060408801359450606088013593506080880135612ab8816130ed565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612ae7578182fd5b8235612af2816130d8565b946020939093013593505050565b600060208284031215612b11578081fd5b813567ffffffffffffffff811115612b27578182fd5b612b33848285016128ca565b949350505050565b60008060408385031215612b4d578182fd5b823567ffffffffffffffff811115612b63578283fd5b612b6f858286016128ca565b95602094909401359450505050565b600060208284031215612b8f578081fd5b815180151581146107ff578182fd5b600080600080600080600060e0888a031215612bb8578283fd5b873596506020880135612bca816130d8565b95506040880135612bda816130d8565b9450606088013567ffffffffffffffff80821115612bf6578485fd5b612c028b838c016128ca565b955060808a0135945060a08a0135935060c08a0135915080821115612c25578283fd5b50612c328a828b0161294a565b91505092959891949750929550565b600060208284031215612c52578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107ff578182fd5b600060208284031215612c92578081fd5b81516107ff816130d8565b60008060408385031215612caf578182fd5b8235612cba816130d8565b9150602083013567ffffffffffffffff811115612cd5578182fd5b612ce18582860161294a565b9150509250929050565b600060208284031215612cfc578081fd5b5035919050565b60008060008060808587031215612d18578182fd5b8451935060208501519250604085015191506060850151612d38816130d8565b939692955090935050565b600060208284031215612d54578081fd5b81516107ff816130ed565b60008060408385031215612d71578182fd5b8251612d7c816130ed565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015612dbb57815187529582019590820190600101612d9f565b509495945050505050565b60008151808452815b81811015612deb57602081850181015186830182015201612dcf565b81811115612dfc5782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015612efa5783516001600160a01b031683529284019291840191600101612ed5565b50909695505050505050565b6000602082526107ff6020830184612d8c565b600060408252612f2c6040830185612d8c565b8281036020840152612f3e8185612d8c565b95945050505050565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b600083825260406020830152612b336040830184612dc6565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526107ff6020830184612dc6565b6020808252600f908201527f4e4f545f494d504c454d454e5445440000000000000000000000000000000000604082015260600190565b600083825260406020830152612b336040830184612d8c565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156130d057600080fd5b604052919050565b6001600160a01b03811681146109eb57600080fd5b60ff811681146109eb57600080fdfea26469706673582212200f1ee81e6c1bd691798b1bbd344e3915d8d8aa1a5346438470d4b38db2b1bd3164736f6c63430007010033", + "opcodes": "PUSH2 0x4A0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x46D3 CODESIZE SUB DUP1 PUSH3 0x46D3 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x35 SWAP2 PUSH3 0x11A0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH3 0x52 DUP6 ADDRESS PUSH3 0xA96 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE POP DUP5 PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1F DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x4D6F636B436F6D706F7361626C65537461626C65506F6F6C53746F7261676500 DUP2 MSTORE POP PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH8 0x1353D0D2D7D09415 PUSH1 0xC2 SHL DUP2 MSTORE POP PUSH3 0xCD DUP9 ADDRESS PUSH3 0xA96 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP9 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xE8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x113 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP PUSH5 0xE8D4A51000 PUSH1 0x0 DUP1 PUSH1 0x0 DUP3 DUP3 DUP10 DUP10 DUP14 DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SHL DUP5 DUP1 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE POP DUP8 DUP8 DUP2 PUSH1 0x3 SWAP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 PUSH3 0x168 SWAP3 SWAP2 SWAP1 PUSH3 0xFCB JUMP JUMPDEST POP DUP1 MLOAD PUSH3 0x17E SWAP1 PUSH1 0x4 SWAP1 PUSH1 0x20 DUP5 ADD SWAP1 PUSH3 0xFCB JUMP JUMPDEST POP POP PUSH1 0x5 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x12 OR SWAP1 SSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x80 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0xA0 MSTORE POP PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP2 DUP3 SHL DUP2 AND PUSH2 0x100 MSTORE SWAP2 SWAP1 SHL AND PUSH2 0x120 MSTORE POP PUSH3 0x1FC SWAP1 POP PUSH3 0x76A700 DUP4 GT ISZERO PUSH2 0x194 PUSH3 0xC30 JUMP JUMPDEST PUSH3 0x210 PUSH3 0x278D00 DUP3 GT ISZERO PUSH2 0x195 PUSH3 0xC30 JUMP JUMPDEST TIMESTAMP SWAP1 SWAP2 ADD PUSH2 0x140 DUP2 SWAP1 MSTORE ADD PUSH2 0x160 MSTORE DUP6 MLOAD PUSH3 0x232 SWAP1 PUSH1 0x2 GT ISZERO PUSH1 0xC8 PUSH3 0xC30 JUMP JUMPDEST PUSH3 0x24C PUSH3 0x240 PUSH3 0xC45 JUMP JUMPDEST DUP8 MLOAD GT ISZERO PUSH1 0xC9 PUSH3 0xC30 JUMP JUMPDEST PUSH3 0x262 DUP7 PUSH3 0xC4A PUSH1 0x20 SHL PUSH3 0x119F OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x26D DUP5 PUSH3 0xC56 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x9B2760F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x9B2760F SWAP1 PUSH3 0x29E SWAP1 DUP14 SWAP1 PUSH1 0x4 ADD PUSH3 0x136C JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x2B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x2CE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x2F4 SWAP2 SWAP1 PUSH3 0x1168 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3354E3E9 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP1 PUSH4 0x66A9C7D2 SWAP1 PUSH3 0x329 SWAP1 DUP5 SWAP1 DUP12 SWAP1 DUP12 SWAP1 PUSH1 0x4 ADD PUSH3 0x12D0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x344 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x359 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP DUP1 PUSH2 0x180 DUP2 DUP2 MSTORE POP POP DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xD2946C2B PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0x3A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0x3B5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0x3DB SWAP2 SWAP1 PUSH3 0x1181 JUMP JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x1A0 MSTORE POP POP DUP10 MLOAD MLOAD SWAP9 POP PUSH3 0x40F SWAP8 POP POP PUSH1 0x2 DUP9 GT SWAP6 POP PUSH1 0xC8 SWAP5 POP PUSH3 0xC30 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH3 0x434 PUSH1 0x1 DUP3 SUB DUP4 PUSH1 0x20 ADD MLOAD MLOAD DUP5 PUSH1 0x40 ADD MLOAD MLOAD PUSH3 0xCEA PUSH1 0x20 SHL PUSH3 0x11A9 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x1C0 DUP2 SWAP1 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH1 0x0 SWAP1 PUSH3 0x448 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x200 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x47F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x220 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP2 PUSH1 0x0 ADD MLOAD PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x4B6 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x240 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP2 GT PUSH3 0x4EC JUMPI PUSH1 0x0 PUSH3 0x505 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x3 SWAP1 DUP2 LT PUSH3 0x4FC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x260 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x527 JUMPI PUSH1 0x0 PUSH3 0x540 JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x4 SWAP1 DUP2 LT PUSH3 0x537 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x280 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x562 JUMPI PUSH1 0x0 PUSH3 0x57B JUMP JUMPDEST DUP2 MLOAD DUP1 MLOAD PUSH1 0x5 SWAP1 DUP2 LT PUSH3 0x572 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x2A0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5B4 SWAP2 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x5A0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH3 0xD0A PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x2C0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5CE SWAP2 SWAP1 PUSH1 0x1 SWAP1 DUP2 LT PUSH3 0x5A0 JUMPI INVALID JUMPDEST PUSH2 0x2E0 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH3 0x5E8 SWAP2 SWAP1 PUSH1 0x2 SWAP1 DUP2 LT PUSH3 0x5A0 JUMPI INVALID JUMPDEST PUSH2 0x300 MSTORE PUSH1 0x3 DUP2 GT PUSH3 0x5FD JUMPI PUSH1 0x0 PUSH3 0x613 JUMP JUMPDEST PUSH3 0x613 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x5A0 JUMPI INVALID JUMPDEST PUSH2 0x320 MSTORE PUSH1 0x4 DUP2 GT PUSH3 0x628 JUMPI PUSH1 0x0 PUSH3 0x63E JUMP JUMPDEST PUSH3 0x63E DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0x5A0 JUMPI INVALID JUMPDEST PUSH2 0x340 MSTORE PUSH1 0x5 DUP2 GT PUSH3 0x653 JUMPI PUSH1 0x0 PUSH3 0x669 JUMP JUMPDEST PUSH3 0x669 DUP3 PUSH1 0x0 ADD MLOAD PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0x5A0 JUMPI INVALID JUMPDEST PUSH2 0x360 MSTORE DUP2 MLOAD MLOAD PUSH1 0x0 NOT ADD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0x6A6 JUMPI POP DUP3 MLOAD DUP1 MLOAD ADDRESS SWAP2 SWAP1 DUP4 SWAP1 DUP2 LT PUSH3 0x693 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0x6B6 JUMPI PUSH1 0x0 NOT ADD PUSH3 0x675 JUMP JUMPDEST PUSH2 0x1E0 DUP2 SWAP1 MSTORE DUP3 MLOAD MLOAD PUSH1 0x60 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0x6D8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0x703 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 DUP1 DUP1 JUMPDEST DUP8 MLOAD MLOAD DUP2 LT ISZERO PUSH3 0x926 JUMPI DUP6 DUP2 LT ISZERO PUSH3 0x842 JUMPI DUP8 PUSH1 0x20 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x731 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x746 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x7AF PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x782 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP3 PUSH1 0x6 ADD DUP7 PUSH3 0xDDE PUSH1 0x20 SHL PUSH3 0x11C6 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD DUP2 DUP2 MLOAD DUP2 LT PUSH3 0x7C2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x837 JUMPI PUSH3 0x80E PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7EC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x155 PUSH3 0xC30 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x82B PUSH1 0x1 DUP3 DUP7 PUSH3 0xDDE PUSH1 0x20 SHL PUSH3 0x11C6 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x83C JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH3 0x91D JUMP JUMPDEST DUP6 DUP2 EQ PUSH3 0x91D JUMPI DUP8 PUSH1 0x20 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x85E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x873 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0x8AF PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x782 JUMPI INVALID JUMPDEST SWAP4 POP DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0x8C5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ISZERO PUSH3 0x918 JUMPI PUSH3 0x8EF PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x7EC JUMPI INVALID JUMPDEST PUSH3 0x90C PUSH1 0x1 DUP3 DUP7 PUSH3 0xDDE PUSH1 0x20 SHL PUSH3 0x11C6 OR SWAP1 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST SWAP4 POP PUSH1 0x1 SWAP3 POP PUSH3 0x91D JUMP JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH3 0x70C JUMP JUMPDEST POP DUP2 ISZERO PUSH1 0xF8 SWAP1 DUP2 SHL PUSH2 0x460 MSTORE DUP2 ISZERO SWAP1 SHL PUSH2 0x480 MSTORE DUP4 MLOAD DUP5 SWAP1 PUSH1 0x0 SWAP1 PUSH3 0x948 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x380 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH3 0x97B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3A0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP DUP4 PUSH1 0x2 DUP2 MLOAD DUP2 LT PUSH3 0x9AE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x3C0 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 SHL DUP2 MSTORE POP POP PUSH1 0x3 DUP5 MLOAD GT PUSH3 0x9E5 JUMPI PUSH1 0x0 PUSH3 0x9FC JUMP JUMPDEST DUP4 PUSH1 0x3 DUP2 MLOAD DUP2 LT PUSH3 0x9F3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x3E0 MSTORE DUP4 MLOAD PUSH1 0x4 LT PUSH3 0xA1F JUMPI PUSH1 0x0 PUSH3 0xA36 JUMP JUMPDEST DUP4 PUSH1 0x4 DUP2 MLOAD DUP2 LT PUSH3 0xA2D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x400 MSTORE DUP4 MLOAD PUSH1 0x5 LT PUSH3 0xA59 JUMPI PUSH1 0x0 PUSH3 0xA70 JUMP JUMPDEST DUP4 PUSH1 0x5 DUP2 MLOAD DUP2 LT PUSH3 0xA67 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD JUMPDEST PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH2 0x420 MSTORE POP POP PUSH2 0x440 MSTORE POP PUSH3 0x13F3 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH3 0xAB3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH3 0xADE JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP DUP3 MLOAD PUSH1 0x0 EQ ISZERO PUSH3 0xB21 JUMPI DUP2 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xAFB JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH3 0xC2A JUMP JUMPDEST DUP3 MLOAD JUMPDEST PUSH1 0x0 DUP2 GT DUP1 ISZERO PUSH3 0xB5D JUMPI POP DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH3 0xB4A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GT JUMPDEST ISZERO PUSH3 0xBAA JUMPI DUP4 PUSH1 0x1 DUP3 SUB DUP2 MLOAD DUP2 LT PUSH3 0xB73 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xB88 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x0 NOT ADD PUSH3 0xB24 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0xBF9 JUMPI DUP5 DUP2 DUP2 MLOAD DUP2 LT PUSH3 0xBC3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xBD8 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH3 0xBAD JUMP JUMPDEST POP DUP3 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xC08 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 PUSH3 0xC41 JUMPI PUSH3 0xC41 DUP2 PUSH3 0xE07 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST DUP1 PUSH3 0xC41 DUP2 PUSH3 0xE1C JUMP JUMPDEST PUSH3 0xC6F PUSH3 0xC64 PUSH3 0xEA3 JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH3 0xC30 JUMP JUMPDEST PUSH3 0xC88 PUSH3 0xC7D PUSH3 0xEAC JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH3 0xC30 JUMP JUMPDEST PUSH3 0xCAA DUP2 PUSH1 0xC0 PUSH1 0x3F PUSH1 0x8 SLOAD PUSH3 0xEB8 PUSH1 0x20 SHL PUSH3 0x11ED OR SWAP1 SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH3 0xCDF SWAP1 DUP4 SWAP1 PUSH3 0x1381 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH3 0xD05 DUP3 DUP5 EQ DUP1 ISZERO PUSH3 0xCFD JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH3 0xC30 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ADDRESS EQ ISZERO PUSH3 0xD2E JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH3 0xDD9 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x313CE567 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xD6A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH3 0xD7F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH3 0xDA5 SWAP2 SWAP1 PUSH3 0x12AD JUMP JUMPDEST PUSH1 0xFF AND SWAP1 POP PUSH1 0x0 PUSH3 0xDC4 PUSH1 0x12 DUP4 PUSH3 0xEDD PUSH1 0x20 SHL PUSH3 0x1210 OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP DUP1 PUSH1 0xA EXP PUSH8 0xDE0B6B3A7640000 MUL SWAP3 POP POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH3 0xDF6 JUMPI PUSH1 0x0 PUSH3 0xDF9 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH3 0xE19 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0xEF5 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH3 0xE2D JUMPI PUSH3 0xE19 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH3 0xE3D JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH3 0xD05 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0xE67 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH3 0xE98 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH3 0xC30 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH3 0xE4E JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0xEC7 DUP5 DUP5 DUP5 PUSH3 0xF56 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH3 0xEEF DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH3 0xC30 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH3 0xF67 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0xC30 JUMP JUMPDEST PUSH3 0xFA0 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0xF98 JUMPI POP PUSH3 0xF94 PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0xFB1 PUSH1 0x20 SHL PUSH3 0x1226 OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0xC30 JUMP JUMPDEST PUSH3 0xD05 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0xC30 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0xFC2 JUMPI DUP2 PUSH3 0xFC4 JUMP JUMPDEST DUP3 JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH3 0x100E JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH3 0x103E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH3 0x103E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x103E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH3 0x1021 JUMP JUMPDEST POP PUSH3 0x104C SWAP3 SWAP2 POP PUSH3 0x1050 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x104C JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x1051 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x1078 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x108F PUSH3 0x1089 DUP3 PUSH3 0x13B1 JUMP JUMPDEST PUSH3 0x138A JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x10B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP6 DUP2 LT ISZERO PUSH3 0x10E1 JUMPI DUP3 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH3 0x10CE JUMPI DUP3 DUP4 REVERT JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x10B5 JUMP JUMPDEST POP POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x10FE JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x110F PUSH3 0x1089 DUP3 PUSH3 0x13B1 JUMP JUMPDEST DUP2 DUP2 MSTORE SWAP2 POP PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP5 DUP2 ADD DUP2 DUP5 MUL DUP7 ADD DUP3 ADD DUP8 LT ISZERO PUSH3 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH3 0x115D JUMPI DUP2 MLOAD PUSH3 0x114A DUP2 PUSH3 0x13DD JUMP JUMPDEST DUP5 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH3 0x1134 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x117A JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1193 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH3 0xFC4 DUP2 PUSH3 0x13DD JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x11B6 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP5 MLOAD PUSH3 0x11C3 DUP2 PUSH3 0x13DD JUMP JUMPDEST PUSH1 0x20 DUP7 DUP2 ADD MLOAD SWAP2 SWAP6 POP SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x11E2 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP2 DUP9 ADD SWAP2 POP DUP9 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x11F6 JUMPI DUP6 DUP7 REVERT JUMPDEST DUP2 MLOAD PUSH3 0x1207 PUSH3 0x1089 DUP3 PUSH3 0x13B1 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP5 DUP2 ADD SWAP1 DUP5 DUP7 ADD DUP7 DUP5 MUL DUP7 ADD DUP8 ADD DUP14 LT ISZERO PUSH3 0x1224 JUMPI DUP10 DUP11 REVERT JUMPDEST DUP10 SWAP6 POP JUMPDEST DUP4 DUP7 LT ISZERO PUSH3 0x1253 JUMPI DUP1 MLOAD PUSH3 0x123E DUP2 PUSH3 0x13DD JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 SWAP6 SWAP1 SWAP6 ADD SWAP5 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH3 0x1228 JUMP JUMPDEST POP PUSH1 0x40 DUP12 ADD MLOAD SWAP1 SWAP9 POP SWAP5 POP POP POP DUP1 DUP4 GT ISZERO PUSH3 0x126D JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH3 0x127B DUP10 DUP5 DUP11 ADD PUSH3 0x10ED JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD MLOAD SWAP3 POP DUP1 DUP4 GT ISZERO PUSH3 0x1291 JUMPI DUP4 DUP5 REVERT JUMPDEST POP POP PUSH3 0x12A1 DUP8 DUP3 DUP9 ADD PUSH3 0x1067 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x12BF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH3 0xFC4 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 ADD DUP6 DUP4 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0x80 DUP7 ADD SWAP2 POP DUP3 DUP9 ADD SWAP4 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x131C JUMPI PUSH3 0x1309 DUP6 MLOAD PUSH3 0x13D1 JUMP JUMPDEST DUP4 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x12F4 JUMP JUMPDEST POP POP DUP5 DUP2 SUB PUSH1 0x40 DUP7 ADD MSTORE DUP6 MLOAD DUP1 DUP3 MSTORE SWAP1 DUP3 ADD SWAP3 POP DUP2 DUP7 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x135E JUMPI PUSH3 0x134B DUP4 MLOAD PUSH3 0x13D1 JUMP JUMPDEST DUP6 MSTORE SWAP4 DUP4 ADD SWAP4 SWAP2 DUP4 ADD SWAP2 PUSH1 0x1 ADD PUSH3 0x1336 JUMP JUMPDEST POP SWAP3 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x3 DUP4 LT PUSH3 0x137B JUMPI INVALID JUMPDEST SWAP2 SWAP1 MSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH3 0x13A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH3 0x13C7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP PUSH1 0x20 SWAP1 DUP2 MUL ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0xE19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0xC0 MLOAD PUSH1 0xE0 MLOAD PUSH2 0x100 MLOAD PUSH1 0x60 SHR PUSH2 0x120 MLOAD PUSH1 0x60 SHR PUSH2 0x140 MLOAD PUSH2 0x160 MLOAD PUSH2 0x180 MLOAD PUSH2 0x1A0 MLOAD PUSH1 0x60 SHR PUSH2 0x1C0 MLOAD PUSH2 0x1E0 MLOAD PUSH2 0x200 MLOAD PUSH1 0x60 SHR PUSH2 0x220 MLOAD PUSH1 0x60 SHR PUSH2 0x240 MLOAD PUSH1 0x60 SHR PUSH2 0x260 MLOAD PUSH1 0x60 SHR PUSH2 0x280 MLOAD PUSH1 0x60 SHR PUSH2 0x2A0 MLOAD PUSH1 0x60 SHR PUSH2 0x2C0 MLOAD PUSH2 0x2E0 MLOAD PUSH2 0x300 MLOAD PUSH2 0x320 MLOAD PUSH2 0x340 MLOAD PUSH2 0x360 MLOAD PUSH2 0x380 MLOAD PUSH1 0x60 SHR PUSH2 0x3A0 MLOAD PUSH1 0x60 SHR PUSH2 0x3C0 MLOAD PUSH1 0x60 SHR PUSH2 0x3E0 MLOAD PUSH1 0x60 SHR PUSH2 0x400 MLOAD PUSH1 0x60 SHR PUSH2 0x420 MLOAD PUSH1 0x60 SHR PUSH2 0x440 MLOAD PUSH2 0x460 MLOAD PUSH1 0xF8 SHR PUSH2 0x480 MLOAD PUSH1 0xF8 SHR PUSH2 0x3132 PUSH3 0x15A1 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x1FB7 MSTORE POP DUP1 PUSH2 0x1D81 MSTORE POP DUP1 PUSH2 0x12AB MSTORE POP DUP1 PUSH2 0xEFC MSTORE DUP1 PUSH2 0x1515 MSTORE POP DUP1 PUSH2 0xA4F MSTORE DUP1 PUSH2 0x14E5 MSTORE POP DUP1 PUSH2 0x85B MSTORE DUP1 PUSH2 0x14B5 MSTORE POP DUP1 PUSH2 0xDD7 MSTORE DUP1 PUSH2 0x1485 MSTORE POP DUP1 PUSH2 0xE43 MSTORE DUP1 PUSH2 0x1455 MSTORE POP DUP1 PUSH2 0xED8 MSTORE DUP1 PUSH2 0x1425 MSTORE POP DUP1 PUSH2 0x88E MSTORE POP DUP1 PUSH2 0x1168 MSTORE POP DUP1 PUSH2 0xE91 MSTORE POP DUP1 PUSH2 0x711 MSTORE POP DUP1 PUSH2 0x80E MSTORE POP DUP1 PUSH2 0x1144 MSTORE POP DUP1 PUSH2 0x1F6B MSTORE POP DUP1 PUSH2 0x1F29 MSTORE POP DUP1 PUSH2 0x1EE7 MSTORE POP DUP1 PUSH2 0x1EA5 MSTORE POP DUP1 PUSH2 0x1E63 MSTORE POP DUP1 PUSH2 0x1E21 MSTORE POP DUP1 PUSH2 0xC65 MSTORE POP DUP1 PUSH2 0x13F9 MSTORE DUP1 PUSH2 0x21AA MSTORE POP DUP1 PUSH2 0xF2A MSTORE POP DUP1 PUSH2 0x9F0 MSTORE POP DUP1 PUSH2 0x13D0 MSTORE POP DUP1 PUSH2 0x13AC MSTORE POP DUP1 PUSH2 0xD37 MSTORE POP DUP1 PUSH2 0xD13 MSTORE POP DUP1 PUSH2 0xC9D MSTORE POP DUP1 PUSH2 0x20E8 MSTORE POP DUP1 PUSH2 0x212A MSTORE POP DUP1 PUSH2 0x2109 MSTORE POP PUSH2 0x3132 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x399 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82687A56 GT PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xB2469446 GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xE3C6137D GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE3C6137D EQ PUSH2 0x6E4 JUMPI DUP1 PUSH4 0xEAECB2B8 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0xF4E81884 EQ PUSH2 0x6FC JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x698 JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6AB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6BE JUMPI DUP1 PUSH4 0xDD93A2C9 EQ PUSH2 0x6D1 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xBB2478D4 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xBB2478D4 EQ PUSH2 0x678 JUMPI DUP1 PUSH4 0xC9E51C90 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0xD25FC61A EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x690 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xB2469446 EQ PUSH2 0x660 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x668 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x670 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x187 JUMPI DUP1 PUSH4 0xA8E59C7C GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xA8E59C7C EQ PUSH2 0x62A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x632 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x645 JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x64D JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5FF JUMPI DUP1 PUSH4 0x98411490 EQ PUSH2 0x607 JUMPI DUP1 PUSH4 0x9A3B9CCE EQ PUSH2 0x60F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x617 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x87EC6817 GT PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x5C9 JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x5DC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x5E4 JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x5EC JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x82687A56 EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5AE JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x5B6 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2CE JUMPI DUP1 PUSH4 0x48ADE7B0 GT PUSH2 0x26C JUMPI DUP1 PUSH4 0x6028BFD4 GT PUSH2 0x23B JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x53E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x55F JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x572 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x593 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x48ADE7B0 EQ PUSH2 0x508 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x51B JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x536 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x3EB3ED29 EQ PUSH2 0x4E5 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0x42E68AAD EQ PUSH2 0x4F5 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4CA JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x33B JUMPI DUP1 PUSH4 0x21E63146 GT PUSH2 0x315 JUMPI DUP1 PUSH4 0x21E63146 EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x498 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x1D936C67 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x460 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xA3F0F60 GT PUSH2 0x377 JUMPI DUP1 PUSH4 0xA3F0F60 EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x14841DB4 EQ PUSH2 0x404 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x1A16A923 EQ PUSH2 0x42C JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x64CA1B8 EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3BC JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3D1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A6 PUSH2 0x70F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3C4 PUSH2 0x733 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x3DF CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2F47 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x7E0 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x412 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3B JUMP JUMPDEST PUSH2 0x7F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2F06 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x806 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x80C JUMP JUMPDEST PUSH2 0x43C PUSH2 0x830 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x453 PUSH2 0x859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2EA5 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x87D JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x88C JUMP JUMPDEST PUSH2 0x478 PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2EB9 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A25 JUMP JUMPDEST PUSH2 0x94B JUMP JUMPDEST PUSH2 0x4A0 PUSH2 0x9BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x30A3 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x9C8 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x9D2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3A6 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x4E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0xA12 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xA4D JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xA71 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x503 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0xA85 JUMP JUMPDEST PUSH2 0x453 PUSH2 0x516 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x529 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C9D JUMP JUMPDEST PUSH2 0xA9B JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0xACB JUMP JUMPDEST PUSH2 0x551 PUSH2 0x54C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xADE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP3 SWAP2 SWAP1 PUSH2 0x308A JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x56D CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xB15 JUMP JUMPDEST PUSH2 0x585 PUSH2 0x580 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xB30 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP3 SWAP2 SWAP1 PUSH2 0x2F19 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x5A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xC58 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0xC63 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xC87 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x5C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C41 JUMP JUMPDEST PUSH2 0xC99 JUMP JUMPDEST PUSH2 0x551 PUSH2 0x5D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xCEB JUMP JUMPDEST PUSH2 0x453 PUSH2 0xD11 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xD35 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x5FA CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xD59 JUMP JUMPDEST PUSH2 0x3C4 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0xDF9 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0xE03 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xE41 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x640 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0xE65 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x65B CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xE7C JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0xE8F JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xEC4 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xED6 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xEFA JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0xF1E JUMP JUMPDEST PUSH2 0x453 PUSH2 0xF28 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x6A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A65 JUMP JUMPDEST PUSH2 0xF4C JUMP JUMPDEST PUSH2 0x585 PUSH2 0x6B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x6CC CALLDATASIZE PUSH1 0x4 PUSH2 0x29ED JUMP JUMPDEST PUSH2 0x10FA JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x6DF CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x1137 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x1142 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x1166 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x118A JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x70A CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x1194 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7BF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x794 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7BF JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x7A2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x123C JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x12A4 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7FF DUP4 DUP4 PUSH2 0x12D0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x83D PUSH2 0x138D JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x848 PUSH2 0x13AA JUMP JUMPDEST SWAP2 POP PUSH2 0x852 PUSH2 0x13CE JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x887 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x8BC PUSH2 0x13F7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x901 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x944 JUMPI PUSH2 0x918 DUP2 PUSH2 0x141B JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x924 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x907 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x958 DUP6 CALLER PUSH2 0x10FA JUMP JUMPDEST SWAP1 POP PUSH2 0x97C CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0x974 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x987 DUP6 DUP6 DUP6 PUSH2 0x1552 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x9A2 JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x9B4 JUMPI PUSH2 0x9B4 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x123C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x118A JUMP JUMPDEST PUSH2 0x9DA PUSH2 0x1632 JUMP JUMPDEST PUSH2 0x9E2 PUSH2 0x1678 JUMP JUMPDEST PUSH2 0x9EB DUP2 PUSH2 0x168B JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x7D6 SWAP2 DUP6 SWAP1 PUSH2 0xA48 SWAP1 DUP7 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x123C JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0xA79 PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x0 PUSH2 0x1716 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7EB DUP3 PUSH2 0x17A7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x141B JUMP JUMPDEST PUSH2 0xAA3 PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xAAB PUSH2 0x1678 JUMP JUMPDEST PUSH2 0xAB5 DUP3 DUP3 PUSH2 0x1849 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xAC1 PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x1 PUSH2 0x1957 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x887 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x19AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xAF4 DUP7 MLOAD PUSH2 0xAEF PUSH2 0x13F7 JUMP JUMPDEST PUSH2 0x19BD JUMP JUMPDEST PUSH2 0xB09 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x19CA PUSH2 0x1A09 PUSH2 0x1A78 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xB5A PUSH2 0xB3F PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x1544 JUMP JUMPDEST PUSH2 0xB6F PUSH2 0xB65 PUSH2 0x9EE JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xB7C DUP7 PUSH2 0x1C2D JUMP JUMPDEST ISZERO PUSH2 0xBA4 JUMPI PUSH2 0xB89 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0xB9B DUP10 PUSH2 0xB95 PUSH2 0x806 JUMP JUMPDEST DUP9 PUSH2 0x1C6F JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xBF6 JUMP JUMPDEST PUSH2 0xBAC PUSH2 0x1C9B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBB6 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP PUSH2 0xBC2 DUP11 DUP3 PUSH2 0x1CA3 JUMP JUMPDEST PUSH2 0xBE6 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xBD2 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0xBDC JUMPI DUP14 PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x19CA JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xBF4 DUP4 DUP3 PUSH2 0x1A09 JUMP JUMPDEST POP JUMPDEST PUSH2 0xC00 DUP12 DUP3 PUSH2 0x1D0C JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xC19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC43 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0xD59 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0xC8F PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x1 PUSH2 0x1716 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCCE SWAP3 SWAP2 SWAP1 PUSH2 0x2E2F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xCFC DUP7 MLOAD PUSH2 0xAEF PUSH2 0x13F7 JUMP JUMPDEST PUSH2 0xB09 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x19CA PUSH2 0x1D16 PUSH2 0x1A78 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7BF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x794 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7BF JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x1D7F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE10 CALLER DUP6 PUSH2 0x10FA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0xE2A JUMPI PUSH2 0xE25 CALLER DUP6 PUSH1 0x0 PUSH2 0x123C JUMP JUMPDEST PUSH2 0xE37 JUMP JUMPDEST PUSH2 0xE37 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x123C JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x1552 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB PUSH2 0xE8A DUP4 PUSH2 0x1E1D JUMP JUMPDEST PUSH2 0x12A4 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x887 SWAP1 PUSH1 0xFF PUSH2 0x1FAB JUMP JUMPDEST PUSH2 0xECC PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x0 PUSH2 0x1957 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x1FB5 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0xF7B DUP13 PUSH2 0xD59 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF91 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F92 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0xFC2 DUP9 DUP3 PUSH2 0xFB9 DUP8 DUP8 DUP8 PUSH2 0x1FD9 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2018 JUMP JUMPDEST PUSH2 0xFCD DUP9 DUP9 DUP9 PUSH2 0x123C JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xFE6 PUSH2 0xB3F PUSH2 0xD35 JUMP JUMPDEST PUSH2 0xFF1 PUSH2 0xB65 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0xFF9 PUSH2 0x1C9B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1003 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP PUSH2 0x100D PUSH2 0x806 JUMP JUMPDEST PUSH2 0x10BA JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1022 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x19CA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x103B PUSH2 0x1031 PUSH2 0x206F JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x104D PUSH1 0x0 PUSH2 0x1048 PUSH2 0x206F JUMP JUMPDEST PUSH2 0x2076 JUMP JUMPDEST PUSH2 0x1060 DUP12 PUSH2 0x1059 PUSH2 0x206F JUMP JUMPDEST DUP5 SUB PUSH2 0x2076 JUMP JUMPDEST PUSH2 0x106A DUP2 DUP5 PUSH2 0x1D16 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1083 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10AD JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xC4B JUMP JUMPDEST PUSH2 0x10C4 DUP9 DUP3 PUSH2 0x1CA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x10EC DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x10D8 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x10E2 JUMPI DUP14 PUSH2 0x10E5 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x19CA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1060 DUP12 DUP4 PUSH2 0x2076 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1104 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1126 JUMPI POP PUSH1 0x0 NOT PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x1130 DUP4 DUP4 PUSH2 0x2080 JUMP JUMPDEST SWAP1 POP PUSH2 0x7DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x20AB JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x20E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x2181 JUMP JUMPDEST DUP1 PUSH2 0xAB5 DUP2 PUSH2 0x21E5 JUMP JUMPDEST PUSH2 0x11C1 DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x11BA JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x1544 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x11DC JUMPI PUSH1 0x0 PUSH2 0x11DF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11FA DUP5 DUP5 DUP5 PUSH2 0x225E JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1220 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x1544 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1235 JUMPI DUP2 PUSH2 0x7FF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1297 SWAP1 DUP6 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB PUSH32 0x0 DUP4 PUSH2 0x1FAB JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x12ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1317 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1386 JUMPI PUSH2 0x132E PUSH2 0xC63 JUMP JUMPDEST DUP2 EQ PUSH2 0x1365 JUMPI DUP4 PUSH2 0x133D PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x134C JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x134E JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1358 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1367 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1373 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x131D JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1397 PUSH2 0x13CE JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x887 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1449 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1479 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x14A9 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x14D9 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1509 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1539 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST PUSH2 0x7EE PUSH2 0x135 PUSH2 0x22A4 JUMP JUMPDEST DUP2 PUSH2 0xAB5 JUMPI PUSH2 0xAB5 DUP2 PUSH2 0x22A4 JUMP JUMPDEST PUSH2 0x1569 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x1580 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x158B DUP4 DUP4 DUP4 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x15B1 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x15E0 SWAP1 DUP3 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1297 SWAP1 DUP6 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1661 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP PUSH2 0x9EB PUSH2 0x1670 DUP3 CALLER PUSH2 0x22E4 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0xA83 PUSH2 0x1683 PUSH2 0x138D JUMP JUMPDEST PUSH2 0x192 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x16A0 PUSH2 0x1696 PUSH2 0x23CD JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x16B5 PUSH2 0x16AB PUSH2 0x23D6 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x16C6 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x11ED JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x16F9 SWAP1 DUP4 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x7FF DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x1544 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1736 JUMPI PUSH2 0x1731 PUSH2 0x1727 PUSH2 0x13AA JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x174B JUMP JUMPDEST PUSH2 0x174B PUSH2 0x1741 PUSH2 0x13CE JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x16F9 SWAP1 DUP4 SWAP1 PUSH2 0x2F47 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x17C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17EF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1386 JUMPI DUP4 PUSH2 0x1807 PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x1816 JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x1818 JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1822 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1836 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x17F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1853 PUSH2 0x9EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x185F PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x188C SWAP3 SWAP2 SWAP1 PUSH2 0x300B JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18DC SWAP2 SWAP1 PUSH2 0x2D03 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x1929 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2FF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1966 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x11C6 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x1999 SWAP1 DUP4 SWAP1 PUSH2 0x2F47 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0x9EB JUMPI PUSH2 0x9EB PUSH2 0xA83 JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xAB5 DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A00 SWAP1 PUSH2 0x3053 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1A18 SWAP1 DUP3 SWAP1 PUSH2 0x19BD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1A53 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A32 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A46 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x23E2 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A5F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1A1B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1B67 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x1A9C SWAP3 SWAP2 SWAP1 PUSH2 0x2E5F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1AD9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1AED JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x1B49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x1B6F PUSH2 0x1C9B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B79 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B85 DUP8 DUP3 PUSH2 0x1CA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1B9D DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1BAF DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x7EB JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1C52 SWAP2 SWAP1 PUSH2 0x2D43 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA83 PUSH2 0x1C67 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1C7E DUP5 PUSH2 0x2433 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x1C8D DUP8 DUP8 DUP5 PUSH2 0x2449 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xA83 PUSH2 0x1678 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1CB2 SWAP1 DUP3 SWAP1 PUSH2 0x19BD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1CED DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1CCC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1CE0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x24F8 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1CF9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1CB5 JUMP JUMPDEST PUSH2 0xAB5 DUP3 DUP3 PUSH2 0x252E JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1D25 SWAP1 DUP3 SWAP1 PUSH2 0x19BD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1D60 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1D53 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x25FA JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D6C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1D28 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DAD PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x887 SWAP2 SWAP1 PUSH2 0x2C81 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E61 JUMPI POP PUSH1 0x0 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EA3 JUMPI POP PUSH1 0x1 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EE5 JUMPI POP PUSH1 0x2 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1F27 JUMPI POP PUSH1 0x3 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1F69 JUMPI POP PUSH1 0x4 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1539 JUMPI POP PUSH1 0x5 PUSH2 0x7EE JUMP JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2023 DUP6 PUSH2 0x2648 JUMP JUMPDEST SWAP1 POP PUSH2 0x2039 PUSH2 0x2033 DUP8 DUP4 DUP8 PUSH2 0x2664 JUMP JUMPDEST DUP4 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x2048 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x1544 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH2 0xAB5 DUP3 DUP3 PUSH2 0x2731 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20C2 PUSH2 0x20B8 PUSH2 0xC63 JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x20CA PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x20E0 JUMPI PUSH2 0x20DB DUP3 PUSH1 0x1 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x7EB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2151 PUSH2 0x27C4 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2166 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2FC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x218B PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x21A1 JUMPI PUSH2 0x219C DUP3 PUSH1 0x1 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x21A3 JUMP JUMPDEST DUP2 JUMPDEST SWAP1 POP PUSH2 0x7EE PUSH32 0x0 DUP3 LT DUP1 ISZERO PUSH2 0x21DE JUMPI POP PUSH2 0x21DA PUSH2 0xC63 JUMP JUMPDEST DUP3 EQ ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x21F4 JUMPI PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2203 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x11C1 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x222B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2254 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x1544 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2214 JUMP JUMPDEST PUSH2 0x226D PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x2295 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x21DE JUMPI POP PUSH2 0x228B PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1226 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x11C1 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x9EB DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x27C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22DD DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x1544 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x2303 PUSH2 0xD11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x231E JUMPI POP PUSH2 0x231E DUP4 PUSH2 0x2843 JUMP JUMPDEST ISZERO PUSH2 0x2346 JUMPI PUSH2 0x232B PUSH2 0xD11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x234E PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x237D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1130 SWAP2 SWAP1 PUSH2 0x2B7E JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23F1 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1544 JUMP JUMPDEST DUP3 PUSH2 0x23FE JUMPI POP PUSH1 0x0 PUSH2 0x7DA JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2421 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2418 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x1544 JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x242A JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x7DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7FF SWAP2 SWAP1 PUSH2 0x2D5F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2457 DUP4 DUP6 PUSH2 0x23E2 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2471 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x249B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x24EF JUMPI PUSH2 0x24D0 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x24BA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x24F8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x24DC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x24A1 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x251C DUP5 ISZERO DUP1 PUSH2 0x2515 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2512 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x1544 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2545 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x2551 DUP3 PUSH1 0x0 DUP4 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2577 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x25AA PUSH2 0x25A5 DUP3 PUSH2 0x259F PUSH2 0x806 JUMP JUMPDEST SWAP1 PUSH2 0x28B1 JUMP JUMPDEST PUSH2 0x28BF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x25EE SWAP2 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2609 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1544 JUMP JUMPDEST DUP3 PUSH2 0x2616 JUMPI POP PUSH1 0x0 PUSH2 0x7DA JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2630 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2418 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x263C JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x7DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2652 PUSH2 0x20E4 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCCE SWAP3 SWAP2 SWAP1 PUSH2 0x2E6F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2676 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x26AF SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x3022 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2725 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x273D PUSH1 0x0 DUP4 DUP4 PUSH2 0x11C1 JUMP JUMPDEST PUSH2 0x2752 PUSH2 0x25A5 DUP3 PUSH2 0x274C PUSH2 0x806 JUMP JUMPDEST SWAP1 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2775 SWAP1 DUP3 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x25EE SWAP1 DUP6 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x286E PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0xC99 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x28A2 JUMPI POP PUSH2 0x289F PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0xC99 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0x7EB JUMPI POP PUSH2 0x7EB DUP3 PUSH2 0x28C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7FF DUP4 DUP4 PUSH1 0x1 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x28DA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x28F0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MUL PUSH2 0x2900 DUP3 DUP3 ADD PUSH2 0x30B1 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP4 POP DUP2 DUP5 ADD DUP6 DUP4 ADD DUP3 DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x291C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x293F JUMPI DUP1 CALLDATALOAD DUP3 MSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2921 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x295A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2970 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x29A1 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x30B1 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x29B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29E2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7FF DUP2 PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29FF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2A0A DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2A1A DUP2 PUSH2 0x30D8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A39 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2A44 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2A54 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2A7F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x2A8A DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x2A9A DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x2AB8 DUP2 PUSH2 0x30ED JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2AE7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2AF2 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B11 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2B33 DUP5 DUP3 DUP6 ADD PUSH2 0x28CA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B4D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B63 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x2B6F DUP6 DUP3 DUP7 ADD PUSH2 0x28CA JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B8F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x7FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2BB8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x2BCA DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x2BDA DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BF6 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C02 DUP12 DUP4 DUP13 ADD PUSH2 0x28CA JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C25 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2C32 DUP11 DUP3 DUP12 ADD PUSH2 0x294A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C52 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x7FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C92 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x7FF DUP2 PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2CAF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2CBA DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2CD5 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2CE1 DUP6 DUP3 DUP7 ADD PUSH2 0x294A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CFC JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D18 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x2D38 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D54 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x7FF DUP2 PUSH2 0x30ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D71 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x2D7C DUP2 PUSH2 0x30ED JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2DBB JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D9F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DEB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2DCF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2DFC JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2EFA JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2ED5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x7FF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x2F2C PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2D8C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2F3E DUP2 DUP6 PUSH2 0x2D8C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2B33 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2DC6 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x7FF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2DC6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH32 0x4E4F545F494D504C454D454E5445440000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2B33 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x30D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x9EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x9EB JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF 0x1E 0xE8 0x1E PUSH13 0x1BD691798B1BBD344E3915D8D8 0xAA BYTE MSTORE8 CHAINID NUMBER DUP5 PUSH17 0xD4B38DB2B1BD3164736F6C634300070100 CALLER ", + "sourceMap": "872:4426:65:-:0;;;950:912;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1177:238;;;;;;;;1227:35;1241:6;1256:4;1227:13;;;:35;;:::i;:::-;1177:238;;;;1300:18;1177:238;;;;1369:31;1177:238;;;1456:5;1475:33;4845:2186:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4845:2186:28;;;1593:35:65;1607:6;1622:4;1593:13;;;:35;;:::i;:::-;1656:6;:13;1672:1;1656:17;-1:-1:-1;;;;;1642:32:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1642:32:65;;1688:4;1743:1;1758;1781;5893:19:28;5914:20;5807:4;5813:6;5821:5;5858;5767:10;-1:-1:-1;;;;;5759:19:28;5751:28;;1749:9:26;1301:4:52;2020:280:50;;;;;;;;;;;;;-1:-1:-1;;;2020:280:50;;;1713:9:26;1724:11;2126:5:51;2118;:13;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2141:17:51;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;;2168:9:51;:14;;-1:-1:-1;;2168:14:51;2180:2;2168:14;;;-1:-1:-1;2100:22:50;;;;;;;2085:37;;2150:25;;;;;2132:43;;-1:-1:-1;2198:95:50;2185:108;;2049:46:38;;-1:-1:-1;;;;;;1724:14:29;;;;;;2168::51;1724::29;1770::26;;;;::::2;::::0;-1:-1:-1;2578:93:45;;-1:-1:-1;2284:7:45;2587:49;;;10056:3:10;2578:8:45;:93::i;:::-;2681:96;2352:7;2690:51;;;10120:3:10;2681:8:45;:96::i;:::-;2817:15;:37;;;2865:40;;;;2938:41;2915:64;;5959:13:28;;5950:57:::4;::::0;3201:1:::4;-1:-1:-1::0;5959:28:28::4;5921:3:10;5950:8:28;:57::i;:::-;6017:61;6043:15;:13;:15::i;:::-;6026:13:::0;;:32:::4;;5969:3:10;6017:8:28;:61::i;:::-;6626:40;6659:6;6626:32;;;;;:40;;:::i;:::-;6677;6699:17:::0;6677:21:::4;:40::i;:::-;6745:34;::::0;-1:-1:-1;;;6745:34:28;;6728:14:::4;::::0;-1:-1:-1;;;;;6745:18:28;::::4;::::0;::::4;::::0;:34:::4;::::0;6764:14;;6745:34:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6790:51;::::0;-1:-1:-1;;;6790:51:28;;6728;;-1:-1:-1;;;;;;6790:20:28;::::4;::::0;::::4;::::0;:51:::4;::::0;6728;;6819:6;;6827:13;;6790:51:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;6951:6;6941:16;;;;::::0;::::4;6992:5;-1:-1:-1::0;;;;;6992:30:28::4;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6967:57;::::0;-1:-1:-1;;;;;;6967:57:28;::::4;::::0;-1:-1:-1;;4590:23:59;;:30;;-1:-1:-1;4630:62:59;;-1:-1:-1;;1568:1:59;4639:33;;;-1:-1:-1;5921:3:10;;-1:-1:-1;4630:8:59;;-1:-1:-1;;;;4630:62:59:i;:::-;4702:179;4765:1;4751:11;:15;4780:6;:25;;;:32;4826:6;:38;;;:45;4702:35;;;;;:179;;:::i;:::-;4892:26;;;;5054:23;;:26;;:23;;:26;;;;;;;;;;-1:-1:-1;;;;;5044:36:59;;;-1:-1:-1;;;;;5044:36:59;;;;;;;5100:6;:23;;;5124:1;5100:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5090:36:59;;;-1:-1:-1;;;;;5090:36:59;;;;;;;5146:6;:23;;;5170:1;5146:26;;;;;;;;;;;;;;-1:-1:-1;;;;;5136:36:59;;;-1:-1:-1;;;;;5136:36:59;;;;;;;5206:1;5192:11;:15;:56;;5246:1;5192:56;;;5210:23;;:26;;5234:1;;5210:26;;;;;;;;;;;;5192:56;5182:66;;-1:-1:-1;;;;;;5182:66:59;;;5282:1;5268:15;;:56;;5322:1;5268:56;;;5286:23;;:26;;5310:1;;5286:26;;;;;;;;;;;;5268:56;5258:66;;-1:-1:-1;;;;;;5258:66:59;;;5358:1;5344:15;;:56;;5398:1;5344:56;;;5362:23;;:26;;5386:1;;5362:26;;;;;;;;;;;;5344:56;5334:66;;-1:-1:-1;;;;;;5334:66:59;;;5451:23;;:26;;5429:49;;5451:23;;;:26;;;;;;;;;;5429:21;;;:49;;:::i;:::-;5411:67;;5528:23;;:26;;5506:49;;5528:23;5552:1;;5528:26;;;;;5506:49;5488:67;;5605:23;;:26;;5583:49;;5605:23;5629:1;;5605:26;;;;;5583:49;5565:67;;5674:1;5660:15;;:71;;5730:1;5660:71;;;5678:49;5700:6;:23;;;5724:1;5700:26;;;;;;;5678:49;5642:89;;5773:1;5759:15;;:71;;5829:1;5759:71;;;5777:49;5799:6;:23;;;5823:1;5799:26;;;;;;;5777:49;5741:89;;5872:1;5858:15;;:71;;5928:1;5858:71;;;5876:49;5898:6;:23;;;5922:1;5898:26;;;;;;;5876:49;5840:89;;6412:23;;:30;-1:-1:-1;;6412:34:59;6383:248;6471:1;6460:8;:12;:64;;;;-1:-1:-1;6476:23:59;;:33;;6519:4;;6476:23;6500:8;;6476:33;;;;;;;;;;;;-1:-1:-1;;;;;6476:48:59;;6460:64;6383:248;;;-1:-1:-1;;6538:10:59;6383:248;;;6640:20;;;;7197:23;;:30;7138:36;;-1:-1:-1;;;;;7177:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7177:51:59;-1:-1:-1;7138:90:59;-1:-1:-1;7239:30:59;;;;7503:1726;7527:23;;:30;7523:34;;7503:1726;;;7586:8;7582:1;:12;7578:1641;;;7633:6;:25;;;7659:1;7633:28;;;;;;;;;;;;;;7614:13;7628:1;7614:16;;;;;;;;;;;;;:47;-1:-1:-1;;;;;7614:47:59;;;-1:-1:-1;;;;;7614:47:59;;;;;7761:162;7850:1;-1:-1:-1;;;;;7816:36:59;:13;7830:1;7816:16;;;;;;;;;;;;;;-1:-1:-1;;;;;7816:36:59;;;7904:1;4198;7874:31;7761:22;:33;;;;;;:162;;;;;:::i;:::-;7736:187;;8011:6;:38;;;8050:1;8011:41;;;;;;;;;;;;;;8007:370;;;8076:88;8119:1;-1:-1:-1;;;;;8085:36:59;:13;8099:1;8085:16;;;;;;;;;;;;;;-1:-1:-1;;;;;8085:36:59;;;9022:3:10;8076:8:59;;;:88;;:::i;:::-;8211:42;8245:4;8251:1;8211:22;:33;;;;;;:42;;;;;:::i;:::-;8186:67;;8288:4;8276:16;;8007:370;;;8354:4;8339:19;;8007:370;7578:1641;;;8406:8;8401:1;:13;8397:822;;8453:6;:25;;;8483:1;8479;:5;8453:32;;;;;;;;;;;;;;8434:13;8448:1;8434:16;;;;;;;;;;;;;:51;-1:-1:-1;;;;;8434:51:59;;;-1:-1:-1;;;;;8434:51:59;;;;;8585:162;8674:1;-1:-1:-1;;;;;8640:36:59;:13;8654:1;8640:16;;;;;;;8585:162;8560:187;;8835:6;:38;;;8878:1;8874;:5;8835:45;;;;;;;;;;;;;;8831:374;;;8904:88;8947:1;-1:-1:-1;;;;;8913:36:59;:13;8927:1;8913:16;;;;;;;8904:88;9039:42;9073:4;9079:1;9039:22;:33;;;;;;:42;;;;;:::i;:::-;9014:67;;9116:4;9104:16;;8831:374;;;9182:4;9167:19;;8831:374;7559:3;;7503:1726;;;-1:-1:-1;9257:10:59;;9239:28;;;;;;9296:13;;9277:32;;;;9452:16;;:13;;9466:1;;9452:16;;;;;;;;;;-1:-1:-1;;;;;9435:33:59;;;-1:-1:-1;;;;;9435:33:59;;;;;;;9495:13;9509:1;9495:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9478:33:59;;;-1:-1:-1;;;;;9478:33:59;;;;;;;9538:13;9552:1;9538:16;;;;;;;;;;;;;;-1:-1:-1;;;;;9521:33:59;;;-1:-1:-1;;;;;9521:33:59;;;;;;;9605:1;9582:13;:20;:24;9581:64;;9643:1;9581:64;;;9610:13;9624:1;9610:16;;;;;;;;;;;;;;9581:64;9564:81;;-1:-1:-1;;;;;;9564:81:59;;;9673:20;;9696:1;-1:-1:-1;9672:64:59;;9734:1;9672:64;;;9701:13;9715:1;9701:16;;;;;;;;;;;;;;9672:64;9655:81;;-1:-1:-1;;;;;;9655:81:59;;;9764:20;;9787:1;-1:-1:-1;9763:64:59;;9825:1;9763:64;;;9792:13;9806:1;9792:16;;;;;;;;;;;;;;9763:64;9746:81;;-1:-1:-1;;;;;;9746:81:59;;;-1:-1:-1;;9838:48:59;;-1:-1:-1;872:4426:65;;-1:-1:-1;;;;;;;872:4426:65;1536:425:42;1611:22;1663:6;:13;1679:1;1663:17;-1:-1:-1;;;;;1650:31:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1650:31:42;;1641:40;;1692:6;:13;1709:1;1692:18;1688:81;;;1734:5;1722:6;1729:1;1722:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1722:17:42;;;-1:-1:-1;;;;;1722:17:42;;;;;1749:13;;1688:81;1799:13;;1790:86;1818:1;1814;:5;:30;;;;;1839:5;-1:-1:-1;;;;;1823:21:42;:6;1834:1;1830;:5;1823:13;;;;;;;;;;;;;;-1:-1:-1;;;;;1823:21:42;;1814:30;1790:86;;;1863:6;1874:1;1870;:5;1863:13;;;;;;;;;;;;;;1851:6;1858:1;1851:9;;;;;;;;-1:-1:-1;;;;;1851:25:42;;;:9;;;;;;;;;;;:25;-1:-1:-1;;1846:3:42;1790:86;;;1887:9;1882:53;1906:1;1902;:5;1882:53;;;1926:6;1933:1;1926:9;;;;;;;;;;;;;;1914:6;1921:1;1914:9;;;;;;;;-1:-1:-1;;;;;1914:21:42;;;:9;;;;;;;;;;;:21;1909:3;;1882:53;;;;1953:5;1941:6;1948:1;1941:9;;;;;;;;;;;;;:17;-1:-1:-1;;;;;1941:17:42;;;-1:-1:-1;;;;;1941:17:42;;;;;1536:425;;;;;;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;10032:224:59:-;10216:33;10032:224;:::o;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:47;;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:47;;;6030:3:10;9078:8:28;:89::i;:::-;9190:147;9224:17;4326:3;4561:2;9190:9;;:20;;;;;;:147;;;;;;:::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;1057:182:43:-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;27427:510:28:-;27495:7;-1:-1:-1;;;;;27518:31:28;;27544:4;27518:31;27514:83;;;-1:-1:-1;945:4:47;27565:21:28;;27514:83;27687:21;27725:5;-1:-1:-1;;;;;27711:30:28;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27687:56;;;;27818:26;27847:27;27856:2;27860:13;27847:8;;;;;:27;;:::i;:::-;27818:56;;27912:18;27908:2;:22;945:4:47;27891:39:28;27884:46;;;;27427:510;;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;1437:126:10:-;1484:28;1492:9;-1:-1:-1;;;1484:7:10;:28::i;:::-;1437:126;:::o;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;;;:51;;:::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;9409:124:28;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2512:395:46:-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;1193:166:49:-;1251:7;1270:37;1279:6;;;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;1670:3378:10:-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;7061:607:46;7197:44;7215:3;7206:12;;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;;;;;:27;;:::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;2020:1;2012:13;2005:20;1928:104;-1:-1:-1;;;1928:104:49:o;872:4426:65:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;872:4426:65;;;-1:-1:-1;872:4426:65;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;20:713:-1;;145:3;138:4;130:6;126:17;122:27;112:2;;-1:-1;;153:12;112:2;193:6;187:13;215:77;230:61;284:6;230:61;:::i;:::-;215:77;:::i;:::-;320:21;;;206:86;-1:-1;364:4;377:14;;;;352:17;;;466;;;457:27;;;;454:36;-1:-1;451:2;;;503:1;;493:12;451:2;528:1;;513:214;538:6;535:1;532:13;513:214;;;2449:6;2443:13;13570:5;11888:13;11881:21;13548:5;13545:32;13535:2;;528:1;;13581:12;13535:2;606:58;;678:14;;;;706;;;;560:1;553:9;513:214;;;517:14;;;;;;105:628;;;;:::o;1575:785::-;;1724:3;1717:4;1709:6;1705:17;1701:27;1691:2;;-1:-1;;1732:12;1691:2;1772:6;1766:13;1794:101;1809:85;1887:6;1809:85;:::i;1794:101::-;1923:21;;;1785:110;-1:-1;1967:4;1980:14;;;;1955:17;;;2069;;;2060:27;;;;2057:36;-1:-1;2054:2;;;2106:1;;2096:12;2054:2;2131:1;2116:238;2141:6;2138:1;2135:13;2116:238;;;3123:6;3117:13;3135:54;3183:5;3135:54;:::i;:::-;2209:82;;2305:14;;;;2333;;;;2163:1;2156:9;2116:238;;;2120:14;;;;;1684:676;;;;:::o;3509:263::-;;3624:2;3612:9;3603:7;3599:23;3595:32;3592:2;;;-1:-1;;3630:12;3592:2;-1:-1;2581:13;;3586:186;-1:-1;3586:186::o;3779:325::-;;3925:2;3913:9;3904:7;3900:23;3896:32;3893:2;;;-1:-1;;3931:12;3893:2;2930:6;2924:13;2942:64;3000:5;2942:64;:::i;4111:1155::-;;;;;4400:3;4388:9;4379:7;4375:23;4371:33;4368:2;;;-1:-1;;4407:12;4368:2;3300:6;3294:13;3312:48;3354:5;3312:48;:::i;:::-;4606:2;4591:18;;;4585:25;4459:89;;-1:-1;4606:2;-1:-1;;;;;4619:30;;;4616:2;;;-1:-1;;4652:12;4616:2;4769:6;4758:9;4754:22;;;910:3;903:4;895:6;891:17;887:27;877:2;;-1:-1;;918:12;877:2;958:6;952:13;980:95;995:79;1067:6;995:79;:::i;980:95::-;1103:21;;;1160:14;;;;1135:17;;;1249;;;1240:27;;;;1237:36;-1:-1;1234:2;;;-1:-1;;1276:12;1234:2;-1:-1;1302:10;;1296:232;1321:6;1318:1;1315:13;1296:232;;;2743:6;2737:13;2755:48;2797:5;2755:48;:::i;:::-;1389:76;;1343:1;1336:9;;;;;1479:14;;;;1507;;1296:232;;;-1:-1;4844:2;4829:18;;4823:25;4672:114;;-1:-1;4823:25;-1:-1;;;4857:30;;;4854:2;;;-1:-1;;4890:12;4854:2;4920:110;5022:7;5013:6;5002:9;4998:22;4920:110;:::i;:::-;4910:120;;5088:2;5077:9;5073:18;5067:25;5053:39;;4630:18;5104:6;5101:30;5098:2;;;-1:-1;;5134:12;5098:2;;;5164:86;5242:7;5233:6;5222:9;5218:22;5164:86;:::i;:::-;5154:96;;;4362:904;;;;;;;:::o;5273:259::-;;5386:2;5374:9;5365:7;5361:23;5357:32;5354:2;;;-1:-1;;5392:12;5354:2;3454:6;3448:13;12904:4;14474:5;12893:16;14451:5;14448:33;14438:2;;-1:-1;;14485:12;8152:770;;8450:2;8439:9;8435:18;7685:5;7662:3;7655:37;8568:2;8450;8568;8557:9;8553:18;8546:48;8608:123;7034:5;11092:12;11668:6;11663:3;11656:19;11696:14;8439:9;11696:14;7046:93;;8568:2;7225:5;10773:14;7237:21;;-1:-1;7264:290;7289:6;7286:1;7283:13;7264:290;;;13015:52;7356:6;7350:13;13015:52;:::i;:::-;7780:65;;11381:14;;;;5905;;;;7311:1;7304:9;7264:290;;;-1:-1;;8769:20;;;8764:2;8749:18;;8742:48;11092:12;;11656:19;;;11696:14;;;;-1:-1;10773:14;;;;-1:-1;6482:260;6507:6;6504:1;6501:13;6482:260;;;11786:24;6574:6;6568:13;11786:24;:::i;:::-;5994:37;;5693:14;;;;11381;;;;7311:1;6522:9;6482:260;;;-1:-1;8796:116;;8421:501;-1:-1;;;;;;;;8421:501::o;8929:264::-;9077:2;9062:18;;13460:1;13450:12;;13440:2;;13466:9;13440:2;7949:71;;;9048:145;:::o;9200:222::-;7655:37;;;9327:2;9312:18;;9298:124::o;9429:256::-;9491:2;9485:9;9517:17;;;-1:-1;;;;;9577:34;;9613:22;;;9574:62;9571:2;;;9649:1;;9639:12;9571:2;9491;9658:22;9469:216;;-1:-1;9469:216::o;9692:301::-;;-1:-1;;;;;9837:30;;9834:2;;;-1:-1;;9870:12;9834:2;-1:-1;9915:4;9903:17;;;9968:15;;9771:222::o;11724:91::-;-1:-1;;;;;12688:54;;11769:46::o;13731:147::-;-1:-1;;;;;12688:54;;13805:50;;13795:2;;13869:1;;13859:12;13789:89;872:4426:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2030": [ + { + "length": 32, + "start": 3383 + } + ], + "2531": [ + { + "length": 32, + "start": 2544 + } + ], + "2533": [ + { + "length": 32, + "start": 3882 + } + ], + "3869": [ + { + "length": 32, + "start": 3347 + } + ], + "5049": [ + { + "length": 32, + "start": 3229 + } + ], + "6104": [ + { + "length": 32, + "start": 5036 + } + ], + "6106": [ + { + "length": 32, + "start": 5072 + } + ], + "8847": [ + { + "length": 32, + "start": 8457 + } + ], + "8849": [ + { + "length": 32, + "start": 8490 + } + ], + "8851": [ + { + "length": 32, + "start": 8424 + } + ], + "13180": [ + { + "length": 32, + "start": 5113 + }, + { + "length": 32, + "start": 8618 + } + ], + "13182": [ + { + "length": 32, + "start": 3173 + } + ], + "13184": [ + { + "length": 32, + "start": 7713 + } + ], + "13186": [ + { + "length": 32, + "start": 7779 + } + ], + "13188": [ + { + "length": 32, + "start": 7845 + } + ], + "13190": [ + { + "length": 32, + "start": 7911 + } + ], + "13192": [ + { + "length": 32, + "start": 7977 + } + ], + "13194": [ + { + "length": 32, + "start": 8043 + } + ], + "13196": [ + { + "length": 32, + "start": 4420 + } + ], + "13198": [ + { + "length": 32, + "start": 2062 + } + ], + "13200": [ + { + "length": 32, + "start": 1809 + } + ], + "13202": [ + { + "length": 32, + "start": 3729 + } + ], + "13204": [ + { + "length": 32, + "start": 4456 + } + ], + "13206": [ + { + "length": 32, + "start": 2190 + } + ], + "13208": [ + { + "length": 32, + "start": 3800 + }, + { + "length": 32, + "start": 5157 + } + ], + "13210": [ + { + "length": 32, + "start": 3651 + }, + { + "length": 32, + "start": 5205 + } + ], + "13212": [ + { + "length": 32, + "start": 3543 + }, + { + "length": 32, + "start": 5253 + } + ], + "13214": [ + { + "length": 32, + "start": 2139 + }, + { + "length": 32, + "start": 5301 + } + ], + "13216": [ + { + "length": 32, + "start": 2639 + }, + { + "length": 32, + "start": 5349 + } + ], + "13218": [ + { + "length": 32, + "start": 3836 + }, + { + "length": 32, + "start": 5397 + } + ], + "13220": [ + { + "length": 32, + "start": 4779 + } + ], + "13222": [ + { + "length": 32, + "start": 7553 + } + ], + "13224": [ + { + "length": 32, + "start": 8119 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106103995760003560e01c806382687a56116101e9578063b24694461161010f578063d505accf116100ad578063e3c6137d1161007c578063e3c6137d146106e4578063eaecb2b8146106ec578063ed24911d146106f4578063f4e81884146106fc57610399565b8063d505accf14610698578063d5c096c4146106ab578063dd62ed3e146106be578063dd93a2c9146106d157610399565b8063bb2478d4116100e9578063bb2478d414610678578063c9e51c9014610680578063d25fc61a14610688578063d2946c2b1461069057610399565b8063b246944614610660578063b35056b814610668578063b7b814fc1461067057610399565b806395d89b4111610187578063a8e59c7c11610156578063a8e59c7c1461062a578063a9059cbb14610632578063aaabadc514610645578063ab7759f11461064d57610399565b806395d89b41146105ff57806398411490146106075780639a3b9cce1461060f578063a457c2d71461061757610399565b806387ec6817116101c357806387ec6817146105c9578063893d20e8146105dc5780638d928af8146105e457806390193b7c146105ec57610399565b806382687a56146105a65780638456cb59146105ae578063851c1bb3146105b657610399565b80633644e515116102ce57806348ade7b01161026c5780636028bfd41161023b5780636028bfd41461053e57806370a082311461055f57806374f3b009146105725780637ecebe001461059357610399565b806348ade7b01461050857806350dd6ed91461051b57806354a844ba1461052e57806355c676281461053657610399565b806339509351116102a857806339509351146104d25780633eb3ed29146104e55780633f4ba83a146104ed57806342e68aad146104f557610399565b80633644e515146104ad57806338e9922e146104b557806338fff2d0146104ca57610399565b80631c0de0511161033b57806321e631461161031557806321e6314614610468578063238a2d591461047057806323b872dd14610485578063313ce5671461049857610399565b80631c0de051146104345780631d936c671461044b5780631dd746ea1461046057610399565b80630a3f0f60116103775780630a3f0f60146103f157806314841db41461040457806318160ddd146104245780631a16a9231461042c57610399565b8063064ca1b81461039e57806306fdde03146103bc578063095ea7b3146103d1575b600080fd5b6103a661070f565b6040516103b39190612f6a565b60405180910390f35b6103c4610733565b6040516103b39190613040565b6103e46103df366004612ad5565b6107c9565b6040516103b39190612f47565b6103e46103ff366004612ceb565b6107e0565b610417610412366004612b3b565b6107f3565b6040516103b39190612f06565b6103a6610806565b6103a661080c565b61043c610830565b6040516103b393929190612f52565b610453610859565b6040516103b39190612ea5565b61041761087d565b6103a661088c565b6104786108b0565b6040516103b39190612eb9565b6103e4610493366004612a25565b61094b565b6104a06109bf565b6040516103b391906130a3565b6103a66109c8565b6104c86104c3366004612ceb565b6109d2565b005b6103a66109ee565b6103e46104e0366004612ad5565b610a12565b610453610a4d565b6104c8610a71565b610417610503366004612b00565b610a85565b610453610516366004612ceb565b610a90565b6104c8610529366004612c9d565b610a9b565b6104c8610ab9565b6103a6610acb565b61055161054c366004612b9e565b610ade565b6040516103b392919061308a565b6103a661056d3660046129d1565b610b15565b610585610580366004612b9e565b610b30565b6040516103b3929190612f19565b6103a66105a13660046129d1565b610c58565b6103a6610c63565b6104c8610c87565b6103a66105c4366004612c41565b610c99565b6105516105d7366004612b9e565b610ceb565b610453610d11565b610453610d35565b6103a66105fa3660046129d1565b610d59565b6103c4610d74565b610453610dd5565b6103e4610df9565b6103e4610625366004612ad5565b610e03565b610453610e41565b6103e4610640366004612ad5565b610e65565b610453610e72565b6103e461065b3660046129d1565b610e7c565b6103a6610e8f565b6103e4610eb3565b6104c8610ec4565b610453610ed6565b610453610efa565b6103e4610f1e565b610453610f28565b6104c86106a6366004612a65565b610f4c565b6105856106b9366004612b9e565b610fd7565b6103a66106cc3660046129ed565b6110fa565b6103a66106df366004612ceb565b611137565b6103a6611142565b6103a6611166565b6103a661118a565b6103a661070a366004612ceb565b611194565b7f000000000000000000000000000000000000000000000000000000000000000090565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107bf5780601f10610794576101008083540402835291602001916107bf565b820191906000526020600020905b8154815290600101906020018083116107a257829003601f168201915b5050505050905090565b60006107d633848461123c565b5060015b92915050565b60006107eb826112a4565b90505b919050565b60606107ff83836112d0565b9392505050565b60025490565b7f000000000000000000000000000000000000000000000000000000000000000090565b600080600061083d61138d565b1592506108486113aa565b91506108526113ce565b9050909192565b7f000000000000000000000000000000000000000000000000000000000000000090565b60606108876113f2565b905090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606060006108bc6113f7565b905060608167ffffffffffffffff811180156108d757600080fd5b50604051908082528060200260200182016040528015610901578160200160208202803683370190505b50905060005b82811015610944576109188161141b565b82828151811061092457fe5b6001600160a01b0390921660209283029190910190910152600101610907565b5091505090565b60008061095885336110fa565b905061097c336001600160a01b03871614806109745750838210155b61019e611544565b610987858585611552565b336001600160a01b038616148015906109a257506000198114155b156109b4576109b4853385840361123c565b506001949350505050565b60055460ff1690565b600061088761118a565b6109da611632565b6109e2611678565b6109eb8161168b565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107d6918590610a489086611704565b61123c565b7f000000000000000000000000000000000000000000000000000000000000000090565b610a79611632565b610a836000611716565b565b60606107eb826117a7565b60006107eb8261141b565b610aa3611632565b610aab611678565b610ab58282611849565b5050565b610ac1611632565b610a836001611957565b6008546000906108879060c0603f6119ae565b60006060610af48651610aef6113f7565b6119bd565b610b09898989898989896119ca611a09611a78565b97509795505050505050565b6001600160a01b031660009081526020819052604090205490565b60608088610b5a610b3f610d35565b6001600160a01b0316336001600160a01b03161460cd611544565b610b6f610b656109ee565b82146101f4611544565b60606000610b7c86611c2d565b15610ba457610b89611c5c565b610b9b89610b95610806565b88611c6f565b92509050610bf6565b610bac611c9b565b6060610bb66113f2565b9050610bc28a82611ca3565b610be68d8d8d8d8d610bd2610eb3565b610bdc578d610bdf565b60005b878e6119ca565b93509150610bf48382611a09565b505b610c008b82611d0c565b81895167ffffffffffffffff81118015610c1957600080fd5b50604051908082528060200260200182016040528015610c43578160200160208202803683370190505b509450945050505b5097509795505050505050565b60006107eb82610d59565b7f000000000000000000000000000000000000000000000000000000000000000090565b610c8f611632565b610a836001611716565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610cce929190612e2f565b604051602081830303815290604052805190602001209050919050565b60006060610cfc8651610aef6113f7565b610b09898989898989896119ca611d16611a78565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107bf5780601f10610794576101008083540402835291602001916107bf565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610887611d7f565b600080610e1033856110fa565b9050808310610e2a57610e253385600061123c565b610e37565b610e37338585840361123c565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006107d6338484611552565b6000610887611da3565b60006107eb610e8a83611e1d565b6112a4565b7f000000000000000000000000000000000000000000000000000000000000000090565b6008546000906108879060ff611fab565b610ecc611632565b610a836000611957565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610887611fb5565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f7b8c610d59565b89604051602001610f9196959493929190612f92565b604051602081830303815290604052805190602001209050610fc28882610fb9878787611fd9565b886101f8612018565b610fcd88888861123c565b5050505050505050565b60608088610fe6610b3f610d35565b610ff1610b656109ee565b610ff9611c9b565b60606110036113f2565b905061100d610806565b6110ba57600060606110228d8d8d868b6119ca565b9150915061103b61103161206f565b83101560cc611544565b61104d600061104861206f565b612076565b6110608b61105961206f565b8403612076565b61106a8184611d16565b808a5167ffffffffffffffff8111801561108357600080fd5b506040519080825280602002602001820160405280156110ad578160200160208202803683370190505b5095509550505050610c4b565b6110c48882611ca3565b600060606110ec8d8d8d8d8d6110d8610eb3565b6110e2578d6110e5565b60005b898e6119ca565b915091506110608b83612076565b6000611104610d35565b6001600160a01b0316826001600160a01b0316141561112657506000196107da565b6111308383612080565b90506107da565b60006107eb826120ab565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006108876120e4565b60006107eb82612181565b80610ab5816121e5565b6111c182841480156111ba57508183145b6067611544565b505050565b60006001821b19841682846111dc5760006111df565b60015b60ff16901b17949350505050565b60006111fa84848461225e565b506001901b60001901811b1992909216911b1790565b6000611220838311156001611544565b50900390565b600081831061123557816107ff565b5090919050565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611297908590612f6a565b60405180910390a3505050565b60006107eb7f000000000000000000000000000000000000000000000000000000000000000083611fab565b6060825160010167ffffffffffffffff811180156112ed57600080fd5b50604051908082528060200260200182016040528015611317578160200160208202803683370190505b50905060005b81518110156113865761132e610c63565b8114611365578361133d610c63565b821061134c576001820361134e565b815b8151811061135857fe5b6020026020010151611367565b825b82828151811061137357fe5b602090810291909101015260010161131d565b5092915050565b60006113976113ce565b42118061088757505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b606090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60008161144957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b816001141561147957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b81600214156114a957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b81600314156114d957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b816004141561150957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b816005141561153957507f00000000000000000000000000000000000000000000000000000000000000006107ee565b6107ee6101356122a4565b81610ab557610ab5816122a4565b6115696001600160a01b0384161515610198611544565b6115806001600160a01b0383161515610199611544565b61158b8383836111c1565b6001600160a01b0383166000908152602081905260409020546115b190826101a06122ce565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546115e09082611704565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611297908590612f6a565b60006116616000357fffffffff0000000000000000000000000000000000000000000000000000000016610c99565b90506109eb61167082336122e4565b610191611544565b610a8361168361138d565b610192611544565b6116a06116966123cd565b82101560cb611544565b6116b56116ab6123d6565b82111560ca611544565b6008546116c6908260c0603f6111ed565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906116f9908390612f6a565b60405180910390a150565b60008282016107ff8482101583611544565b8015611736576117316117276113aa565b4210610193611544565b61174b565b61174b6117416113ce565b42106101a9611544565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906116f9908390612f47565b606080600183510367ffffffffffffffff811180156117c557600080fd5b506040519080825280602002602001820160405280156117ef578160200160208202803683370190505b50905060005b81518110156113865783611807610c63565b82106118165781600101611818565b815b8151811061182257fe5b602002602001015182828151811061183657fe5b60209081029190910101526001016117f5565b60006118536109ee565b9050600061185f610d35565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b815260040161188c92919061300b565b60806040518083038186803b1580156118a457600080fd5b505afa1580156118b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dc9190612d03565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250611929915085908790600401612ff2565b600060405180830381600087803b15801561194357600080fd5b505af1158015610fcd573d6000803e3d6000fd5b600854611966908260ff6111c6565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c890611999908390612f47565b60405180910390a1806109eb576109eb610a83565b6001901b6000190191901c1690565b610ab58183146067611544565b600060606040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0090613053565b60405180910390fd5b81518151611a189082906119bd565b60005b81811015611a7257611a53848281518110611a3257fe5b6020026020010151848381518110611a4657fe5b60200260200101516123e2565b848281518110611a5f57fe5b6020908102919091010152600101611a1b565b50505050565b333014611b67576000306001600160a01b0316600036604051611a9c929190612e5f565b6000604051808303816000865af19150503d8060008114611ad9576040519150601f19603f3d011682016040523d82523d6000602084013e611ade565b606091505b505090508060008114611aed57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114611b49573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b611b6f611c9b565b6060611b796113f2565b9050611b858782611ca3565b60006060611b9d8c8c8c8c8c8c898d8d63ffffffff16565b91509150611baf81848663ffffffff16565b80517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b60008082511180156107eb575060ff801682806020019051810190611c529190612d43565b60ff161492915050565b610a83611c67610eb3565b6101b6611544565b600060606000611c7e84612433565b90506060611c8d878784612449565b919791965090945050505050565b610a83611678565b81518151611cb29082906119bd565b60005b81811015611a7257611ced848281518110611ccc57fe5b6020026020010151848381518110611ce057fe5b60200260200101516124f8565b848281518110611cf957fe5b6020908102919091010152600101611cb5565b610ab5828261252e565b81518151611d259082906119bd565b60005b81811015611a7257611d60848281518110611d3f57fe5b6020026020010151848381518110611d5357fe5b60200260200101516125fa565b848281518110611d6c57fe5b6020908102919091010152600101611d28565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000611dad610d35565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015611de557600080fd5b505afa158015611df9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190612c81565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e61575060006107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ea3575060016107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ee5575060026107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f27575060036107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f69575060046107ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611539575060056107ee565b1c60019081161490565b7f000000000000000000000000000000000000000000000000000000000000000090565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b600061202385612648565b9050612039612033878387612664565b83611544565b612048428410156101b8611544565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b620f424090565b610ab58282612731565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006120c26120b8610c63565b8314156064611544565b6120ca610c63565b82106120e0576120db826001611210565b6107eb565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006121516127c4565b30604051602001612166959493929190612fc6565b60405160208183030381529060405280519060200120905090565b600061218b610c63565b82106121a15761219c826001611704565b6121a3565b815b90506107ee7f0000000000000000000000000000000000000000000000000000000000000000821080156121de57506121da610c63565b8214155b6064611544565b6002815110156121f4576109eb565b60008160008151811061220357fe5b602002602001015190506000600190505b82518110156111c157600083828151811061222b57fe5b60200260200101519050612254816001600160a01b0316846001600160a01b0316106065611544565b9150600101612214565b61226d61010083106064611544565b612295600182101580156121de575061228b60ff8461010003611226565b8211156064611544565b6111c183821c156101b4611544565b6109eb817f42414c00000000000000000000000000000000000000000000000000000000006127c8565b60006122dd8484111583611544565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612303610d11565b6001600160a01b03161415801561231e575061231e83612843565b156123465761232b610d11565b6001600160a01b0316336001600160a01b03161490506107da565b61234e611da3565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b815260040161237d93929190612f73565b60206040518083038186803b15801561239557600080fd5b505afa1580156123a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111309190612b7e565b64e8d4a5100090565b67016345785d8a000090565b60006123f18215156004611544565b826123fe575060006107da565b670de0b6b3a7640000838102906124219085838161241857fe5b04146005611544565b82818161242a57fe5b049150506107da565b6000818060200190518101906107ff9190612d5f565b6060600061245783856123e2565b9050845167ffffffffffffffff8111801561247157600080fd5b5060405190808252806020026020018201604052801561249b578160200160208202803683370190505b50915060005b85518110156124ef576124d0828783815181106124ba57fe5b60200260200101516124f890919063ffffffff16565b8382815181106124dc57fe5b60209081029190910101526001016124a1565b50509392505050565b600082820261251c84158061251557508385838161251257fe5b04145b6003611544565b670de0b6b3a764000090049392505050565b6125456001600160a01b038316151561019b611544565b612551826000836111c1565b6001600160a01b03821660009081526020819052604090205461257790826101b26122ce565b6001600160a01b0383166000908152602081905260409020556125aa6125a58261259f610806565b906128b1565b6128bf565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125ee9190612f6a565b60405180910390a35050565b60006126098215156004611544565b82612616575060006107da565b670de0b6b3a7640000838102906126309085838161241857fe5b82600182038161263c57fe5b046001019150506107da565b60006126526120e4565b82604051602001610cce929190612e6f565b600061267682516041146101b9611544565b60208281015160408085015160608601518251600080825295019283905292939092811a916001906126af908990859088908890613022565b6020604051602081039080840390855afa1580156126d1573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116158015906127255750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b61273d600083836111c1565b6127526125a58261274c610806565b90611704565b6001600160a01b0382166000908152602081905260409020546127759082611704565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125ee908590612f6a565b4690565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b600061286e7f38e9922e00000000000000000000000000000000000000000000000000000000610c99565b8214806128a2575061289f7f50dd6ed900000000000000000000000000000000000000000000000000000000610c99565b82145b806107eb57506107eb826128c4565b60006107ff838360016122ce565b600255565b50600090565b600082601f8301126128da578081fd5b813567ffffffffffffffff8111156128f0578182fd5b60208082026129008282016130b1565b8381529350818401858301828701840188101561291c57600080fd5b600092505b8483101561293f578035825260019290920191908301908301612921565b505050505092915050565b600082601f83011261295a578081fd5b813567ffffffffffffffff811115612970578182fd5b6129a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016130b1565b91508082528360208285010111156129b857600080fd5b8060208401602084013760009082016020015292915050565b6000602082840312156129e2578081fd5b81356107ff816130d8565b600080604083850312156129ff578081fd5b8235612a0a816130d8565b91506020830135612a1a816130d8565b809150509250929050565b600080600060608486031215612a39578081fd5b8335612a44816130d8565b92506020840135612a54816130d8565b929592945050506040919091013590565b600080600080600080600060e0888a031215612a7f578283fd5b8735612a8a816130d8565b96506020880135612a9a816130d8565b955060408801359450606088013593506080880135612ab8816130ed565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215612ae7578182fd5b8235612af2816130d8565b946020939093013593505050565b600060208284031215612b11578081fd5b813567ffffffffffffffff811115612b27578182fd5b612b33848285016128ca565b949350505050565b60008060408385031215612b4d578182fd5b823567ffffffffffffffff811115612b63578283fd5b612b6f858286016128ca565b95602094909401359450505050565b600060208284031215612b8f578081fd5b815180151581146107ff578182fd5b600080600080600080600060e0888a031215612bb8578283fd5b873596506020880135612bca816130d8565b95506040880135612bda816130d8565b9450606088013567ffffffffffffffff80821115612bf6578485fd5b612c028b838c016128ca565b955060808a0135945060a08a0135935060c08a0135915080821115612c25578283fd5b50612c328a828b0161294a565b91505092959891949750929550565b600060208284031215612c52578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107ff578182fd5b600060208284031215612c92578081fd5b81516107ff816130d8565b60008060408385031215612caf578182fd5b8235612cba816130d8565b9150602083013567ffffffffffffffff811115612cd5578182fd5b612ce18582860161294a565b9150509250929050565b600060208284031215612cfc578081fd5b5035919050565b60008060008060808587031215612d18578182fd5b8451935060208501519250604085015191506060850151612d38816130d8565b939692955090935050565b600060208284031215612d54578081fd5b81516107ff816130ed565b60008060408385031215612d71578182fd5b8251612d7c816130ed565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015612dbb57815187529582019590820190600101612d9f565b509495945050505050565b60008151808452815b81811015612deb57602081850181015186830182015201612dcf565b81811115612dfc5782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015612efa5783516001600160a01b031683529284019291840191600101612ed5565b50909695505050505050565b6000602082526107ff6020830184612d8c565b600060408252612f2c6040830185612d8c565b8281036020840152612f3e8185612d8c565b95945050505050565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b600083825260406020830152612b336040830184612dc6565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526107ff6020830184612dc6565b6020808252600f908201527f4e4f545f494d504c454d454e5445440000000000000000000000000000000000604082015260600190565b600083825260406020830152612b336040830184612d8c565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156130d057600080fd5b604052919050565b6001600160a01b03811681146109eb57600080fd5b60ff811681146109eb57600080fdfea26469706673582212200f1ee81e6c1bd691798b1bbd344e3915d8d8aa1a5346438470d4b38db2b1bd3164736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x399 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x82687A56 GT PUSH2 0x1E9 JUMPI DUP1 PUSH4 0xB2469446 GT PUSH2 0x10F JUMPI DUP1 PUSH4 0xD505ACCF GT PUSH2 0xAD JUMPI DUP1 PUSH4 0xE3C6137D GT PUSH2 0x7C JUMPI DUP1 PUSH4 0xE3C6137D EQ PUSH2 0x6E4 JUMPI DUP1 PUSH4 0xEAECB2B8 EQ PUSH2 0x6EC JUMPI DUP1 PUSH4 0xED24911D EQ PUSH2 0x6F4 JUMPI DUP1 PUSH4 0xF4E81884 EQ PUSH2 0x6FC JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x698 JUMPI DUP1 PUSH4 0xD5C096C4 EQ PUSH2 0x6AB JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6BE JUMPI DUP1 PUSH4 0xDD93A2C9 EQ PUSH2 0x6D1 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xBB2478D4 GT PUSH2 0xE9 JUMPI DUP1 PUSH4 0xBB2478D4 EQ PUSH2 0x678 JUMPI DUP1 PUSH4 0xC9E51C90 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0xD25FC61A EQ PUSH2 0x688 JUMPI DUP1 PUSH4 0xD2946C2B EQ PUSH2 0x690 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xB2469446 EQ PUSH2 0x660 JUMPI DUP1 PUSH4 0xB35056B8 EQ PUSH2 0x668 JUMPI DUP1 PUSH4 0xB7B814FC EQ PUSH2 0x670 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x187 JUMPI DUP1 PUSH4 0xA8E59C7C GT PUSH2 0x156 JUMPI DUP1 PUSH4 0xA8E59C7C EQ PUSH2 0x62A JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x632 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x645 JUMPI DUP1 PUSH4 0xAB7759F1 EQ PUSH2 0x64D JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5FF JUMPI DUP1 PUSH4 0x98411490 EQ PUSH2 0x607 JUMPI DUP1 PUSH4 0x9A3B9CCE EQ PUSH2 0x60F JUMPI DUP1 PUSH4 0xA457C2D7 EQ PUSH2 0x617 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x87EC6817 GT PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x87EC6817 EQ PUSH2 0x5C9 JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0x5DC JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x5E4 JUMPI DUP1 PUSH4 0x90193B7C EQ PUSH2 0x5EC JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x82687A56 EQ PUSH2 0x5A6 JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x5AE JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x5B6 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 GT PUSH2 0x2CE JUMPI DUP1 PUSH4 0x48ADE7B0 GT PUSH2 0x26C JUMPI DUP1 PUSH4 0x6028BFD4 GT PUSH2 0x23B JUMPI DUP1 PUSH4 0x6028BFD4 EQ PUSH2 0x53E JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x55F JUMPI DUP1 PUSH4 0x74F3B009 EQ PUSH2 0x572 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x593 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x48ADE7B0 EQ PUSH2 0x508 JUMPI DUP1 PUSH4 0x50DD6ED9 EQ PUSH2 0x51B JUMPI DUP1 PUSH4 0x54A844BA EQ PUSH2 0x52E JUMPI DUP1 PUSH4 0x55C67628 EQ PUSH2 0x536 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x39509351 GT PUSH2 0x2A8 JUMPI DUP1 PUSH4 0x39509351 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0x3EB3ED29 EQ PUSH2 0x4E5 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x4ED JUMPI DUP1 PUSH4 0x42E68AAD EQ PUSH2 0x4F5 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x3644E515 EQ PUSH2 0x4AD JUMPI DUP1 PUSH4 0x38E9922E EQ PUSH2 0x4B5 JUMPI DUP1 PUSH4 0x38FFF2D0 EQ PUSH2 0x4CA JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 GT PUSH2 0x33B JUMPI DUP1 PUSH4 0x21E63146 GT PUSH2 0x315 JUMPI DUP1 PUSH4 0x21E63146 EQ PUSH2 0x468 JUMPI DUP1 PUSH4 0x238A2D59 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x498 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x1C0DE051 EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x1D936C67 EQ PUSH2 0x44B JUMPI DUP1 PUSH4 0x1DD746EA EQ PUSH2 0x460 JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0xA3F0F60 GT PUSH2 0x377 JUMPI DUP1 PUSH4 0xA3F0F60 EQ PUSH2 0x3F1 JUMPI DUP1 PUSH4 0x14841DB4 EQ PUSH2 0x404 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x424 JUMPI DUP1 PUSH4 0x1A16A923 EQ PUSH2 0x42C JUMPI PUSH2 0x399 JUMP JUMPDEST DUP1 PUSH4 0x64CA1B8 EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x3BC JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x3D1 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x3A6 PUSH2 0x70F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x3C4 PUSH2 0x733 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x3040 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x3DF CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0x7C9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2F47 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x7E0 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x412 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B3B JUMP JUMPDEST PUSH2 0x7F3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2F06 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x806 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x80C JUMP JUMPDEST PUSH2 0x43C PUSH2 0x830 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x453 PUSH2 0x859 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2EA5 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x87D JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x88C JUMP JUMPDEST PUSH2 0x478 PUSH2 0x8B0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x2EB9 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x493 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A25 JUMP JUMPDEST PUSH2 0x94B JUMP JUMPDEST PUSH2 0x4A0 PUSH2 0x9BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP2 SWAP1 PUSH2 0x30A3 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x9C8 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x4C3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x9D2 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x3A6 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x4E0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0xA12 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xA4D JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xA71 JUMP JUMPDEST PUSH2 0x417 PUSH2 0x503 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B00 JUMP JUMPDEST PUSH2 0xA85 JUMP JUMPDEST PUSH2 0x453 PUSH2 0x516 CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0xA90 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x529 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C9D JUMP JUMPDEST PUSH2 0xA9B JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xAB9 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0xACB JUMP JUMPDEST PUSH2 0x551 PUSH2 0x54C CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xADE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP3 SWAP2 SWAP1 PUSH2 0x308A JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x56D CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xB15 JUMP JUMPDEST PUSH2 0x585 PUSH2 0x580 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xB30 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3B3 SWAP3 SWAP2 SWAP1 PUSH2 0x2F19 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x5A1 CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xC58 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0xC63 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xC87 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x5C4 CALLDATASIZE PUSH1 0x4 PUSH2 0x2C41 JUMP JUMPDEST PUSH2 0xC99 JUMP JUMPDEST PUSH2 0x551 PUSH2 0x5D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xCEB JUMP JUMPDEST PUSH2 0x453 PUSH2 0xD11 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xD35 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x5FA CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xD59 JUMP JUMPDEST PUSH2 0x3C4 PUSH2 0xD74 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xDD5 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0xDF9 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x625 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0xE03 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xE41 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x640 CALLDATASIZE PUSH1 0x4 PUSH2 0x2AD5 JUMP JUMPDEST PUSH2 0xE65 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xE72 JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0x65B CALLDATASIZE PUSH1 0x4 PUSH2 0x29D1 JUMP JUMPDEST PUSH2 0xE7C JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0xE8F JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0xEC4 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xED6 JUMP JUMPDEST PUSH2 0x453 PUSH2 0xEFA JUMP JUMPDEST PUSH2 0x3E4 PUSH2 0xF1E JUMP JUMPDEST PUSH2 0x453 PUSH2 0xF28 JUMP JUMPDEST PUSH2 0x4C8 PUSH2 0x6A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x2A65 JUMP JUMPDEST PUSH2 0xF4C JUMP JUMPDEST PUSH2 0x585 PUSH2 0x6B9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2B9E JUMP JUMPDEST PUSH2 0xFD7 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x6CC CALLDATASIZE PUSH1 0x4 PUSH2 0x29ED JUMP JUMPDEST PUSH2 0x10FA JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x6DF CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x1137 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x1142 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x1166 JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x118A JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x70A CALLDATASIZE PUSH1 0x4 PUSH2 0x2CEB JUMP JUMPDEST PUSH2 0x1194 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7BF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x794 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7BF JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x7A2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x123C JUMP JUMPDEST POP PUSH1 0x1 JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x12A4 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7FF DUP4 DUP4 PUSH2 0x12D0 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x83D PUSH2 0x138D JUMP JUMPDEST ISZERO SWAP3 POP PUSH2 0x848 PUSH2 0x13AA JUMP JUMPDEST SWAP2 POP PUSH2 0x852 PUSH2 0x13CE JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x887 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x8BC PUSH2 0x13F7 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x8D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x901 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x944 JUMPI PUSH2 0x918 DUP2 PUSH2 0x141B JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x924 JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x907 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x958 DUP6 CALLER PUSH2 0x10FA JUMP JUMPDEST SWAP1 POP PUSH2 0x97C CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND EQ DUP1 PUSH2 0x974 JUMPI POP DUP4 DUP3 LT ISZERO JUMPDEST PUSH2 0x19E PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x987 DUP6 DUP6 DUP6 PUSH2 0x1552 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND EQ DUP1 ISZERO SWAP1 PUSH2 0x9A2 JUMPI POP PUSH1 0x0 NOT DUP2 EQ ISZERO JUMPDEST ISZERO PUSH2 0x9B4 JUMPI PUSH2 0x9B4 DUP6 CALLER DUP6 DUP5 SUB PUSH2 0x123C JUMP JUMPDEST POP PUSH1 0x1 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x118A JUMP JUMPDEST PUSH2 0x9DA PUSH2 0x1632 JUMP JUMPDEST PUSH2 0x9E2 PUSH2 0x1678 JUMP JUMPDEST PUSH2 0x9EB DUP2 PUSH2 0x168B JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 SLOAD SWAP1 SWAP2 PUSH2 0x7D6 SWAP2 DUP6 SWAP1 PUSH2 0xA48 SWAP1 DUP7 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x123C JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0xA79 PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x0 PUSH2 0x1716 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x60 PUSH2 0x7EB DUP3 PUSH2 0x17A7 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x141B JUMP JUMPDEST PUSH2 0xAA3 PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xAAB PUSH2 0x1678 JUMP JUMPDEST PUSH2 0xAB5 DUP3 DUP3 PUSH2 0x1849 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0xAC1 PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x1 PUSH2 0x1957 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x887 SWAP1 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x19AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xAF4 DUP7 MLOAD PUSH2 0xAEF PUSH2 0x13F7 JUMP JUMPDEST PUSH2 0x19BD JUMP JUMPDEST PUSH2 0xB09 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x19CA PUSH2 0x1A09 PUSH2 0x1A78 JUMP JUMPDEST SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xB5A PUSH2 0xB3F PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH1 0xCD PUSH2 0x1544 JUMP JUMPDEST PUSH2 0xB6F PUSH2 0xB65 PUSH2 0x9EE JUMP JUMPDEST DUP3 EQ PUSH2 0x1F4 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0xB7C DUP7 PUSH2 0x1C2D JUMP JUMPDEST ISZERO PUSH2 0xBA4 JUMPI PUSH2 0xB89 PUSH2 0x1C5C JUMP JUMPDEST PUSH2 0xB9B DUP10 PUSH2 0xB95 PUSH2 0x806 JUMP JUMPDEST DUP9 PUSH2 0x1C6F JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH2 0xBF6 JUMP JUMPDEST PUSH2 0xBAC PUSH2 0x1C9B JUMP JUMPDEST PUSH1 0x60 PUSH2 0xBB6 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP PUSH2 0xBC2 DUP11 DUP3 PUSH2 0x1CA3 JUMP JUMPDEST PUSH2 0xBE6 DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0xBD2 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0xBDC JUMPI DUP14 PUSH2 0xBDF JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP8 DUP15 PUSH2 0x19CA JUMP JUMPDEST SWAP4 POP SWAP2 POP PUSH2 0xBF4 DUP4 DUP3 PUSH2 0x1A09 JUMP JUMPDEST POP JUMPDEST PUSH2 0xC00 DUP12 DUP3 PUSH2 0x1D0C JUMP JUMPDEST DUP2 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xC19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC43 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP5 POP SWAP5 POP POP POP JUMPDEST POP SWAP8 POP SWAP8 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0xD59 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH2 0xC8F PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x1 PUSH2 0x1716 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCCE SWAP3 SWAP2 SWAP1 PUSH2 0x2E2F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0xCFC DUP7 MLOAD PUSH2 0xAEF PUSH2 0x13F7 JUMP JUMPDEST PUSH2 0xB09 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH2 0x19CA PUSH2 0x1D16 PUSH2 0x1A78 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x2 PUSH1 0x0 NOT PUSH2 0x100 PUSH1 0x1 DUP9 AND ISZERO MUL ADD SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 DIV SWAP4 DUP5 ADD DUP2 SWAP1 DIV DUP2 MUL DUP3 ADD DUP2 ADD SWAP1 SWAP3 MSTORE DUP3 DUP2 MSTORE PUSH1 0x60 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x7BF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x794 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x7BF JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x1D7F JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xE10 CALLER DUP6 PUSH2 0x10FA JUMP JUMPDEST SWAP1 POP DUP1 DUP4 LT PUSH2 0xE2A JUMPI PUSH2 0xE25 CALLER DUP6 PUSH1 0x0 PUSH2 0x123C JUMP JUMPDEST PUSH2 0xE37 JUMP JUMPDEST PUSH2 0xE37 CALLER DUP6 DUP6 DUP5 SUB PUSH2 0x123C JUMP JUMPDEST POP PUSH1 0x1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7D6 CALLER DUP5 DUP5 PUSH2 0x1552 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB PUSH2 0xE8A DUP4 PUSH2 0x1E1D JUMP JUMPDEST PUSH2 0x12A4 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH1 0x0 SWAP1 PUSH2 0x887 SWAP1 PUSH1 0xFF PUSH2 0x1FAB JUMP JUMPDEST PUSH2 0xECC PUSH2 0x1632 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x0 PUSH2 0x1957 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x1FB5 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP9 DUP9 DUP9 PUSH2 0xF7B DUP13 PUSH2 0xD59 JUMP JUMPDEST DUP10 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xF91 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F92 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0xFC2 DUP9 DUP3 PUSH2 0xFB9 DUP8 DUP8 DUP8 PUSH2 0x1FD9 JUMP JUMPDEST DUP9 PUSH2 0x1F8 PUSH2 0x2018 JUMP JUMPDEST PUSH2 0xFCD DUP9 DUP9 DUP9 PUSH2 0x123C JUMP JUMPDEST POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP9 PUSH2 0xFE6 PUSH2 0xB3F PUSH2 0xD35 JUMP JUMPDEST PUSH2 0xFF1 PUSH2 0xB65 PUSH2 0x9EE JUMP JUMPDEST PUSH2 0xFF9 PUSH2 0x1C9B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1003 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP PUSH2 0x100D PUSH2 0x806 JUMP JUMPDEST PUSH2 0x10BA JUMPI PUSH1 0x0 PUSH1 0x60 PUSH2 0x1022 DUP14 DUP14 DUP14 DUP7 DUP12 PUSH2 0x19CA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x103B PUSH2 0x1031 PUSH2 0x206F JUMP JUMPDEST DUP4 LT ISZERO PUSH1 0xCC PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x104D PUSH1 0x0 PUSH2 0x1048 PUSH2 0x206F JUMP JUMPDEST PUSH2 0x2076 JUMP JUMPDEST PUSH2 0x1060 DUP12 PUSH2 0x1059 PUSH2 0x206F JUMP JUMPDEST DUP5 SUB PUSH2 0x2076 JUMP JUMPDEST PUSH2 0x106A DUP2 DUP5 PUSH2 0x1D16 JUMP JUMPDEST DUP1 DUP11 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1083 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x10AD JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP6 POP SWAP6 POP POP POP POP PUSH2 0xC4B JUMP JUMPDEST PUSH2 0x10C4 DUP9 DUP3 PUSH2 0x1CA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x10EC DUP14 DUP14 DUP14 DUP14 DUP14 PUSH2 0x10D8 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x10E2 JUMPI DUP14 PUSH2 0x10E5 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP10 DUP15 PUSH2 0x19CA JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1060 DUP12 DUP4 PUSH2 0x2076 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1104 PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1126 JUMPI POP PUSH1 0x0 NOT PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x1130 DUP4 DUP4 PUSH2 0x2080 JUMP JUMPDEST SWAP1 POP PUSH2 0x7DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x20AB JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x887 PUSH2 0x20E4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB DUP3 PUSH2 0x2181 JUMP JUMPDEST DUP1 PUSH2 0xAB5 DUP2 PUSH2 0x21E5 JUMP JUMPDEST PUSH2 0x11C1 DUP3 DUP5 EQ DUP1 ISZERO PUSH2 0x11BA JUMPI POP DUP2 DUP4 EQ JUMPDEST PUSH1 0x67 PUSH2 0x1544 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 DUP3 SHL NOT DUP5 AND DUP3 DUP5 PUSH2 0x11DC JUMPI PUSH1 0x0 PUSH2 0x11DF JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND SWAP1 SHL OR SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11FA DUP5 DUP5 DUP5 PUSH2 0x225E JUMP JUMPDEST POP PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD DUP2 SHL NOT SWAP3 SWAP1 SWAP3 AND SWAP2 SHL OR SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1220 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x1544 JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x1235 JUMPI DUP2 PUSH2 0x7FF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP5 DUP8 AND DUP1 DUP5 MSTORE SWAP5 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE MLOAD PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 SWAP1 PUSH2 0x1297 SWAP1 DUP6 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7EB PUSH32 0x0 DUP4 PUSH2 0x1FAB JUMP JUMPDEST PUSH1 0x60 DUP3 MLOAD PUSH1 0x1 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x12ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1317 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1386 JUMPI PUSH2 0x132E PUSH2 0xC63 JUMP JUMPDEST DUP2 EQ PUSH2 0x1365 JUMPI DUP4 PUSH2 0x133D PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x134C JUMPI PUSH1 0x1 DUP3 SUB PUSH2 0x134E JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1358 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1367 JUMP JUMPDEST DUP3 JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1373 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x131D JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1397 PUSH2 0x13CE JUMP JUMPDEST TIMESTAMP GT DUP1 PUSH2 0x887 JUMPI POP POP PUSH1 0x7 SLOAD PUSH1 0xFF AND ISZERO SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH2 0x1449 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x1 EQ ISZERO PUSH2 0x1479 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x2 EQ ISZERO PUSH2 0x14A9 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x3 EQ ISZERO PUSH2 0x14D9 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x4 EQ ISZERO PUSH2 0x1509 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST DUP2 PUSH1 0x5 EQ ISZERO PUSH2 0x1539 JUMPI POP PUSH32 0x0 PUSH2 0x7EE JUMP JUMPDEST PUSH2 0x7EE PUSH2 0x135 PUSH2 0x22A4 JUMP JUMPDEST DUP2 PUSH2 0xAB5 JUMPI PUSH2 0xAB5 DUP2 PUSH2 0x22A4 JUMP JUMPDEST PUSH2 0x1569 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO ISZERO PUSH2 0x198 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x1580 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x199 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x158B DUP4 DUP4 DUP4 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x15B1 SWAP1 DUP3 PUSH2 0x1A0 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP1 DUP5 AND DUP2 MSTORE KECCAK256 SLOAD PUSH2 0x15E0 SWAP1 DUP3 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 DUP6 AND SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x1297 SWAP1 DUP6 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1661 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0xC99 JUMP JUMPDEST SWAP1 POP PUSH2 0x9EB PUSH2 0x1670 DUP3 CALLER PUSH2 0x22E4 JUMP JUMPDEST PUSH2 0x191 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0xA83 PUSH2 0x1683 PUSH2 0x138D JUMP JUMPDEST PUSH2 0x192 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x16A0 PUSH2 0x1696 PUSH2 0x23CD JUMP JUMPDEST DUP3 LT ISZERO PUSH1 0xCB PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x16B5 PUSH2 0x16AB PUSH2 0x23D6 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0xCA PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x16C6 SWAP1 DUP3 PUSH1 0xC0 PUSH1 0x3F PUSH2 0x11ED JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9BA3FFE0B6C366B81232CAAB38605A0699AD5398D6CCE76F91EE809E322DAFC SWAP1 PUSH2 0x16F9 SWAP1 DUP4 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x7FF DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x1544 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1736 JUMPI PUSH2 0x1731 PUSH2 0x1727 PUSH2 0x13AA JUMP JUMPDEST TIMESTAMP LT PUSH2 0x193 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x174B JUMP JUMPDEST PUSH2 0x174B PUSH2 0x1741 PUSH2 0x13CE JUMP JUMPDEST TIMESTAMP LT PUSH2 0x1A9 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP3 ISZERO ISZERO OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x9E3A5E37224532DEA67B89FACE185703738A228A6E8A23DEE546960180D3BE64 SWAP1 PUSH2 0x16F9 SWAP1 DUP4 SWAP1 PUSH2 0x2F47 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x1 DUP4 MLOAD SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x17C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17EF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1386 JUMPI DUP4 PUSH2 0x1807 PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x1816 JUMPI DUP2 PUSH1 0x1 ADD PUSH2 0x1818 JUMP JUMPDEST DUP2 JUMPDEST DUP2 MLOAD DUP2 LT PUSH2 0x1822 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1836 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x17F5 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1853 PUSH2 0x9EE JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x185F PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xB05F8E48 DUP4 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x188C SWAP3 SWAP2 SWAP1 PUSH2 0x300B JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x18A4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x18B8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x18DC SWAP2 SWAP1 PUSH2 0x2D03 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x18E736D400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP1 SWAP5 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP4 POP PUSH4 0x18E736D4 SWAP3 POP PUSH2 0x1929 SWAP2 POP DUP6 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2FF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1943 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xFCD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST PUSH1 0x8 SLOAD PUSH2 0x1966 SWAP1 DUP3 PUSH1 0xFF PUSH2 0x11C6 JUMP JUMPDEST PUSH1 0x8 SSTORE PUSH1 0x40 MLOAD PUSH32 0xEFF3D4D215B42BF0960BE9C6D5E05C22CBA4DF6627A3A523E2ACEE733B5854C8 SWAP1 PUSH2 0x1999 SWAP1 DUP4 SWAP1 PUSH2 0x2F47 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH2 0x9EB JUMPI PUSH2 0x9EB PUSH2 0xA83 JUMP JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH1 0x0 NOT ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xAB5 DUP2 DUP4 EQ PUSH1 0x67 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1A00 SWAP1 PUSH2 0x3053 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1A18 SWAP1 DUP3 SWAP1 PUSH2 0x19BD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1A53 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A32 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1A46 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x23E2 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A5F JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1A1B JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1B67 JUMPI PUSH1 0x0 ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 CALLDATASIZE PUSH1 0x40 MLOAD PUSH2 0x1A9C SWAP3 SWAP2 SWAP1 PUSH2 0x2E5F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1AD9 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1ADE JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP POP SWAP1 POP DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x1AED JUMPI INVALID JUMPDEST PUSH1 0x4 PUSH1 0x0 DUP1 RETURNDATACOPY PUSH1 0x0 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH32 0x43ADBAFB00000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x1B49 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH1 0x20 PUSH1 0x4 PUSH1 0x0 RETURNDATACOPY PUSH1 0x40 PUSH1 0x20 MSTORE PUSH1 0x24 RETURNDATASIZE SUB PUSH1 0x24 PUSH1 0x40 RETURNDATACOPY PUSH1 0x1C RETURNDATASIZE ADD PUSH1 0x0 RETURN JUMPDEST PUSH2 0x1B6F PUSH2 0x1C9B JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B79 PUSH2 0x13F2 JUMP JUMPDEST SWAP1 POP PUSH2 0x1B85 DUP8 DUP3 PUSH2 0x1CA3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH2 0x1B9D DUP13 DUP13 DUP13 DUP13 DUP13 DUP13 DUP10 DUP14 DUP14 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x1BAF DUP2 DUP5 DUP7 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP3 ADD DUP4 SWAP1 MSTORE PUSH4 0x43ADBAFB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP4 ADD MSTORE PUSH1 0x20 MUL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP3 ADD PUSH1 0x44 DUP3 ADD DUP2 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP3 MLOAD GT DUP1 ISZERO PUSH2 0x7EB JUMPI POP PUSH1 0xFF DUP1 AND DUP3 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x1C52 SWAP2 SWAP1 PUSH2 0x2D43 JUMP JUMPDEST PUSH1 0xFF AND EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xA83 PUSH2 0x1C67 PUSH2 0xEB3 JUMP JUMPDEST PUSH2 0x1B6 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 PUSH2 0x1C7E DUP5 PUSH2 0x2433 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 PUSH2 0x1C8D DUP8 DUP8 DUP5 PUSH2 0x2449 JUMP JUMPDEST SWAP2 SWAP8 SWAP2 SWAP7 POP SWAP1 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0xA83 PUSH2 0x1678 JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1CB2 SWAP1 DUP3 SWAP1 PUSH2 0x19BD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1CED DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1CCC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1CE0 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x24F8 JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1CF9 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1CB5 JUMP JUMPDEST PUSH2 0xAB5 DUP3 DUP3 PUSH2 0x252E JUMP JUMPDEST DUP2 MLOAD DUP2 MLOAD PUSH2 0x1D25 SWAP1 DUP3 SWAP1 PUSH2 0x19BD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A72 JUMPI PUSH2 0x1D60 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D3F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1D53 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x25FA JUMP JUMPDEST DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1D6C JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1D28 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DAD PUSH2 0xD35 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1DE5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1DF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x887 SWAP2 SWAP1 PUSH2 0x2C81 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1E61 JUMPI POP PUSH1 0x0 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EA3 JUMPI POP PUSH1 0x1 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1EE5 JUMPI POP PUSH1 0x2 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1F27 JUMPI POP PUSH1 0x3 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1F69 JUMPI POP PUSH1 0x4 PUSH2 0x7EE JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1539 JUMPI POP PUSH1 0x5 PUSH2 0x7EE JUMP JUMPDEST SHR PUSH1 0x1 SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x41 DUP1 DUP3 MSTORE PUSH1 0x80 DUP3 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP5 PUSH1 0x60 DUP3 ADD MSTORE8 SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2023 DUP6 PUSH2 0x2648 JUMP JUMPDEST SWAP1 POP PUSH2 0x2039 PUSH2 0x2033 DUP8 DUP4 DUP8 PUSH2 0x2664 JUMP JUMPDEST DUP4 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x2048 TIMESTAMP DUP5 LT ISZERO PUSH2 0x1B8 PUSH2 0x1544 JUMP JUMPDEST POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH3 0xF4240 SWAP1 JUMP JUMPDEST PUSH2 0xAB5 DUP3 DUP3 PUSH2 0x2731 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x20C2 PUSH2 0x20B8 PUSH2 0xC63 JUMP JUMPDEST DUP4 EQ ISZERO PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x20CA PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x20E0 JUMPI PUSH2 0x20DB DUP3 PUSH1 0x1 PUSH2 0x1210 JUMP JUMPDEST PUSH2 0x7EB JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x2151 PUSH2 0x27C4 JUMP JUMPDEST ADDRESS PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2166 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2FC6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x218B PUSH2 0xC63 JUMP JUMPDEST DUP3 LT PUSH2 0x21A1 JUMPI PUSH2 0x219C DUP3 PUSH1 0x1 PUSH2 0x1704 JUMP JUMPDEST PUSH2 0x21A3 JUMP JUMPDEST DUP2 JUMPDEST SWAP1 POP PUSH2 0x7EE PUSH32 0x0 DUP3 LT DUP1 ISZERO PUSH2 0x21DE JUMPI POP PUSH2 0x21DA PUSH2 0xC63 JUMP JUMPDEST DUP3 EQ ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x2 DUP2 MLOAD LT ISZERO PUSH2 0x21F4 JUMPI PUSH2 0x9EB JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x2203 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x11C1 JUMPI PUSH1 0x0 DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x222B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x2254 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND LT PUSH1 0x65 PUSH2 0x1544 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x2214 JUMP JUMPDEST PUSH2 0x226D PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x2295 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x21DE JUMPI POP PUSH2 0x228B PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x1226 JUMP JUMPDEST DUP3 GT ISZERO PUSH1 0x64 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x11C1 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x9EB DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x27C8 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x22DD DUP5 DUP5 GT ISZERO DUP4 PUSH2 0x1544 JUMP JUMPDEST POP POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x2303 PUSH2 0xD11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO DUP1 ISZERO PUSH2 0x231E JUMPI POP PUSH2 0x231E DUP4 PUSH2 0x2843 JUMP JUMPDEST ISZERO PUSH2 0x2346 JUMPI PUSH2 0x232B PUSH2 0xD11 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ SWAP1 POP PUSH2 0x7DA JUMP JUMPDEST PUSH2 0x234E PUSH2 0x1DA3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x237D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F73 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2395 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x23A9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1130 SWAP2 SWAP1 PUSH2 0x2B7E JUMP JUMPDEST PUSH5 0xE8D4A51000 SWAP1 JUMP JUMPDEST PUSH8 0x16345785D8A0000 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x23F1 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1544 JUMP JUMPDEST DUP3 PUSH2 0x23FE JUMPI POP PUSH1 0x0 PUSH2 0x7DA JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2421 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2418 JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x1544 JUMP JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x242A JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x7DA JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x7FF SWAP2 SWAP1 PUSH2 0x2D5F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x2457 DUP4 DUP6 PUSH2 0x23E2 JUMP JUMPDEST SWAP1 POP DUP5 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x2471 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x249B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP PUSH1 0x0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x24EF JUMPI PUSH2 0x24D0 DUP3 DUP8 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x24BA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x24F8 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP4 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x24DC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x24A1 JUMP JUMPDEST POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x251C DUP5 ISZERO DUP1 PUSH2 0x2515 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2512 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x1544 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x2545 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO PUSH2 0x19B PUSH2 0x1544 JUMP JUMPDEST PUSH2 0x2551 DUP3 PUSH1 0x0 DUP4 PUSH2 0x11C1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2577 SWAP1 DUP3 PUSH2 0x1B2 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SSTORE PUSH2 0x25AA PUSH2 0x25A5 DUP3 PUSH2 0x259F PUSH2 0x806 JUMP JUMPDEST SWAP1 PUSH2 0x28B1 JUMP JUMPDEST PUSH2 0x28BF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x25EE SWAP2 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2609 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x1544 JUMP JUMPDEST DUP3 PUSH2 0x2616 JUMPI POP PUSH1 0x0 PUSH2 0x7DA JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x2630 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x2418 JUMPI INVALID JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x263C JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x7DA JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2652 PUSH2 0x20E4 JUMP JUMPDEST DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xCCE SWAP3 SWAP2 SWAP1 PUSH2 0x2E6F JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2676 DUP3 MLOAD PUSH1 0x41 EQ PUSH2 0x1B9 PUSH2 0x1544 JUMP JUMPDEST PUSH1 0x20 DUP3 DUP2 ADD MLOAD PUSH1 0x40 DUP1 DUP6 ADD MLOAD PUSH1 0x60 DUP7 ADD MLOAD DUP3 MLOAD PUSH1 0x0 DUP1 DUP3 MSTORE SWAP6 ADD SWAP3 DUP4 SWAP1 MSTORE SWAP3 SWAP4 SWAP1 SWAP3 DUP2 BYTE SWAP2 PUSH1 0x1 SWAP1 PUSH2 0x26AF SWAP1 DUP10 SWAP1 DUP6 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH2 0x3022 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 SUB SWAP1 DUP1 DUP5 SUB SWAP1 DUP6 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x26D1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 ADD MLOAD SWAP2 POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 ISZERO SWAP1 PUSH2 0x2725 JUMPI POP DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x273D PUSH1 0x0 DUP4 DUP4 PUSH2 0x11C1 JUMP JUMPDEST PUSH2 0x2752 PUSH2 0x25A5 DUP3 PUSH2 0x274C PUSH2 0x806 JUMP JUMPDEST SWAP1 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH2 0x2775 SWAP1 DUP3 PUSH2 0x1704 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 SWAP4 SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF SWAP1 PUSH2 0x25EE SWAP1 DUP6 SWAP1 PUSH2 0x2F6A JUMP JUMPDEST CHAINID SWAP1 JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x286E PUSH32 0x38E9922E00000000000000000000000000000000000000000000000000000000 PUSH2 0xC99 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x28A2 JUMPI POP PUSH2 0x289F PUSH32 0x50DD6ED900000000000000000000000000000000000000000000000000000000 PUSH2 0xC99 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0x7EB JUMPI POP PUSH2 0x7EB DUP3 PUSH2 0x28C4 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7FF DUP4 DUP4 PUSH1 0x1 PUSH2 0x22CE JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x28DA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x28F0 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP1 DUP3 MUL PUSH2 0x2900 DUP3 DUP3 ADD PUSH2 0x30B1 JUMP JUMPDEST DUP4 DUP2 MSTORE SWAP4 POP DUP2 DUP5 ADD DUP6 DUP4 ADD DUP3 DUP8 ADD DUP5 ADD DUP9 LT ISZERO PUSH2 0x291C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP3 POP JUMPDEST DUP5 DUP4 LT ISZERO PUSH2 0x293F JUMPI DUP1 CALLDATALOAD DUP3 MSTORE PUSH1 0x1 SWAP3 SWAP1 SWAP3 ADD SWAP2 SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2921 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x295A JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2970 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x29A1 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD PUSH2 0x30B1 JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x29B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x0 SWAP1 DUP3 ADD PUSH1 0x20 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x29E2 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x7FF DUP2 PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x29FF JUMPI DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2A0A DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2A1A DUP2 PUSH2 0x30D8 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2A39 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2A44 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2A54 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2A7F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD PUSH2 0x2A8A DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x2A9A DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP4 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH2 0x2AB8 DUP2 PUSH2 0x30ED JUMP JUMPDEST SWAP7 SWAP10 SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP5 PUSH1 0xA0 DUP5 ADD CALLDATALOAD SWAP5 POP PUSH1 0xC0 SWAP1 SWAP4 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2AE7 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2AF2 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B11 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2B33 DUP5 DUP3 DUP6 ADD PUSH2 0x28CA JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2B4D JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2B63 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x2B6F DUP6 DUP3 DUP7 ADD PUSH2 0x28CA JUMP JUMPDEST SWAP6 PUSH1 0x20 SWAP5 SWAP1 SWAP5 ADD CALLDATALOAD SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B8F JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x7FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x2BB8 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP8 CALLDATALOAD SWAP7 POP PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH2 0x2BCA DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP6 POP PUSH1 0x40 DUP9 ADD CALLDATALOAD PUSH2 0x2BDA DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP5 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x2BF6 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH2 0x2C02 DUP12 DUP4 DUP13 ADD PUSH2 0x28CA JUMP JUMPDEST SWAP6 POP PUSH1 0x80 DUP11 ADD CALLDATALOAD SWAP5 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP4 POP PUSH1 0xC0 DUP11 ADD CALLDATALOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH2 0x2C25 JUMPI DUP3 DUP4 REVERT JUMPDEST POP PUSH2 0x2C32 DUP11 DUP3 DUP12 ADD PUSH2 0x294A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C52 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x7FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C92 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x7FF DUP2 PUSH2 0x30D8 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2CAF JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2CBA DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2CD5 JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH2 0x2CE1 DUP6 DUP3 DUP7 ADD PUSH2 0x294A JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2CFC JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2D18 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 MLOAD SWAP4 POP PUSH1 0x20 DUP6 ADD MLOAD SWAP3 POP PUSH1 0x40 DUP6 ADD MLOAD SWAP2 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x2D38 DUP2 PUSH2 0x30D8 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2D54 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x7FF DUP2 PUSH2 0x30ED JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2D71 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 MLOAD PUSH2 0x2D7C DUP2 PUSH2 0x30ED JUMP JUMPDEST PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD MLOAD SWAP3 SWAP5 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP5 POP DUP1 DUP5 ADD DUP4 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2DBB JUMPI DUP2 MLOAD DUP8 MSTORE SWAP6 DUP3 ADD SWAP6 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D9F JUMP JUMPDEST POP SWAP5 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2DEB JUMPI PUSH1 0x20 DUP2 DUP6 ADD DUP2 ADD MLOAD DUP7 DUP4 ADD DUP3 ADD MSTORE ADD PUSH2 0x2DCF JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x2DFC JUMPI DUP3 PUSH1 0x20 DUP4 DUP8 ADD ADD MSTORE JUMPDEST POP PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x2 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0x42 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 SWAP1 DUP5 DUP3 ADD SWAP1 PUSH1 0x40 DUP6 ADD SWAP1 DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2EFA JUMPI DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP2 DUP5 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2ED5 JUMP JUMPDEST POP SWAP1 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x7FF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 MSTORE PUSH2 0x2F2C PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x2D8C JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x2F3E DUP2 DUP6 PUSH2 0x2D8C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP6 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x20 DUP8 ADD MSTORE SWAP3 SWAP1 SWAP4 AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2B33 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2DC6 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0xFF SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x7FF PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2DC6 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xF SWAP1 DUP3 ADD MSTORE PUSH32 0x4E4F545F494D504C454D454E5445440000000000000000000000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP3 MSTORE PUSH1 0x40 PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x2B33 PUSH1 0x40 DUP4 ADD DUP5 PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x30D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x9EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x9EB JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF 0x1E 0xE8 0x1E PUSH13 0x1BD691798B1BBD344E3915D8D8 0xAA BYTE MSTORE8 CHAINID NUMBER DUP5 PUSH17 0xD4B38DB2B1BD3164736F6C634300070100 CALLER ", + "sourceMap": "872:4426:65:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3325:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2254:81:51;;;:::i;:::-;;;;;;;:::i;4857:164::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3965:169:65:-;;;;;;:::i;:::-;;:::i;2243:204::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3500:106:51:-;;;:::i;3219:100:65:-;;;:::i;3274:363:45:-;;;:::i;:::-;;;;;;;;;:::i;2783:104:65:-;;;:::i;:::-;;;;;;;:::i;29081:120:28:-;;;:::i;3643:100:65:-;;;:::i;14709:346:59:-;;;:::i;:::-;;;;;;;:::i;2575:655:26:-;;;;;;:::i;:::-;;:::i;3156:81:51:-;;;:::i;:::-;;;;;;;:::i;2243:113:52:-;;;:::i;8723:165:28:-;;;;;;:::i;:::-;;:::i;:::-;;7114:91;;;:::i;6269:211:51:-;;;;;;:::i;:::-;;:::i;2893:104:65:-;;;:::i;12270:75:28:-;;;:::i;2104:133:65:-;;;;;;:::i;:::-;;:::i;3749:125::-;;;;;;:::i;:::-;;:::i;11034:231:28:-;;;;;;:::i;:::-;;:::i;3432:100:30:-;;;:::i;7926:185:28:-;;;:::i;20592:913::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4022:117:51:-;;;;;;:::i;:::-;;:::i;16016:2311:28:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2006:113:52:-;;;;;;:::i;:::-;;:::i;10262:86:59:-;;;:::i;11817:72:28:-;;;:::i;2607:430:38:-;;;;;;:::i;:::-;;:::i;19019:911:28:-;;;;;;:::i;:::-;;:::i;1751:80:29:-;;;:::i;1797:79:26:-;;;:::i;1303:121:41:-;;;;;;:::i;:::-;;:::i;2448:85:51:-;;;:::i;2673:104:65:-;;;:::i;4250:102::-;;;:::i;3356:429:26:-;;;;;;:::i;:::-;;:::i;2563:104:65:-;;;:::i;4342:170:51:-;;;;;;:::i;:::-;;:::i;1837:101:29:-;;;:::i;16438:167:59:-;;;;;;:::i;:::-;;:::i;3431:100:65:-;;;:::i;9746:133:28:-;;;:::i;3780:102:30:-;;;:::i;2453:104:65:-;;;:::i;3003:::-;;;:::i;4140:::-;;;:::i;8305:127:28:-;;;:::i;1437:508:52:-;;;;;;:::i;:::-;;:::i;13533:2321:28:-;;;;;;:::i;:::-;;:::i;2178:254:26:-;;;;;;:::i;:::-;;:::i;1868:113:65:-;;;;;;:::i;:::-;;:::i;3113:100::-;;;:::i;3537:::-;;;:::i;1184:113:41:-;;;:::i;1987:111:65:-;;;;;;:::i;:::-;;:::i;3325:100::-;3403:15;3325:100;:::o;2254:81:51:-;2323:5;2316:12;;;;;;;;-1:-1:-1;;2316:12:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:13;;2316:12;;2323:5;;2316:12;;2323:5;2316:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2254:81;:::o;4857:164::-;4940:4;4956:37;4965:10;4977:7;4986:6;4956:8;:37::i;:::-;-1:-1:-1;5010:4:51;4857:164;;;;;:::o;3965:169:65:-;4058:4;4081:46;4116:10;4081:34;:46::i;:::-;4074:53;;3965:169;;;;:::o;2243:204::-;2355:31;2409;2421:7;2430:9;2409:11;:31::i;:::-;2402:38;2243:204;-1:-1:-1;;;2243:204:65:o;3500:106:51:-;3587:12;;3500:106;:::o;3219:100:65:-;3297:15;3219:100;:::o;3274:363:45:-;3377:11;3402:26;3442:27;3504:14;:12;:14::i;:::-;3503:15;3494:24;;3549;:22;:24::i;:::-;3528:45;;3605:25;:23;:25::i;:::-;3583:47;;3274:363;;;:::o;2783:104:65:-;2866:14;2783:104;:::o;29081:120:28:-;29142:16;29177:17;:15;:17::i;:::-;29170:24;;29081:120;:::o;3643:100:65:-;3721:15;3643:100;:::o;14709:346:59:-;14760:22;14794:19;14816:17;:15;:17::i;:::-;14794:39;;14843:32;14898:11;14878:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14878:32:59;;14843:67;;14926:9;14921:101;14945:11;14941:1;:15;14921:101;;;14992:19;15009:1;14992:16;:19::i;:::-;14977:9;14987:1;14977:12;;;;;;;;-1:-1:-1;;;;;14977:34:59;;;:12;;;;;;;;;;;:34;14958:3;;14921:101;;;-1:-1:-1;15039:9:59;-1:-1:-1;;14709:346:59;:::o;2575:655:26:-;2703:4;2719:24;2746:29;2756:6;2764:10;2746:9;:29::i;:::-;2719:56;-1:-1:-1;2785:101:26;2794:10;-1:-1:-1;;;;;2794:20:26;;;;:50;;;2838:6;2818:16;:26;;2794:50;10712:3:10;2785:8:26;:101::i;:::-;2897:36;2907:6;2915:9;2926:6;2897:9;:36::i;:::-;2948:10;-1:-1:-1;;;;;2948:20:26;;;;;;:55;;;-1:-1:-1;;2972:16:26;:31;;2948:55;2944:258;;;3136:55;3145:6;3153:10;3184:6;3165:16;:25;3136:8;:55::i;:::-;-1:-1:-1;3219:4:26;;2575:655;-1:-1:-1;;;;2575:655:26:o;3156:81:51:-;3221:9;;;;3156:81;:::o;2243:113:52:-;2303:7;2329:20;:18;:20::i;8723:165:28:-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;8841:40:28::2;8863:17;8841:21;:40::i;:::-;8723:165:::0;:::o;7114:91::-;7191:7;7114:91;:::o;6269:211:51:-;6382:10;6357:4;6403:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;6403:32:51;;;;;;;;;;6357:4;;6373:79;;6394:7;;6403:48;;6440:10;6403:36;:48::i;:::-;6373:8;:79::i;2893:104:65:-;2976:14;2893:104;:::o;12270:75:28:-;2276:21:38;:19;:21::i;:::-;12321:17:28::1;12332:5;12321:10;:17::i;:::-;12270:75::o:0;2104:133:65:-;2174:16;2209:21;2222:7;2209:12;:21::i;3749:125::-;3812:13;3844:23;3861:5;3844:16;:23::i;11034:231:28:-;2276:21:38;:19;:21::i;:::-;3090:18:45::1;:16;:18::i;:::-;11213:45:28::2;11240:5;11247:10;11213:26;:45::i;:::-;11034:231:::0;;:::o;3432:100:30:-;2276:21:38;:19;:21::i;:::-;3503:22:30::1;3520:4;3503:16;:22::i;7926:185:28:-:0;8022:9;;7996:7;;8022:82;;4326:3;4561:2;8022:20;:82::i;20592:913::-;20861:13;20876:27;20915:71;20951:8;:15;20968:17;:15;:17::i;:::-;20915:35;:71::i;:::-;20997:255;21023:6;21043;21063:9;21086:8;21108:15;21137:25;21176:8;21198:11;21223:19;20997:12;:255::i;:::-;20592:913;;;;;;;;;;:::o;4022:117:51:-;-1:-1:-1;;;;;4114:18:51;4088:7;4114:18;;;;;;;;;;;;4022:117::o;16016:2311:28:-;16304:16;16322;16287:6;13172:68;13203:10;:8;:10::i;:::-;-1:-1:-1;;;;;13181:33:28;:10;-1:-1:-1;;;;;13181:33:28;;6194:3:10;13172:8:28;:68::i;:::-;13250:55;13269:11;:9;:11::i;:::-;13259:6;:21;12526:3:10;13250:8:28;:55::i;:::-;16350:27:::1;16387:19;16841:33;:8;:31;:33::i;:::-;16837:1175;;;16956:23;:21;:23::i;:::-;17180:54;17200:8;17210:13;:11;:13::i;:::-;17225:8;17180:19;:54::i;:::-;17152:82:::0;-1:-1:-1;17152:82:28;-1:-1:-1;16837:1175:28::1;;;17346:21;:19;:21::i;:::-;17382:31;17416:17;:15;:17::i;:::-;17382:51;;17447:39;17461:8;17471:14;17447:13;:39::i;:::-;17529:336;17558:6;17582;17606:9;17633:8;17659:15;17692:16;:14;:16::i;:::-;:48;;17715:25;17692:48;;;17711:1;17692:48;17811:14;17843:8;17529:11;:336::i;:::-;17501:364:::0;-1:-1:-1;17501:364:28;-1:-1:-1;17954:47:28::1;17501:364:::0;17986:14;17954:19:::1;:47::i;:::-;16837:1175;;18117:36;18133:6;18141:11;18117:15;:36::i;:::-;18277:10;18303:8;:15;18289:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;18289:30:28::1;;18269:51;;;;;;13315:1;16016:2311:::0;;;;;;;;;;;:::o;2006:113:52:-;2067:7;2093:19;2106:5;2093:12;:19::i;10262:86:59:-;10332:9;10262:86;:::o;11817:72:28:-;2276:21:38;:19;:21::i;:::-;11866:16:28::1;11877:4;11866:10;:16::i;2607:430:38:-:0;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;19019:911:28:-;19288:14;19304:26;19342:71;19378:8;:15;19395:17;:15;:17::i;19342:71::-;19424:253;19450:6;19470;19490:9;19513:8;19535:15;19564:25;19603:8;19625:11;19650:17;19424:12;:253::i;1751:80:29:-;1818:6;1751:80;:::o;1797:79:26:-;1863:6;1797:79;:::o;1303:121:41:-;-1:-1:-1;;;;;1398:19:41;1372:7;1398:19;;;:10;:19;;;;;;;1303:121::o;2448:85:51:-;2519:7;2512:14;;;;;;;;-1:-1:-1;;2512:14:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2487:13;;2512:14;;2519:7;;2512:14;;2519:7;2512:14;;;;;;;;;;;;;;;;;;;;;;;;2673:104:65;2756:14;2673:104;:::o;4250:102::-;4302:4;4325:20;:18;:20::i;3356:429:26:-;3441:4;3457:24;3484:30;3494:10;3506:7;3484:9;:30::i;:::-;3457:57;;3539:16;3529:6;:26;3525:232;;3571:32;3580:10;3592:7;3601:1;3571:8;:32::i;:::-;3525:232;;;3690:56;3699:10;3711:7;3739:6;3720:16;:25;3690:8;:56::i;:::-;-1:-1:-1;3774:4:26;;3356:429;-1:-1:-1;;;3356:429:26:o;2563:104:65:-;2646:14;2563:104;:::o;4342:170:51:-;4428:4;4444:40;4454:10;4466:9;4477:6;4444:9;:40::i;1837:101:29:-;1885:11;1915:16;:14;:16::i;16438:167:59:-;16518:4;16541:57;16576:21;16591:5;16576:14;:21::i;:::-;16541:34;:57::i;3431:100:65:-;3509:15;3431:100;:::o;9746:133:28:-;9825:9;;9802:4;;9825:47;;4388:3;9825:20;:47::i;3780:102:30:-;2276:21:38;:19;:21::i;:::-;3852:23:30::1;3869:5;3852:16;:23::i;2453:104:65:-:0;2536:14;2453:104;:::o;3003:::-;3086:14;3003:104;:::o;4140:::-;4193:4;4216:21;:19;:21::i;8305:127:28:-;8403:22;8305:127;:::o;1437:508:52:-;1645:18;921:109;1718:5;1725:7;1734:5;1741:19;1754:5;1741:12;:19::i;:::-;1762:8;1689:82;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1666:115;;;;;;1645:136;;1792:104;1814:5;1821:10;1833:26;1851:1;1854;1857;1833:17;:26::i;:::-;1861:8;12759:3:10;1792:21:52;:104::i;:::-;1907:31;1916:5;1923:7;1932:5;1907:8;:31::i;:::-;1437:508;;;;;;;;:::o;13533:2321:28:-;13821:16;13839;13804:6;13172:68;13203:10;:8;:10::i;13172:68::-;13250:55;13269:11;:9;:11::i;13250:55::-;13867:21:::1;:19;:21::i;:::-;13899:31;13933:17;:15;:17::i;:::-;13899:51;;13965:13;:11;:13::i;:::-;13961:1887;;14000:20;14022:26;14052:164;14087:6;14111;14135:9;14162:14;14194:8;14052:17;:164::i;:::-;13999:217;;;;14515:62;14540:16;:14;:16::i;:::-;14524:12;:32;;6140:3:10;14515:8:28;:62::i;:::-;14591:45;14615:1;14619:16;:14;:16::i;:::-;14591:15;:45::i;:::-;14650:59;14666:9;14692:16;:14;:16::i;:::-;14677:12;:31;14650:15;:59::i;:::-;14796:44;14814:9;14825:14;14796:17;:44::i;:::-;14863:9;14888:8;:15;14874:30;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;14874:30:28::1;;14855:50;;;;;;;;;13961:1887;14936:39;14950:8;14960:14;14936:13;:39::i;:::-;14990:20;15012:26;15042:336;15071:6;15095;15119:9;15146:8;15172:15;15205:16;:14;:16::i;:::-;:48;;15228:25;15205:48;;;15224:1;15205:48;15324:14;15356:8;15042:11;:336::i;:::-;14989:389;;;;15492:40;15508:9;15519:12;15492:15;:40::i;2178:254:26:-:0;2259:7;2301:10;:8;:10::i;:::-;-1:-1:-1;;;;;2282:30:26;:7;-1:-1:-1;;;;;2282:30:26;;2278:148;;;-1:-1:-1;;;2328:18:26;;2278:148;2384:31;2400:5;2407:7;2384:15;:31::i;:::-;2377:38;;;;1868:113:65;1928:7;1954:20;1968:5;1954:13;:20::i;3113:100::-;3191:15;3113:100;:::o;3537:::-;3615:15;3537:100;:::o;1184:113:41:-;1244:7;1270:20;:18;:20::i;1987:111:65:-;2046:7;2072:19;2085:5;2072:12;:19::i;1245:274:43:-;1455:5;1479:33;1455:5;1479:19;:33::i;1057:182::-;1176:56;1190:1;1185;:6;:16;;;;;1200:1;1195;:6;1185:16;5804:3:10;1176:8:43;:56::i;:::-;1057:182;;;:::o;6759:280:46:-;6874:7;2246:10;6941:17;;6939:20;6923:36;;6952:6;7007:5;:13;;7019:1;7007:13;;;7015:1;7007:13;6999:22;;:32;;6977:55;;6759:280;-1:-1:-1;;;;6759:280:46:o;2512:395::-;2657:7;2676:49;2700:5;2707:6;2715:9;2676:23;:49::i;:::-;-1:-1:-1;2770:1:46;2752:14;;-1:-1:-1;;2751:20:46;2829:14;;2827:17;2811:33;;;;2884:15;;2862:38;;2512:395::o;1193:166:49:-;1251:7;1270:37;1284:1;1279;:6;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;1928:104::-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;1928:104;-1:-1:-1;1928:104:49:o;10034:213:51:-;-1:-1:-1;;;;;10157:18:51;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;10208:32;;;;;10187:6;;10208:32;:::i;:::-;;;;;;;;10034:213;;;:::o;16696:183:59:-;16793:4;16816:56;:23;16851:20;16816:34;:56::i;13695:426::-;13808:39;13902:7;:14;13919:1;13902:18;13888:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13888:33:59;;13863:58;;13936:9;13931:184;13955:22;:29;13951:1;:33;13931:184;;;14038:13;:11;:13::i;:::-;14033:1;:18;:71;;14066:7;14078:13;:11;:13::i;:::-;14074:1;:17;:29;;14102:1;14098;:5;14074:29;;;14094:1;14074:29;14066:38;;;;;;;;;;;;;;14033:71;;;14054:9;14033:71;14005:22;14028:1;14005:25;;;;;;;;;;;;;;;;;:99;13986:3;;13931:184;;;;13695:426;;;;:::o;4837:237:45:-;4884:4;5030:25;:23;:25::i;:::-;5012:15;:43;:55;;;-1:-1:-1;;5060:7:45;;;;5059:8;;4837:237::o;5187:108::-;5269:19;5187:108;:::o;5301:110::-;5384:20;5301:110;:::o;4384:87:65:-;4451:16;4384:87;:::o;9914:112:59:-;10007:12;9914:112;:::o;15061:436::-;15125:13;15154:10;15150:37;;-1:-1:-1;15173:14:59;15166:21;;15150:37;15201:5;15210:1;15201:10;15197:37;;;-1:-1:-1;15220:14:59;15213:21;;15197:37;15248:5;15257:1;15248:10;15244:37;;;-1:-1:-1;15267:14:59;15260:21;;15244:37;15295:5;15304:1;15295:10;15291:37;;;-1:-1:-1;15314:14:59;15307:21;;15291:37;15342:5;15351:1;15342:10;15338:37;;;-1:-1:-1;15361:14:59;15354:21;;15338:37;15389:5;15398:1;15389:10;15385:106;;;-1:-1:-1;15408:14:59;15401:21;;15385:106;15451:29;7054:3:10;15451:7:59;:29::i;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;7753:559:51:-;7880:71;-1:-1:-1;;;;;7889:20:51;;;;10308:3:10;7880:8:51;:71::i;:::-;7961:72;-1:-1:-1;;;;;7970:23:51;;;;10376:3:10;7961:8:51;:72::i;:::-;8044:47;8065:6;8073:9;8084:6;8044:20;:47::i;:::-;-1:-1:-1;;;;;8122:17:51;;:9;:17;;;;;;;;;;;:68;;8144:6;10854:3:10;8122:21:51;:68::i;:::-;-1:-1:-1;;;;;8102:17:51;;;:9;:17;;;;;;;;;;;:88;;;;8223:20;;;;;;;:32;;8248:6;8223:24;:32::i;:::-;-1:-1:-1;;;;;8200:20:51;;;:9;:20;;;;;;;;;;;;:55;;;;8270:35;;;;;;;;;;8298:6;;8270:35;:::i;2420:181:38:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;4340:98:45:-;4392:39;4401:14;:12;:14::i;:::-;9935:3:10;4392:8:45;:39::i;8894:509:28:-;8979:89;9009:26;:24;:26::i;:::-;8988:17;:47;;6091:3:10;8979:8:28;:89::i;:::-;9078;9108:26;:24;:26::i;:::-;9087:17;:47;;6030:3:10;9078:8:28;:89::i;:::-;9190:9;;:147;;9224:17;4326:3;4561:2;9190:20;:147::i;:::-;9178:9;:159;9353:43;;;;;;9378:17;;9353:43;:::i;:::-;;;;;;;;8894:509;:::o;966:167:54:-;1024:7;1055:5;;;1070:37;1079:6;;;;1024:7;1070:8;:37::i;3913:358:45:-;3969:6;3965:232;;;3991:81;4018:24;:22;:24::i;:::-;4000:15;:42;9993:3:10;3991:8:45;:81::i;:::-;3965:232;;;4103:83;4130:25;:23;:25::i;:::-;4112:15;:43;11423:3:10;4103:8:45;:83::i;:::-;4207:7;:16;;;;;;;;;;4238:26;;;;;;4207:16;;4238:26;:::i;11795:361:59:-;11866:16;11894:34;11962:1;11945:7;:14;:18;11931:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11931:33:59;;11894:70;;11979:9;11974:141;11998:17;:24;11994:1;:28;11974:141;;;12066:7;12078:13;:11;:13::i;:::-;12074:1;:17;:29;;12098:1;12102;12098:5;12074:29;;;12094:1;12074:29;12066:38;;;;;;;;;;;;;;12043:17;12061:1;12043:20;;;;;;;;;;;;;;;;;:61;12024:3;;11974:141;;11271:279:28;11364:14;11381:11;:9;:11::i;:::-;11364:28;;11409:20;11433:10;:8;:10::i;:::-;-1:-1:-1;;;;;11433:27:28;;11461:6;11469:5;11433:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11486:57;;;;;11402:73;;-1:-1:-1;;;;;;11486:37:28;;;-1:-1:-1;11486:37:28;;-1:-1:-1;11486:57:28;;-1:-1:-1;11524:6:28;;11532:10;;11486:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9977:488;10065:9;;:56;;10086:7;4388:3;10065:20;:56::i;:::-;10053:9;:68;10137:33;;;;;;10162:7;;10137:33;:::i;:::-;;;;;;;;10425:7;10420:38;;10434:24;:22;:24::i;4847:203:46:-;5041:1;5023:14;;-1:-1:-1;;5022:20:46;5003:14;;;4995:48;;4847:203::o;920:131:43:-;998:46;1012:1;1007;:6;5804:3:10;998:8:43;:46::i;5009:287:65:-;5227:7;5236:16;5264:25;;;;;;;;;;:::i;:::-;;;;;;;;31004:360:28;31133:14;;31201:21;;31157:66;;31133:14;;31157:35;:66::i;:::-;31239:9;31234:124;31258:6;31254:1;:10;31234:124;;;31298:49;31317:7;31325:1;31317:10;;;;;;;;;;;;;;31329:14;31344:1;31329:17;;;;;;;;;;;;;;31298:18;:49::i;:::-;31285:7;31293:1;31285:10;;;;;;;;;;;;;;;;;:62;31266:3;;31234:124;;;;31004:360;;;:::o;32751:7126::-;33432:10;33454:4;33432:27;33428:6443;;33728:12;33754:4;-1:-1:-1;;;;;33746:18:28;33765:8;;33746:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33727:47;;;33992:7;34025:1;34020:3336;;;;37516:9;34020:3336;34496:4;34493:1;34490;34475:26;34549:1;34543:8;34553:66;34539:81;34781:66;34771:77;;34765:2;;34904:16;34901:1;34898;34883:38;34960:16;34957:1;34950:27;34765:2;;36371;36365:4;36362:1;36347:27;36568:2;36562:4;36555:16;36992:2;36974:16;36970:25;36964:4;36958;36943:53;37330:2;37312:16;37308:25;37305:1;37298:36;33858:3703;37816:21;:19;:21::i;:::-;37852:31;37886:17;:15;:17::i;:::-;37852:51;;37917:39;37931:8;37941:14;37917:13;:39::i;:::-;37972:17;37991:29;38024:256;38049:6;38073;38097:9;38124:8;38150:15;38183:25;38226:14;38258:8;38024:7;:256;;:::i;:::-;37971:309;;;;38295:45;38311:12;38325:14;38295:15;:45;;:::i;:::-;38821:19;;39208:23;;;39248:24;;;39494:66;39476:16;;;39469:92;38842:2;38817:28;39587:16;;;39843:2;39833:13;;39587:16;39819:28;1066:243:2;1140:4;1245:1;1231:4;:11;:15;:71;;;;;1003:3;1250:52;;1261:4;1250:25;;;;;;;;;;;;:::i;:::-;:52;;;;1066:243;-1:-1:-1;;1066:243:2:o;4531:119:30:-;4588:55;4597:16;:14;:16::i;:::-;12169:3:10;4588:8:30;:55::i;5268:399::-;5424:7;5433:16;5461:19;5483:27;:8;:25;:27::i;:::-;5461:49;;5521:27;5551:66;5582:8;5592:11;5605;5551:30;:66::i;:::-;5636:11;;;;-1:-1:-1;5268:399:30;;-1:-1:-1;;;;;5268:399:30:o;26094:164:28:-;26233:18;:16;:18::i;30111:354::-;30234:14;;30302:21;;30258:66;;30234:14;;30258:35;:66::i;:::-;30340:9;30335:124;30359:6;30355:1;:10;30335:124;;;30399:49;30418:7;30426:1;30418:10;;;;;;;;;;;;;;30430:14;30445:1;30430:17;;;;;;;;;;;;;;30399:18;:49::i;:::-;30386:7;30394:1;30386:10;;;;;;;;;;;;;;;;;:62;30367:3;;30335:124;;3934:104:26;4010:21;4016:6;4024;4010:5;:21::i;31895:356:28:-;32022:14;;32090:21;;32046:66;;32022:14;;32046:35;:66::i;:::-;32128:9;32123:122;32147:6;32143:1;:10;32123:122;;;32187:47;32204:7;32212:1;32204:10;;;;;;;;;;;;;;32216:14;32231:1;32216:17;;;;;;;;;;;;;;32187:16;:47::i;:::-;32174:7;32182:1;32174:10;;;;;;;;;;;;;;;;;:60;32155:3;;32123:122;;16049:98:59;16125:15;16049:98;:::o;32257:488:28:-;32315:11;32712:10;:8;:10::i;:::-;-1:-1:-1;;;;;32712:24:28;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10354:357:59:-;10415:7;10447;-1:-1:-1;;;;;10438:16:59;:5;-1:-1:-1;;;;;10438:16:59;;10434:30;;;-1:-1:-1;10463:1:59;10456:8;;10434:30;10487:7;-1:-1:-1;;;;;10478:16:59;:5;-1:-1:-1;;;;;10478:16:59;;10474:30;;;-1:-1:-1;10503:1:59;10496:8;;10474:30;10527:7;-1:-1:-1;;;;;10518:16:59;:5;-1:-1:-1;;;;;10518:16:59;;10514:30;;;-1:-1:-1;10543:1:59;10536:8;;10514:30;10567:7;-1:-1:-1;;;;;10558:16:59;:5;-1:-1:-1;;;;;10558:16:59;;10554:30;;;-1:-1:-1;10583:1:59;10576:8;;10554:30;10607:7;-1:-1:-1;;;;;10598:16:59;:5;-1:-1:-1;;;;;10598:16:59;;10594:30;;;-1:-1:-1;10623:1:59;10616:8;;10594:30;10647:7;-1:-1:-1;;;;;10638:16:59;:5;-1:-1:-1;;;;;10638:16:59;;10634:30;;;-1:-1:-1;10663:1:59;10656:8;;5949:143:46;6054:14;2246:10;6046:33;;;6045:40;;5949:143::o;15859:100:59:-;15936:16;15859:100;:::o;3803:419:41:-;3963:13;;;3973:2;3963:13;;;;;;;;;3914:12;;;;3963:13;;;;;;;;;;;-1:-1:-1;3963:13:41;3938:38;;4092:1;4087:2;4076:9;4072:18;4065:29;4134:1;4129:2;4118:9;4114:18;4107:29;4177:1;4172:2;4161:9;4157:18;4149:30;4206:9;3803:419;-1:-1:-1;;;;3803:419:41:o;1701:1214::-;1895:14;1912:28;1929:10;1912:16;:28::i;:::-;1895:45;;1950:66;1959:45;1977:7;1986:6;1994:9;1959:17;:45::i;:::-;2006:9;1950:8;:66::i;:::-;2487:63;2508:15;2496:8;:27;;12277:3:10;2487:8:41;:63::i;:::-;-1:-1:-1;;;;;;;;2884:19:41;;;;;;;:10;:19;;;;;:24;;2907:1;2884:24;;;-1:-1:-1;;1701:1214:41:o;7683:110:28:-;3257:3;7683:110;:::o;3818::26:-;3897:24;3903:9;3914:6;3897:5;:24::i;4570:149:51:-;-1:-1:-1;;;;;4685:18:51;;;4659:7;4685:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4570:149::o;11304:383:59:-;11365:7;11564:54;11582:13;:11;:13::i;:::-;11573:5;:22;;5640:3:10;11564:8:59;:54::i;:::-;11644:13;:11;:13::i;:::-;11636:5;:21;:44;;11668:12;:5;11678:1;11668:9;:12::i;:::-;11636:44;;;-1:-1:-1;11660:5:59;11304:383::o;2386:188:50:-;2447:7;2494:10;2506:12;2520:15;2537:13;:11;:13::i;:::-;2560:4;2483:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2473:94;;;;;;2466:101;;2386:188;:::o;12945:440:59:-;13005:23;13137:13;:11;:13::i;:::-;13129:5;:21;:44;;13161:12;:5;13171:1;13161:9;:12::i;:::-;13129:44;;;13153:5;13129:44;13111:62;;13280:98;13307:12;13289:15;:30;:66;;;;;13342:13;:11;:13::i;:::-;13323:15;:32;;13289:66;5640:3:10;13280:8:59;:98::i;1525:374:43:-;1621:1;1606:5;:12;:16;1602:53;;;1638:7;;1602:53;1665:16;1684:5;1690:1;1684:8;;;;;;;;;;;;;;1665:27;;1707:9;1719:1;1707:13;;1702:191;1726:5;:12;1722:1;:16;1702:191;;;1759:15;1777:5;1783:1;1777:8;;;;;;;;;;;;;;1759:26;;1799:51;1819:7;-1:-1:-1;;;;;1808:18:43;:8;-1:-1:-1;;;;;1808:18:43;;5692:3:10;1799:8:43;:51::i;:::-;1875:7;-1:-1:-1;1740:3:43;;1702:191;;7061:607:46;7197:44;7215:3;7206:6;:12;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;:27::i;:::-;7433:9;:40;;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;1437:126:10:-;1484:28;1492:9;1484:28;:7;:28::i;1816:206:54:-;1923:7;1942:27;1956:1;1951;:6;;1959:9;1942:8;:27::i;:::-;-1:-1:-1;;1991:5:54;;;1816:206::o;1944:544:29:-;2032:4;1638:42;2053:10;:8;:10::i;:::-;-1:-1:-1;;;;;2053:29:29;;;2052:63;;;;;2087:28;2106:8;2087:18;:28::i;:::-;2048:434;;;2247:10;:8;:10::i;:::-;-1:-1:-1;;;;;2233:24:29;:10;-1:-1:-1;;;;;2233:24:29;;2226:31;;;;2048:434;2410:16;:14;:16::i;:::-;-1:-1:-1;;;;;2410:27:29;;2438:8;2448:7;2465:4;2410:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9409:124:28:-;3365:4;9409:124;:::o;9539:::-;3438:4;9539:124;:::o;2628:355:47:-;2690:7;2709:38;2718:6;;;5318:1:10;2709:8:47;:38::i;:::-;2762:6;2758:219;;-1:-1:-1;2791:1:47;2784:8;;2758:219;945:4;2843:7;;;;2864:51;;2843:1;:7;:1;2873:13;;;;;:20;5366:1:10;2864:8:47;:51::i;:::-;2965:1;2953:9;:13;;;;;;2946:20;;;;;1364:158:2;1432:19;1492:4;1481:34;;;;;;;;;;;;:::i;5673:1420:30:-;5835:27;6856:16;6875:32;:11;6895;6875:19;:32::i;:::-;6856:51;;6945:8;:15;6931:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6931:30:30;;6918:43;;6976:9;6971:116;6995:8;:15;6991:1;:19;6971:116;;;7047:29;7067:8;7047;7056:1;7047:11;;;;;;;;;;;;;;:19;;:29;;;;:::i;:::-;7031:10;7042:1;7031:13;;;;;;;;;;;;;;;;;:45;7012:3;;6971:116;;;;5673:1420;;;;;;:::o;1790:209:47:-;1852:7;1889:5;;;1904:57;1913:6;;;:26;;;1938:1;1933;1923:7;:11;;;;;;:16;1913:26;5269:1:10;1904:8:47;:57::i;:::-;945:4;1979:13;;;;-1:-1:-1;;;1790:209:47:o;9200:411:51:-;9275:68;-1:-1:-1;;;;;9284:21:51;;;;10506:3:10;9275:8:51;:68::i;:::-;9354:49;9375:7;9392:1;9396:6;9354:20;:49::i;:::-;-1:-1:-1;;;;;9435:18:51;;:9;:18;;;;;;;;;;;:65;;9458:6;11950:3:10;9435:22:51;:65::i;:::-;-1:-1:-1;;;;;9414:18:51;;:9;:18;;;;;;;;;;:86;9510:42;9526:25;9544:6;9526:13;:11;:13::i;:::-;:17;;:25::i;:::-;9510:15;:42::i;:::-;9593:1;-1:-1:-1;;;;;9567:37:51;9576:7;-1:-1:-1;;;;;9567:37:51;;9597:6;9567:37;;;;;;:::i;:::-;;;;;;;;9200:411;;:::o;2989:682:47:-;3049:7;3068:38;3077:6;;;5318:1:10;3068:8:47;:38::i;:::-;3121:6;3117:548;;-1:-1:-1;3150:1:47;3143:8;;3117:548;945:4;3202:7;;;;3223:51;;3202:1;:7;:1;3232:13;;;3223:51;3648:1;3643;3631:9;:13;3630:19;;;;;;3653:1;3629:25;3622:32;;;;;3199:183:50;3276:7;3341:20;:18;:20::i;:::-;3363:10;3312:62;;;;;;;;;:::i;2921:876:41:-;3066:4;3082:60;3091:9;:16;3111:2;3091:22;12334:3:10;3082:8:41;:60::i;:::-;3427:4;3412:20;;;3406:27;3472:4;3457:20;;;3451:27;3525:4;3510:20;;3504:27;3579:26;;3153:9;3579:26;;;;;;;;;3406:27;;3451;;3496:36;;;3579:26;;;;3589:6;;3496:36;;3406:27;;3451;;3579:26;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3579:26:41;;;;;;-1:-1:-1;;;;;;;3728:30:41;;;;;;:61;;;3782:7;-1:-1:-1;;;;;3762:27:41;:16;-1:-1:-1;;;;;3762:27:41;;3728:61;3720:70;2921:876;-1:-1:-1;;;;;;;;2921:876:41:o;8583:297:51:-;8658:49;8687:1;8691:7;8700:6;8658:20;:49::i;:::-;8718:42;8734:25;8752:6;8734:13;:11;:13::i;:::-;:17;;:25::i;8718:42::-;-1:-1:-1;;;;;8791:18:51;;:9;:18;;;;;;;;;;;:30;;8814:6;8791:22;:30::i;:::-;-1:-1:-1;;;;;8770:18:51;;:9;:18;;;;;;;;;;;:51;;;;8836:37;;8770:18;;:9;8836:37;;;;8866:6;;8836:37;:::i;3388:427:50:-;3790:9;;3765:44::o;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;12351:321:28;12437:4;12485:47;12497:34;12485:11;:47::i;:::-;12473:8;:59;12472:143;;;-1:-1:-1;12562:52:28;12574:39;12562:11;:52::i;:::-;12550:8;:64;12472:143;:193;;;;12631:34;12656:8;12631:24;:34::i;1404:121:54:-;1462:7;1488:30;1492:1;1495;5172::10;1488:3:54;:30::i;3870:94:51:-;3937:12;:20;3870:94::o;2494:103:29:-;-1:-1:-1;2562:4:29;;2494:103::o;301:707:-1:-;;418:3;411:4;403:6;399:17;395:27;385:2;;-1:-1;;426:12;385:2;473:6;460:20;26752:18;26744:6;26741:30;26738:2;;;-1:-1;;26774:12;26738:2;26819:4;;26811:6;26807:17;495:80;26819:4;26807:17;26872:15;495:80;:::i;:::-;603:21;;;486:89;-1:-1;660:14;;;635:17;;;740:27;;;;;737:36;-1:-1;734:2;;;786:1;;776:12;734:2;811:1;802:10;;796:206;821:6;818:1;815:13;796:206;;;2287:20;;889:50;;843:1;836:9;;;;;953:14;;;;981;;796:206;;;800:14;;;;;378:630;;;;:::o;1424:440::-;;1525:3;1518:4;1510:6;1506:17;1502:27;1492:2;;-1:-1;;1533:12;1492:2;1580:6;1567:20;27047:18;27039:6;27036:30;27033:2;;;-1:-1;;27069:12;27033:2;1602:64;27210:4;27142:9;1518:4;27127:6;27123:17;27119:33;27200:15;1602:64;:::i;:::-;1593:73;;1686:6;1679:5;1672:21;1790:3;27210:4;1781:6;1714;1772:16;;1769:25;1766:2;;;1807:1;;1797:12;1766:2;31959:6;27210:4;1714:6;1710:17;27210:4;1748:5;1744:16;31936:30;32015:1;31997:16;;;27210:4;31997:16;31990:27;1748:5;1485:379;-1:-1;;1485:379::o;2768:241::-;;2872:2;2860:9;2851:7;2847:23;2843:32;2840:2;;;-1:-1;;2878:12;2840:2;85:6;72:20;97:33;124:5;97:33;:::i;3016:366::-;;;3137:2;3125:9;3116:7;3112:23;3108:32;3105:2;;;-1:-1;;3143:12;3105:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3195:63;-1:-1;3295:2;3334:22;;72:20;97:33;72:20;97:33;:::i;:::-;3303:63;;;;3099:283;;;;;:::o;3389:491::-;;;;3527:2;3515:9;3506:7;3502:23;3498:32;3495:2;;;-1:-1;;3533:12;3495:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3585:63;-1:-1;3685:2;3724:22;;72:20;97:33;72:20;97:33;:::i;:::-;3489:391;;3693:63;;-1:-1;;;3793:2;3832:22;;;;2287:20;;3489:391::o;3887:991::-;;;;;;;;4091:3;4079:9;4070:7;4066:23;4062:33;4059:2;;;-1:-1;;4098:12;4059:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;4150:63;-1:-1;4250:2;4289:22;;72:20;97:33;72:20;97:33;:::i;:::-;4258:63;-1:-1;4358:2;4397:22;;2287:20;;-1:-1;4466:2;4505:22;;2287:20;;-1:-1;4574:3;4612:22;;2563:20;2588:31;2563:20;2588:31;:::i;:::-;4053:825;;;;-1:-1;4053:825;;;;4583:61;4681:3;4721:22;;1218:20;;-1:-1;4790:3;4830:22;;;1218:20;;4053:825;-1:-1;;4053:825::o;4885:366::-;;;5006:2;4994:9;4985:7;4981:23;4977:32;4974:2;;;-1:-1;;5012:12;4974:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;5064:63;5164:2;5203:22;;;;2287:20;;-1:-1;;;4968:283::o;5258:377::-;;5387:2;5375:9;5366:7;5362:23;5358:32;5355:2;;;-1:-1;;5393:12;5355:2;5451:17;5438:31;5489:18;5481:6;5478:30;5475:2;;;-1:-1;;5511:12;5475:2;5541:78;5611:7;5602:6;5591:9;5587:22;5541:78;:::i;:::-;5531:88;5349:286;-1:-1;;;;5349:286::o;5642:502::-;;;5788:2;5776:9;5767:7;5763:23;5759:32;5756:2;;;-1:-1;;5794:12;5756:2;5852:17;5839:31;5890:18;5882:6;5879:30;5876:2;;;-1:-1;;5912:12;5876:2;5942:78;6012:7;6003:6;5992:9;5988:22;5942:78;:::i;:::-;5932:88;6057:2;6096:22;;;;2287:20;;-1:-1;;;;5750:394::o;6151:257::-;;6263:2;6251:9;6242:7;6238:23;6234:32;6231:2;;;-1:-1;;6269:12;6231:2;1097:6;1091:13;32779:5;29574:13;29567:21;32757:5;32754:32;32744:2;;-1:-1;;32790:12;6415:1235;;;;;;;;6655:3;6643:9;6634:7;6630:23;6626:33;6623:2;;;-1:-1;;6662:12;6623:2;1231:6;1218:20;6714:63;;6814:2;6857:9;6853:22;72:20;97:33;124:5;97:33;:::i;:::-;6822:63;-1:-1;6922:2;6961:22;;72:20;97:33;72:20;97:33;:::i;:::-;6930:63;-1:-1;7058:2;7043:18;;7030:32;7082:18;7071:30;;;7068:2;;;-1:-1;;7104:12;7068:2;7134:78;7204:7;7195:6;7184:9;7180:22;7134:78;:::i;:::-;7124:88;;7249:3;7293:9;7289:22;2287:20;7258:63;;7358:3;7402:9;7398:22;2287:20;7367:63;;7495:3;7484:9;7480:19;7467:33;7453:47;;7082:18;7512:6;7509:30;7506:2;;;-1:-1;;7542:12;7506:2;;7572:62;7626:7;7617:6;7606:9;7602:22;7572:62;:::i;:::-;7562:72;;;6617:1033;;;;;;;;;;:::o;7657:239::-;;7760:2;7748:9;7739:7;7735:23;7731:32;7728:2;;;-1:-1;;7766:12;7728:2;1367:6;1354:20;29751:66;33025:5;29740:78;33001:5;32998:34;32988:2;;-1:-1;;33036:12;7903:303;;8038:2;8026:9;8017:7;8013:23;8009:32;8006:2;;;-1:-1;;8044:12;8006:2;1976:6;1970:13;1988:53;2035:5;1988:53;:::i;8491:500::-;;;8636:2;8624:9;8615:7;8611:23;8607:32;8604:2;;;-1:-1;;8642:12;8604:2;2148:6;2135:20;2160:48;2202:5;2160:48;:::i;:::-;8694:78;-1:-1;8837:2;8822:18;;8809:32;8861:18;8850:30;;8847:2;;;-1:-1;;8883:12;8847:2;8913:62;8967:7;8958:6;8947:9;8943:22;8913:62;:::i;:::-;8903:72;;;8598:393;;;;;:::o;8998:241::-;;9102:2;9090:9;9081:7;9077:23;9073:32;9070:2;;;-1:-1;;9108:12;9070:2;-1:-1;2287:20;;9064:175;-1:-1;9064:175::o;9246:672::-;;;;;9412:3;9400:9;9391:7;9387:23;9383:33;9380:2;;;-1:-1;;9419:12;9380:2;2441:6;2435:13;9471:74;;9582:2;9636:9;9632:22;2435:13;9590:74;;9701:2;9755:9;9751:22;2435:13;9709:74;;9820:2;9874:9;9870:22;220:13;238:33;265:5;238:33;:::i;:::-;9374:544;;;;-1:-1;9374:544;;-1:-1;;9374:544::o;9925:259::-;;10038:2;10026:9;10017:7;10013:23;10009:32;10006:2;;;-1:-1;;10044:12;10006:2;2713:6;2707:13;2725:31;2750:5;2725:31;:::i;10191:395::-;;;10321:2;10309:9;10300:7;10296:23;10292:32;10289:2;;;-1:-1;;10327:12;10289:2;2713:6;2707:13;2725:31;2750:5;2725:31;:::i;:::-;10488:2;10538:22;;;;2435:13;10379:72;;2435:13;;-1:-1;;;10283:303::o;11999:690::-;;12192:5;27693:12;28517:6;28512:3;28505:19;28554:4;;28549:3;28545:14;12204:93;;28554:4;12368:5;27368:14;-1:-1;12407:260;12432:6;12429:1;12426:13;12407:260;;;12493:13;;12879:37;;10971:14;;;;28245;;;;12454:1;12447:9;12407:260;;;-1:-1;12673:10;;12123:566;-1:-1;;;;;12123:566::o;13583:343::-;;13725:5;27693:12;28517:6;28512:3;28505:19;-1:-1;32104:101;32118:6;32115:1;32112:13;32104:101;;;28554:4;32185:11;;;;;32179:18;32166:11;;;;;32159:39;32133:10;32104:101;;;32220:6;32217:1;32214:13;32211:2;;;-1:-1;28554:4;32276:6;28549:3;32267:16;;32260:27;32211:2;-1:-1;32557:2;32537:14;32553:7;32533:28;13882:39;;;;28554:4;13882:39;;13673:253;-1:-1;;13673:253::o;16396:387::-;12879:37;;;29751:66;29740:78;16647:2;16638:12;;13174:56;16747:11;;;16538:245::o;16790:291::-;;31959:6;31954:3;31949;31936:30;31997:16;;31990:27;;;31997:16;16934:147;-1:-1;16934:147::o;17088:659::-;15617:66;15597:87;;15582:1;15703:11;;12879:37;;;;17599:12;;;12879:37;17710:12;;;17333:414::o;17754:222::-;-1:-1;;;;;30123:54;;;;11070:37;;17881:2;17866:18;;17852:124::o;17983:412::-;18181:2;18195:47;;;27693:12;;18166:18;;;28505:19;;;17983:412;;18181:2;27368:14;;;;28545;;;;17983:412;11636:302;11661:6;11658:1;11655:13;11636:302;;;11722:13;;-1:-1;;;;;30123:54;14024:70;;28245:14;;;;10789;;;;11683:1;11676:9;11636:302;;;-1:-1;18248:137;;18152:243;-1:-1;;;;;;18152:243::o;18402:370::-;;18579:2;18600:17;18593:47;18654:108;18579:2;18568:9;18564:18;18748:6;18654:108;:::i;18779:629::-;;19034:2;19055:17;19048:47;19109:108;19034:2;19023:9;19019:18;19203:6;19109:108;:::i;:::-;19265:9;19259:4;19255:20;19250:2;19239:9;19235:18;19228:48;19290:108;19393:4;19384:6;19290:108;:::i;:::-;19282:116;19005:403;-1:-1;;;;;19005:403::o;19415:210::-;29574:13;;29567:21;12762:34;;19536:2;19521:18;;19507:118::o;19632:432::-;29574:13;;29567:21;12762:34;;19967:2;19952:18;;12879:37;;;;20050:2;20035:18;;12879:37;19809:2;19794:18;;19780:284::o;20071:222::-;12879:37;;;20198:2;20183:18;;20169:124::o;20300:444::-;12879:37;;;-1:-1;;;;;30123:54;;;20647:2;20632:18;;11070:37;30123:54;20730:2;20715:18;;11070:37;20483:2;20468:18;;20454:290::o;20751:780::-;12879:37;;;-1:-1;;;;;30123:54;;;21183:2;21168:18;;11070:37;30123:54;;;;21266:2;21251:18;;11070:37;21349:2;21334:18;;12879:37;21432:3;21417:19;;12879:37;;;;21516:3;21501:19;;12879:37;21018:3;21003:19;;20989:542::o;21538:668::-;12879:37;;;21942:2;21927:18;;12879:37;;;;22025:2;22010:18;;12879:37;;;;22108:2;22093:18;;12879:37;-1:-1;;;;;30123:54;22191:3;22176:19;;11070:37;21777:3;21762:19;;21748:458::o;22213:417::-;;12909:5;12886:3;12879:37;22386:2;22504;22493:9;22489:18;22482:48;22544:76;22386:2;22375:9;22371:18;22606:6;22544:76;:::i;22637:363::-;12879:37;;;-1:-1;;;;;30123:54;22986:2;22971:18;;14024:70;22807:2;22792:18;;22778:222::o;23007:548::-;12879:37;;;30339:4;30328:16;;;;23375:2;23360:18;;16349:35;23458:2;23443:18;;12879:37;23541:2;23526:18;;12879:37;23214:3;23199:19;;23185:370::o;24652:310::-;;24799:2;24820:17;24813:47;24874:78;24799:2;24788:9;24784:18;24938:6;24874:78;:::i;24969:416::-;25169:2;25183:47;;;15953:2;25154:18;;;28505:19;15989:17;28545:14;;;15969:38;16026:12;;;25140:245::o;25621:481::-;;12909:5;12886:3;12879:37;25826:2;25944;25933:9;25929:18;25922:48;25984:108;25826:2;25815:9;25811:18;26078:6;25984:108;:::i;26109:214::-;30339:4;30328:16;;;;16349:35;;26232:2;26217:18;;26203:120::o;26330:256::-;26392:2;26386:9;26418:17;;;26493:18;26478:34;;26514:22;;;26475:62;26472:2;;;26550:1;;26540:12;26472:2;26392;26559:22;26370:216;;-1:-1;26370:216::o;32574:117::-;-1:-1;;;;;32661:5;30123:54;32636:5;32633:35;32623:2;;32682:1;;32672:12;33504:113;30339:4;33587:5;30328:16;33564:5;33561:33;33551:2;;33608:1;;33598:12" + }, + "methodIdentifiers": { + "DOMAIN_SEPARATOR()": "3644e515", + "addBptIndex(uint256)": "f4e81884", + "addBptItem(uint256[],uint256)": "14841db4", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "areAllTokensExempt()": "d25fc61a", + "areNoTokensExempt()": "9a3b9cce", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "decreaseAllowance(address,uint256)": "a457c2d7", + "disableRecoveryMode()": "b7b814fc", + "dropBptItem(uint256[])": "42e68aad", + "enableRecoveryMode()": "54a844ba", + "getActionId(bytes4)": "851c1bb3", + "getAuthorizer()": "aaabadc5", + "getBptIndex()": "82687a56", + "getDomainSeparator()": "ed24911d", + "getNextNonce(address)": "90193b7c", + "getOwner()": "893d20e8", + "getPausedState()": "1c0de051", + "getPoolId()": "38fff2d0", + "getProtocolFeesCollector()": "d2946c2b", + "getRateProvider(uint256)": "48ade7b0", + "getRateProvider0()": "bb2478d4", + "getRateProvider1()": "a8e59c7c", + "getRateProvider2()": "98411490", + "getRateProvider3()": "1d936c67", + "getRateProvider4()": "3eb3ed29", + "getRateProvider5()": "c9e51c90", + "getRateProviders()": "238a2d59", + "getScalingFactor0()": "e3c6137d", + "getScalingFactor1()": "1a16a923", + "getScalingFactor2()": "064ca1b8", + "getScalingFactor3()": "b2469446", + "getScalingFactor4()": "eaecb2b8", + "getScalingFactor5()": "21e63146", + "getScalingFactors()": "1dd746ea", + "getSwapFeePercentage()": "55c67628", + "getVault()": "8d928af8", + "inRecoveryMode()": "b35056b8", + "increaseAllowance(address,uint256)": "39509351", + "isTokenExemptFromYieldProtocolFee(address)": "ab7759f1", + "isTokenExemptFromYieldProtocolFeeByIndex(uint256)": "0a3f0f60", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "74f3b009", + "onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)": "d5c096c4", + "pause()": "8456cb59", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)": "6028bfd4", + "queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)": "87ec6817", + "setAssetManagerPoolConfig(address,bytes)": "50dd6ed9", + "setSwapFeePercentage(uint256)": "38e9922e", + "skipBptIndex(uint256)": "dd93a2c9", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "unpause()": "3f4ba83a" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"tokenRateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"exemptFromYieldProtocolFeeFlags\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"RecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"addBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmount\",\"type\":\"uint256\"}],\"name\":\"addBptItem\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsWithBpt\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areAllTokensExempt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areNoTokensExempt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"dropBptItem\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDomainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNextNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeesCollector\",\"outputs\":[{\"internalType\":\"contract IProtocolFeesCollector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRateProvider\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProvider0\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProvider1\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProvider2\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProvider3\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProvider4\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProvider5\",\"outputs\":[{\"internalType\":\"contract IRateProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateProviders\",\"outputs\":[{\"internalType\":\"contract IRateProvider[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactor0\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactor1\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactor2\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactor3\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactor4\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactor5\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenExemptFromYieldProtocolFee\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"}],\"name\":\"isTokenExemptFromYieldProtocolFeeByIndex\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onExitPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onJoinPool\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryExit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"poolId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"lastChangeBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryJoin\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"poolConfig\",\"type\":\"bytes\"}],\"name\":\"setAssetManagerPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"skipBptIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}.\"},\"allowance(address,address)\":{\"details\":\"Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval. This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this contract inherits.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Override to allow decreasing allowance by more than the current amount (setting it to zero)\"},\"disableRecoveryMode()\":{\"details\":\"Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly necessary.\"},\"enableRecoveryMode()\":{\"details\":\"Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may perform certain operations in a \\\"safer\\\" manner that is less likely to fail, in an attempt to keep the pool running, even in a pathological state. Unlike the Pause operation, which is only available during a short window after factory deployment, Recovery Mode can always be enabled.\"},\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDomainSeparator()\":{\"details\":\"Returns the EIP712 domain separator.\"},\"getPausedState()\":{\"details\":\"Returns the current contract pause status, as well as the end times of the Pause Window and Buffer Period.\"},\"getProtocolFeesCollector()\":{\"details\":\"This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)\"},\"getRateProviders()\":{\"details\":\"Returns the rate providers configured for each token (in the same order as registered).\"},\"getScalingFactors()\":{\"details\":\"Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically not relevant for outside parties, but which might be useful for some types of Pools.\"},\"getSwapFeePercentage()\":{\"details\":\"This is stored in `_miscData`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"isTokenExemptFromYieldProtocolFee(address)\":{\"details\":\"Returns whether the token is exempt from protocol fees on the yield. If the BPT token is passed in (which doesn't make much sense, but shouldn't fail, since it is a valid pool token), the corresponding flag will be false.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `exitPool`.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"This function can only be called from the Vault, from `joinPool`.\"},\"pause()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment (see `TemporarilyPausable`).\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the Vault with the same arguments, along with the number of tokens `recipient` would receive. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"details\":\"Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the Vault with the same arguments, along with the number of tokens `sender` would have to supply. This function is not meant to be called directly, but rather from a helper contract that fetches current Vault data, such as the protocol swap fee percentage and Pool balances. Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must explicitly use eth_call instead of eth_sendTransaction.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"details\":\"This is a permissioned function, unavailable when the pool is paused. The details of the configuration data are set by each Asset Manager. (For an example, see `RewardsAssetManager`.)\"},\"setSwapFeePercentage(uint256)\":{\"details\":\"This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}. The total supply should only be read using this function Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other storage values).\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance\"},\"unpause()\":{\"details\":\"This is a permissioned function that will only work on a paused pool within the Buffer Period set during pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause after the Buffer Period expires.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"disableRecoveryMode()\":{\"notice\":\"Disable recovery mode, which disables the special safe exit path for LPs.\"},\"enableRecoveryMode()\":{\"notice\":\"Enable recovery mode, which enables a special safe exit path for LPs.\"},\"getPoolId()\":{\"notice\":\"Return the pool id.\"},\"getProtocolFeesCollector()\":{\"notice\":\"Return the ProtocolFeesCollector contract.\"},\"getSwapFeePercentage()\":{\"notice\":\"Return the current value of the swap fee percentage.\"},\"inRecoveryMode()\":{\"notice\":\"Returns whether the pool is in Recovery Mode.\"},\"onExitPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for removing liquidity from a pool.\"},\"onJoinPool(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"Vault hook for adding liquidity to a pool (including the first time, \\\"initializing\\\" the pool).\"},\"pause()\":{\"notice\":\"Pause the pool: an emergency action which disables all pool functions.\"},\"queryExit(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onExitPool`.\"},\"queryJoin(bytes32,address,address,uint256[],uint256,uint256,bytes)\":{\"notice\":\"\\\"Dry run\\\" `onJoinPool`.\"},\"setAssetManagerPoolConfig(address,bytes)\":{\"notice\":\"Set the asset manager parameters for the given token.\"},\"setSwapFeePercentage(uint256)\":{\"notice\":\"Set the swap fee percentage.\"},\"unpause()\":{\"notice\":\"Reverse a `pause` operation, and restore a pool to normal functionality.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockComposableStablePoolStorage.sol\":\"MockComposableStablePoolStorage\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol\":{\"keccak256\":\"0x29a6dcacf7fb1d48ec2cbaa6da7d8338c2ba35ec50c1fb90cf2972055bfd18fa\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://767965180c88743a46680854be50876cc91df7451d981e71e0795dc6cc8c7f3c\",\"dweb:/ipfs/QmbwCYy8J5c1jbYRXbGXbiPziKAVCwcriqA9nhPXJv5usp\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol\":{\"keccak256\":\"0xf444eabd05e1e9ae0cfd63402f4b39446157b2644419d73a6329228c1bf93ba4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cb4d3b9b940c066bfa07a285e8d09550cacfaaa758b2c14d7d892359ffee5b6b\",\"dweb:/ipfs/QmR49e1iePTjk2wjyvPZ37iDThjYjXzamz4hRHW7p6BdqR\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol\":{\"keccak256\":\"0xf4f7a49012fb01cc72e155add7ce901fa3cbc6373d04b8af876e970dca456133\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://accf67ea3a4acc40dcd46e93aad0eaea0fbb97534e603de71470a12993382e74\",\"dweb:/ipfs/QmQV81Xn6Mq7XV15YSkgKjdEKu4EQdFYYQHVposSdUUtvQ\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol\":{\"keccak256\":\"0x9f35f065d838cfeffaa7d085b3c204f9cdb8ab32b4b843957a851a55339980c1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8c0057b70b373133433619b1ee98b58bd8d1082c9d8bda7e9837ca3b46f6cd6\",\"dweb:/ipfs/QmVoCVhSnnknSavEZV1FY3hVkivuBqS2Crk6B1dHTXyYLt\"]},\"@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol\":{\"keccak256\":\"0x3b709912ffc400dc23d03030fb1c78e45df0c5721071f8c6f3c32bd694924055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a2c0c77e07b54ed3098ae1d2178f3b168c282872250ac6bd53a6a5e6d08b4ff\",\"dweb:/ipfs/QmdPQ4RzyuNsW7geoXrTt9NzBhqDLN6JHUWCHAnGd4fNYw\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol\":{\"keccak256\":\"0xffe929ce55ef0cbdcc60eee8bc9375c295757ad13afe3d757646538aa0429ff5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90091ad3a860b0baa930d9b4083b503eb9ce2d222f738ce3b009d434271a27ae\",\"dweb:/ipfs/QmeQxy2YHbeumMXxKqEnXF7pGw2Ke43cHzttG59WYHibVV\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0xd36229e6ac86c11d67c77af218720c36a2e44511c84635fd780f1a3b9ac78d75\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70570fa1ae61157b1fe163c07f559ff42987723ad4971a624d9c3fa7de0c99e8\",\"dweb:/ipfs/QmZ97kZMpg9kypYQHCdGD4xoqs9a6PrEwumU4EWNogpzLh\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol\":{\"keccak256\":\"0x997616af454ac3b56c8377fc913a25c7b282dc95355f6251dd4283c2b6d4805e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://22479024819e8b6a7b19ecd910dd847ec1611924db4aa67070c419ef9aac4f07\",\"dweb:/ipfs/QmbfzphtRmBAB8KgbN2Q4DUqpLo9gEGm5QEUFWXSou1Yt7\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x5ea2a299ca82624b363275fdd8e946c2cd549e948f8e33332db85dfa15866551\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3d5dd88be97aefb5b0f1f90a7fe9dd4614b0b5854ad657a7dd9943c43144de59\",\"dweb:/ipfs/QmaRARLz4mPTmpq2YnAKbtsQTaRTCuhfMWTWdbTWRKDxKt\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePool.sol\":{\"keccak256\":\"0xefc640c1439bb12d652be70b20778ce123f13a42793e75a51819ed0aa3d7b8f0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70dcf796a2295082edc1d499b26375e2001d4b87d151eb9fd7cb7b532fa8a9a8\",\"dweb:/ipfs/QmZrdWVr9qrohsFPLHX1jS37Qdnd8wCceYojRWR5xuP7RX\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol\":{\"keccak256\":\"0xcedf9c501d1e8769de3e3de1d51df306d013918f5148449f2542b6e5ffb5d7a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb85b3e7b3ea96c8146ce8b7d5d192108e5e6790ee4d1edfc8c510c5a460d756\",\"dweb:/ipfs/QmeKyVGj3bYUPCFkp1gFEzPY3rKZJkApT33o7hwFQmyN2F\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol\":{\"keccak256\":\"0x01bbfbec787d72db3b84969a1e629d922bcab2116c84e27d596979457e778c74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e89c70804224f69f50546824a8c963774fd239430a2677090d23ad8e018d3052\",\"dweb:/ipfs/QmbSHyur8EDo798qz3TCqcBcoiWuuPmoVjCbP2CzH1hoCP\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol\":{\"keccak256\":\"0x25f6f0a81c60d41050ab16c9bb2bc7458ec76a32d642e161334e45b7743279f7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9466990b332e5656f3d6a54eb53abc3ec6ae992d6dc49db0d44ce32cc98da340\",\"dweb:/ipfs/Qmf6ehxp5Zq46SkZfcj97MbA9QWYfu59D5eBDJTPCPmxRC\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xb9f711fe78be500e514d52ab9d39319ab05019a82a70be8ca071d0c8a7e2cb4c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://33f606957103269b63c5892bb843ff17af87dfe9ecdb560c12ff0b9f29aaf3a9\",\"dweb:/ipfs/QmUS1HHLQHEnNVhbGidzwnfW7PLoQDv3oq85edWRXgEoeM\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol\":{\"keccak256\":\"0x0ef66c7a887be422f59a66aa5824e605686ac3a10b2ac3bd7f93dced56c05edb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f9885e1452815bbf2ee1ce660e1ffffa88932fc9f4810acd425a7b41d017ee1\",\"dweb:/ipfs/QmTbsp1xBgSgXkh2vjk8thxoBstqorYkUEihV4Qan52dfS\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol\":{\"keccak256\":\"0x0cf3ec5d6130aac057e69df14b1ff87baf9c6c2cb13bc545952def004e629ac0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://446419367266d271bf6953e4ae0423356a5cc4717f7b9a5a0532436de4be2d70\",\"dweb:/ipfs/QmPV56wHs1Mqif6et6TYrhZ2QYPNmiVTmXWvQMhqWfKLk9\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol\":{\"keccak256\":\"0x4c243366b8586a81a439c52e400fd74ef22ee55dc6569ee49beefc0651417163\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ef6fc6451c8f9010777eb0e46ed7800212220e50d36286caf56b9a9fcdb4229\",\"dweb:/ipfs/QmR2HnofdMgVS9qW8AzPGNEQTBk8UJxPrLheTUmXX5GfSH\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol\":{\"keccak256\":\"0xbd474d9fb6f51b241ac85b659eabed4bac9a029f8565c64bc285edf04ef591cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://334c367ffb8ff1df7f8dfebe67d0d7bf72cf39306481dd32f98b5a52033082b0\",\"dweb:/ipfs/QmdEmGyCohoDBhHqBaV6JbzYEXUqhRzVjLCPCmc81HfqUs\"]},\"@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol\":{\"keccak256\":\"0x59848b5045422c5cf58841baea490766b848f84ec1bb5066e2ae9365e2a6d750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6bc10face470969cd65169aa12404814b4f76ad0e199e8ffedbf64af135e86e2\",\"dweb:/ipfs/QmSzcRHgfGuBUD2TPLat3JJejCWgSWKJP54ZCvzLWZPCiz\"]},\"contracts/ComposableStablePoolStorage.sol\":{\"keccak256\":\"0x25eb6e116d1d9679597ce2e8d97cd14f0adc78a93177a01ad75b1f71ae1512e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d8f17f5e866ee63bed6aed3c8a91dfebccd1d4e242b78f65c44826854e75155d\",\"dweb:/ipfs/QmeDXEL8sFQpiu5HCaSXBGw7eZq2PbpYGYW3GwnvA64Ye9\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/test/MockComposableStablePoolStorage.sol\":{\"keccak256\":\"0x2b71a2406de4b2c2e8f6f6bb093a80ebaa2652c4303034526d58a33c43c6e14e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afe17624dd3b420b70b8728014d137f423d28f2dc1d7f6adfdd165258d298573\",\"dweb:/ipfs/QmbJ51AxTgaEfMS8ha61z1vYG9EiZ4fJ77uftTeByPxRXq\"]}},\"version\":1}" + } + }, + "contracts/test/MockStableMath.sol": { + "MockStableMath": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsOut", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + } + ], + "name": "bptInForExactTokensOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bptAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bptTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + } + ], + "name": "exactBPTInForTokenOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amountsIn", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "bptTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + } + ], + "name": "exactTokensInForBPTOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "currentInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + } + ], + "name": "getTokenBalanceGivenInvariantAndAllOtherBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "tokenIndexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenIndexOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + } + ], + "name": "inGivenOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + } + ], + "name": "invariant", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "tokenIndexIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenIndexOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + } + ], + "name": "outGivenIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amp", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "tokenIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bptAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bptTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "currentInvariant", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + } + ], + "name": "tokenInForExactBPTOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5061164d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063cc832ac91161005b578063cc832ac914610380578063f3e92912146104b9578063fe2dd7ba14610568578063fff8e54e1461061d57610088565b8063155bfcb81461008d57806359d02e62146101495780639cd91d3f1461020a578063ab55d412146102bf575b600080fd5b610137600480360360408110156100a357600080fd5b813591908101906040810160208201356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460208302840111640100000000831117156100f957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610756945050505050565b60408051918252519081900360200190f35b610137600480360360e081101561015f57600080fd5b8135919081019060408101602082013564010000000081111561018157600080fd5b82018360208201111561019357600080fd5b803590602001918460208302840111640100000000831117156101b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550508235935050506020810135906040810135906060810135906080013561076b565b610137600480360360a081101561022057600080fd5b8135919081019060408101602082013564010000000081111561024257600080fd5b82018360208201111561025457600080fd5b8035906020019184602083028401116401000000008311171561027657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505082359350505060208101359060400135610788565b610137600480360360e08110156102d557600080fd5b813591908101906040810160208201356401000000008111156102f757600080fd5b82018360208201111561030957600080fd5b8035906020019184602083028401116401000000008311171561032b57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604081013590606081013590608001356107ab565b610137600480360360c081101561039657600080fd5b813591908101906040810160208201356401000000008111156103b857600080fd5b8201836020820111156103ca57600080fd5b803590602001918460208302840111640100000000831117156103ec57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561043c57600080fd5b82018360208201111561044e57600080fd5b8035906020019184602083028401116401000000008311171561047057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604001356107bc565b610137600480360360808110156104cf57600080fd5b813591908101906040810160208201356401000000008111156104f157600080fd5b82018360208201111561050357600080fd5b8035906020019184602083028401116401000000008311171561052557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602001356107d7565b610137600480360360a081101561057e57600080fd5b813591908101906040810160208201356401000000008111156105a057600080fd5b8201836020820111156105b257600080fd5b803590602001918460208302840111640100000000831117156105d457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604001356107f0565b610137600480360360c081101561063357600080fd5b8135919081019060408101602082013564010000000081111561065557600080fd5b82018360208201111561066757600080fd5b8035906020019184602083028401116401000000008311171561068957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184602083028401116401000000008311171561070d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505082359350505060208101359060400135610809565b60006107628383610819565b90505b92915050565b600061077c8888888888888861097b565b98975050505050505050565b60006107a1868686868661079c8c8c610819565b610a9d565b9695505050505050565b600061077c88888888888888610b46565b60006107cc878787878787610bfd565b979650505050505050565b60006107e585858585610ec4565b90505b949350505050565b60006107a186868686866108048c8c610819565b61108c565b60006107cc878787878787611109565b80516000908190815b8181101561085a5761085085828151811061083957fe5b60200260200101518461137390919063ffffffff16565b9250600101610822565b508161086b57600092505050610765565b600082868302825b60ff811015610964578260005b868110156108c1576108b76108958387611385565b6108b28c84815181106108a457fe5b60200260200101518a611385565b6113a9565b9150600101610880565b5083945061091a6108f96108f36108d8848a611385565b6108ed6108e5888d611385565b6103e86113a9565b90611373565b86611385565b6108b26109098960010185611385565b6108ed6108e56103e889038a611385565b9350848411156109425760018585031161093d5783975050505050505050610765565b61095b565b60018486031161095b5783975050505050505050610765565b50600101610873565b506109706101416113c9565b505050505092915050565b60008061099c8461099687610990818b611373565b906113f6565b9061144d565b905060006109ac8a8a848b610ec4565b905060006109d68a8a815181106109bf57fe5b6020026020010151836114a790919063ffffffff16565b90506000805b8b51811015610a1557610a0b8c82815181106109f457fe5b60200260200101518361137390919063ffffffff16565b91506001016109dc565b506000610a3e828d8d81518110610a2857fe5b60200260200101516114bd90919063ffffffff16565b90506000610a4b82611505565b90506000610a59858361144d565b90506000610a6786836114a7565b9050610a88610a8183670de0b6b3a76400008d90036113f6565b8290611373565b98505050505050505050979650505050505050565b6000610ac583878681518110610aaf57fe5b60200260200101516114a790919063ffffffff16565b868581518110610ad157fe5b6020026020010181815250506000610aeb88888589610ec4565b905083878681518110610afa57fe5b602002602001015101878681518110610b0f57fe5b60200260200101818152505061077c60016108ed898981518110610b2f57fe5b6020026020010151846114a790919063ffffffff16565b600080610b5b8461099687610990818b6114a7565b90506000610b6b8a8a848b610ec4565b90506000610b7f828b8b81518110610aaf57fe5b90506000805b8b51811015610ba757610b9d8c82815181106109f457fe5b9150600101610b85565b506000610bba828d8d81518110610a2857fe5b90506000610bc782611505565b90506000610bd5858361144d565b90506000610be386836114a7565b9050610a88610a8183670de0b6b3a76400008d900361152b565b600080805b8751811015610c2457610c1a8882815181106109f457fe5b9150600101610c02565b506060865167ffffffffffffffff81118015610c3f57600080fd5b50604051908082528060200260200182016040528015610c69578160200160208202803683370190505b5090506000805b8951811015610d36576000610c8b858c8481518110610a2857fe5b9050610ce38b8381518110610c9c57fe5b6020026020010151610cdd8c8581518110610cb357fe5b60200260200101518e8681518110610cc757fe5b602002602001015161137390919063ffffffff16565b906114bd565b848381518110610cef57fe5b602002602001018181525050610d2b610d2482868581518110610d0e57fe5b602002602001015161152b90919063ffffffff16565b8490611373565b925050600101610c70565b506060895167ffffffffffffffff81118015610d5157600080fd5b50604051908082528060200260200182016040528015610d7b578160200160208202803683370190505b50905060005b8a51811015610e4f57600083858381518110610d9957fe5b60200260200101511115610e08576000610dca610dbe86670de0b6b3a76400006114a7565b8e8581518110610d0e57fe5b90506000610dde828e8681518110610aaf57fe5b9050610dff610df882670de0b6b3a76400008d900361152b565b8390611373565b92505050610e1f565b8a8281518110610e1457fe5b602002602001015190505b610e2f818d8481518110610cc757fe5b838381518110610e3b57fe5b602090810291909101015250600101610d81565b506000610e5c8c83610819565b90506000610e6a828a6114bd565b9050670de0b6b3a7640000811115610eb557610ea88a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000830161152b565b96505050505050506107a1565b600096505050505050506107a1565b600080845186029050600085600081518110610edc57fe5b602002602001015190506000865187600081518110610ef757fe5b60200260200101510290506000600190505b8751811015610f5d57610f42610f3c610f35848b8581518110610f2857fe5b6020026020010151611385565b8a51611385565b886113a9565b9150610f5388828151811061083957fe5b9250600101610f09565b50868581518110610f6a57fe5b6020026020010151820391506000610f828788611385565b90506000610fb3610fa7610f9f84610f9a8988611385565b611557565b6103e8611385565b8a8981518110610f2857fe5b90506000610fce610fc7610f9f8b896113a9565b8690611373565b9050600080610fea610fe08686611373565b610f9a8d86611373565b905060005b60ff8110156110705781925061102561100c866108ed8586611385565b610f9a8e61101f886108ed886002611385565b906114a7565b91508282111561104e57600183830311611049575097506107e89650505050505050565b611068565b600182840311611068575097506107e89650505050505050565b600101610fef565b5061107c6101426113c9565b5050505050505050949350505050565b600061109e83878781518110610cc757fe5b8686815181106110aa57fe5b60200260200101818152505060006110c488888588610ec4565b9050838787815181106110d357fe5b6020026020010151038787815181106110e857fe5b60200260200101818152505061077c600161101f838a8981518110610aaf57fe5b600080805b8751811015611130576111268882815181106109f457fe5b915060010161110e565b506060865167ffffffffffffffff8111801561114b57600080fd5b50604051908082528060200260200182016040528015611175578160200160208202803683370190505b5090506000805b89518110156112355760006111ad858c848151811061119757fe5b60200260200101516113f690919063ffffffff16565b90506111e98b83815181106111be57fe5b60200260200101516109908c85815181106111d557fe5b60200260200101518e8681518110610aaf57fe5b8483815181106111f557fe5b60200260200101818152505061122a610d248286858151811061121457fe5b602002602001015161144d90919063ffffffff16565b92505060010161117c565b506060895167ffffffffffffffff8111801561125057600080fd5b5060405190808252806020026020018201604052801561127a578160200160208202803683370190505b50905060005b8a5181101561133257600084828151811061129757fe5b60200260200101518411156112eb5760006112b4610dbe86611505565b905060006112c8828e8681518110610aaf57fe5b90506112e2610df882670de0b6b3a76400008d90036113f6565b92505050611302565b8a82815181106112f757fe5b602002602001015190505b611312818d8481518110610aaf57fe5b83838151811061131e57fe5b602090810291909101015250600101611280565b50600061133f8c83610819565b9050600061134d828a6114bd565b905061136261135b82611505565b8b9061144d565b9d9c50505050505050505050505050565b6000828201610762848210158361158a565b60008282026107628415806113a257508385838161139f57fe5b04145b600361158a565b60006113b8821515600461158a565b8183816113c157fe5b049392505050565b6113f3817f42414c000000000000000000000000000000000000000000000000000000000061159c565b50565b6000611405821515600461158a565b8261141257506000610765565b670de0b6b3a7640000838102906114359085838161142c57fe5b0414600561158a565b82600182038161144157fe5b04600101915050610765565b60008282026114678415806113a257508385838161139f57fe5b80611476576000915050610765565b670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201611441565b60006114b783831115600161158a565b50900390565b60006114cc821515600461158a565b826114d957506000610765565b670de0b6b3a7640000838102906114f39085838161142c57fe5b8281816114fc57fe5b04915050610765565b6000670de0b6b3a7640000821061151d576000610765565b50670de0b6b3a76400000390565b60008282026115458415806113a257508385838161139f57fe5b670de0b6b3a764000090049392505050565b6000611566821515600461158a565b8261157357506000610765565b81600184038161157f57fe5b046001019050610765565b8161159857611598816113c9565b5050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea2646970667358221220dbb5e20b2a0d818ebb2450d49e32ea2e13c4048995d8f2909fde2e65e85ba17264736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x164D DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCC832AC9 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCC832AC9 EQ PUSH2 0x380 JUMPI DUP1 PUSH4 0xF3E92912 EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xFE2DD7BA EQ PUSH2 0x568 JUMPI DUP1 PUSH4 0xFFF8E54E EQ PUSH2 0x61D JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x155BFCB8 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x59D02E62 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x9CD91D3F EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xAB55D412 EQ PUSH2 0x2BF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x756 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x76B JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x276 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x788 JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x32B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x7AB JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x396 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x470 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x7BC JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7D7 JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x809 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x762 DUP4 DUP4 PUSH2 0x819 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77C DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x97B JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A1 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x79C DUP13 DUP13 PUSH2 0x819 JUMP JUMPDEST PUSH2 0xA9D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77C DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0xB46 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7CC DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xBFD JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E5 DUP6 DUP6 DUP6 DUP6 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A1 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x804 DUP13 DUP13 PUSH2 0x819 JUMP JUMPDEST PUSH2 0x108C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7CC DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1109 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x85A JUMPI PUSH2 0x850 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x839 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x1373 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x822 JUMP JUMPDEST POP DUP2 PUSH2 0x86B JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x964 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI PUSH2 0x8B7 PUSH2 0x895 DUP4 DUP8 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8B2 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8A4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x13A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x880 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x91A PUSH2 0x8F9 PUSH2 0x8F3 PUSH2 0x8D8 DUP5 DUP11 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8ED PUSH2 0x8E5 DUP9 DUP14 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x13A9 JUMP JUMPDEST SWAP1 PUSH2 0x1373 JUMP JUMPDEST DUP7 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8B2 PUSH2 0x909 DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8ED PUSH2 0x8E5 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1385 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x942 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x93D JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x765 JUMP JUMPDEST PUSH2 0x95B JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x95B JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x765 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x873 JUMP JUMPDEST POP PUSH2 0x970 PUSH2 0x141 PUSH2 0x13C9 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x99C DUP5 PUSH2 0x996 DUP8 PUSH2 0x990 DUP2 DUP12 PUSH2 0x1373 JUMP JUMPDEST SWAP1 PUSH2 0x13F6 JUMP JUMPDEST SWAP1 PUSH2 0x144D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9AC DUP11 DUP11 DUP5 DUP12 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9D6 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x9BF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x14A7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0xA15 JUMPI PUSH2 0xA0B DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x1373 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x9DC JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xA3E DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x14BD SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA4B DUP3 PUSH2 0x1505 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA59 DUP6 DUP4 PUSH2 0x144D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA67 DUP7 DUP4 PUSH2 0x14A7 JUMP JUMPDEST SWAP1 POP PUSH2 0xA88 PUSH2 0xA81 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x13F6 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAC5 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x14A7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xAD1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0xAEB DUP9 DUP9 DUP6 DUP10 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAFA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xB0F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x77C PUSH1 0x1 PUSH2 0x8ED DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x14A7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB5B DUP5 PUSH2 0x996 DUP8 PUSH2 0x990 DUP2 DUP12 PUSH2 0x14A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xB6B DUP11 DUP11 DUP5 DUP12 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xB7F DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0xBA7 JUMPI PUSH2 0xB9D DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xB85 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xBBA DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBC7 DUP3 PUSH2 0x1505 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBD5 DUP6 DUP4 PUSH2 0x144D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBE3 DUP7 DUP4 PUSH2 0x14A7 JUMP JUMPDEST SWAP1 POP PUSH2 0xA88 PUSH2 0xA81 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x152B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0xC24 JUMPI PUSH2 0xC1A DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xC02 JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xC3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC69 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0xD36 JUMPI PUSH1 0x0 PUSH2 0xC8B DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xCE3 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC9C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xCDD DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xCB3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xCC7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1373 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x14BD JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xCEF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xD2B PUSH2 0xD24 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xD0E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x152B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xD51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD7B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0xE4F JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xD99 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0xE08 JUMPI PUSH1 0x0 PUSH2 0xDCA PUSH2 0xDBE DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x14A7 JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xD0E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDDE DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xDFF PUSH2 0xDF8 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x152B JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xE1F JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE14 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0xE2F DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xCC7 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xE3B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0xD81 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xE5C DUP13 DUP4 PUSH2 0x819 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE6A DUP3 DUP11 PUSH2 0x14BD JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0xEB5 JUMPI PUSH2 0xEA8 DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x152B JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEDC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEF7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0xF5D JUMPI PUSH2 0xF42 PUSH2 0xF3C PUSH2 0xF35 DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xF28 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1385 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1385 JUMP JUMPDEST DUP9 PUSH2 0x13A9 JUMP JUMPDEST SWAP2 POP PUSH2 0xF53 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x839 JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0xF09 JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xF6A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0xF82 DUP8 DUP9 PUSH2 0x1385 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFB3 PUSH2 0xFA7 PUSH2 0xF9F DUP5 PUSH2 0xF9A DUP10 DUP9 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x1557 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1385 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xF28 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFCE PUSH2 0xFC7 PUSH2 0xF9F DUP12 DUP10 PUSH2 0x13A9 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0xFEA PUSH2 0xFE0 DUP7 DUP7 PUSH2 0x1373 JUMP JUMPDEST PUSH2 0xF9A DUP14 DUP7 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x1070 JUMPI DUP2 SWAP3 POP PUSH2 0x1025 PUSH2 0x100C DUP7 PUSH2 0x8ED DUP6 DUP7 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0xF9A DUP15 PUSH2 0x101F DUP9 PUSH2 0x8ED DUP9 PUSH1 0x2 PUSH2 0x1385 JUMP JUMPDEST SWAP1 PUSH2 0x14A7 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x104E JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x1049 JUMPI POP SWAP8 POP PUSH2 0x7E8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1068 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x1068 JUMPI POP SWAP8 POP PUSH2 0x7E8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xFEF JUMP JUMPDEST POP PUSH2 0x107C PUSH2 0x142 PUSH2 0x13C9 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x109E DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0xCC7 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x10AA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x10C4 DUP9 DUP9 DUP6 DUP9 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x10D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x10E8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x77C PUSH1 0x1 PUSH2 0x101F DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x1130 JUMPI PUSH2 0x1126 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x110E JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x114B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1175 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x1235 JUMPI PUSH1 0x0 PUSH2 0x11AD DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1197 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x13F6 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x11E9 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11BE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x990 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x11D5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11F5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x122A PUSH2 0xD24 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1214 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x144D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x117C JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x127A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x1332 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1297 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x12EB JUMPI PUSH1 0x0 PUSH2 0x12B4 PUSH2 0xDBE DUP7 PUSH2 0x1505 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C8 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x12E2 PUSH2 0xDF8 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x13F6 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1302 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x12F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x1312 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x131E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1280 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x133F DUP13 DUP4 PUSH2 0x819 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x134D DUP3 DUP11 PUSH2 0x14BD JUMP JUMPDEST SWAP1 POP PUSH2 0x1362 PUSH2 0x135B DUP3 PUSH2 0x1505 JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x144D JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x762 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x158A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x762 DUP5 ISZERO DUP1 PUSH2 0x13A2 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x139F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x158A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B8 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x13C1 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x13F3 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x159C JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1405 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH2 0x1412 JUMPI POP PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x1435 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x142C JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x1441 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1467 DUP5 ISZERO DUP1 PUSH2 0x13A2 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x139F JUMPI INVALID JUMPDEST DUP1 PUSH2 0x1476 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x765 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 ADD PUSH2 0x1441 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14B7 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x158A JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14CC DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH2 0x14D9 JUMPI POP PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x14F3 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x142C JUMPI INVALID JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x14FC JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x151D JUMPI PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1545 DUP5 ISZERO DUP1 PUSH2 0x13A2 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x139F JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1566 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH2 0x1573 JUMPI POP PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x157F JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x765 JUMP JUMPDEST DUP2 PUSH2 0x1598 JUMPI PUSH2 0x1598 DUP2 PUSH2 0x13C9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xB5 0xE2 SIGNEXTEND 0x2A 0xD DUP2 DUP15 0xBB 0x24 POP 0xD4 SWAP15 ORIGIN 0xEA 0x2E SGT 0xC4 DIV DUP10 SWAP6 0xD8 CALLCODE SWAP1 SWAP16 0xDE 0x2E PUSH6 0xE85BA1726473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "742:3809:66:-:0;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100885760003560e01c8063cc832ac91161005b578063cc832ac914610380578063f3e92912146104b9578063fe2dd7ba14610568578063fff8e54e1461061d57610088565b8063155bfcb81461008d57806359d02e62146101495780639cd91d3f1461020a578063ab55d412146102bf575b600080fd5b610137600480360360408110156100a357600080fd5b813591908101906040810160208201356401000000008111156100c557600080fd5b8201836020820111156100d757600080fd5b803590602001918460208302840111640100000000831117156100f957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610756945050505050565b60408051918252519081900360200190f35b610137600480360360e081101561015f57600080fd5b8135919081019060408101602082013564010000000081111561018157600080fd5b82018360208201111561019357600080fd5b803590602001918460208302840111640100000000831117156101b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550508235935050506020810135906040810135906060810135906080013561076b565b610137600480360360a081101561022057600080fd5b8135919081019060408101602082013564010000000081111561024257600080fd5b82018360208201111561025457600080fd5b8035906020019184602083028401116401000000008311171561027657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505082359350505060208101359060400135610788565b610137600480360360e08110156102d557600080fd5b813591908101906040810160208201356401000000008111156102f757600080fd5b82018360208201111561030957600080fd5b8035906020019184602083028401116401000000008311171561032b57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604081013590606081013590608001356107ab565b610137600480360360c081101561039657600080fd5b813591908101906040810160208201356401000000008111156103b857600080fd5b8201836020820111156103ca57600080fd5b803590602001918460208302840111640100000000831117156103ec57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561043c57600080fd5b82018360208201111561044e57600080fd5b8035906020019184602083028401116401000000008311171561047057600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604001356107bc565b610137600480360360808110156104cf57600080fd5b813591908101906040810160208201356401000000008111156104f157600080fd5b82018360208201111561050357600080fd5b8035906020019184602083028401116401000000008311171561052557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602001356107d7565b610137600480360360a081101561057e57600080fd5b813591908101906040810160208201356401000000008111156105a057600080fd5b8201836020820111156105b257600080fd5b803590602001918460208302840111640100000000831117156105d457600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602081013590604001356107f0565b610137600480360360c081101561063357600080fd5b8135919081019060408101602082013564010000000081111561065557600080fd5b82018360208201111561066757600080fd5b8035906020019184602083028401116401000000008311171561068957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156106d957600080fd5b8201836020820111156106eb57600080fd5b8035906020019184602083028401116401000000008311171561070d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505082359350505060208101359060400135610809565b60006107628383610819565b90505b92915050565b600061077c8888888888888861097b565b98975050505050505050565b60006107a1868686868661079c8c8c610819565b610a9d565b9695505050505050565b600061077c88888888888888610b46565b60006107cc878787878787610bfd565b979650505050505050565b60006107e585858585610ec4565b90505b949350505050565b60006107a186868686866108048c8c610819565b61108c565b60006107cc878787878787611109565b80516000908190815b8181101561085a5761085085828151811061083957fe5b60200260200101518461137390919063ffffffff16565b9250600101610822565b508161086b57600092505050610765565b600082868302825b60ff811015610964578260005b868110156108c1576108b76108958387611385565b6108b28c84815181106108a457fe5b60200260200101518a611385565b6113a9565b9150600101610880565b5083945061091a6108f96108f36108d8848a611385565b6108ed6108e5888d611385565b6103e86113a9565b90611373565b86611385565b6108b26109098960010185611385565b6108ed6108e56103e889038a611385565b9350848411156109425760018585031161093d5783975050505050505050610765565b61095b565b60018486031161095b5783975050505050505050610765565b50600101610873565b506109706101416113c9565b505050505092915050565b60008061099c8461099687610990818b611373565b906113f6565b9061144d565b905060006109ac8a8a848b610ec4565b905060006109d68a8a815181106109bf57fe5b6020026020010151836114a790919063ffffffff16565b90506000805b8b51811015610a1557610a0b8c82815181106109f457fe5b60200260200101518361137390919063ffffffff16565b91506001016109dc565b506000610a3e828d8d81518110610a2857fe5b60200260200101516114bd90919063ffffffff16565b90506000610a4b82611505565b90506000610a59858361144d565b90506000610a6786836114a7565b9050610a88610a8183670de0b6b3a76400008d90036113f6565b8290611373565b98505050505050505050979650505050505050565b6000610ac583878681518110610aaf57fe5b60200260200101516114a790919063ffffffff16565b868581518110610ad157fe5b6020026020010181815250506000610aeb88888589610ec4565b905083878681518110610afa57fe5b602002602001015101878681518110610b0f57fe5b60200260200101818152505061077c60016108ed898981518110610b2f57fe5b6020026020010151846114a790919063ffffffff16565b600080610b5b8461099687610990818b6114a7565b90506000610b6b8a8a848b610ec4565b90506000610b7f828b8b81518110610aaf57fe5b90506000805b8b51811015610ba757610b9d8c82815181106109f457fe5b9150600101610b85565b506000610bba828d8d81518110610a2857fe5b90506000610bc782611505565b90506000610bd5858361144d565b90506000610be386836114a7565b9050610a88610a8183670de0b6b3a76400008d900361152b565b600080805b8751811015610c2457610c1a8882815181106109f457fe5b9150600101610c02565b506060865167ffffffffffffffff81118015610c3f57600080fd5b50604051908082528060200260200182016040528015610c69578160200160208202803683370190505b5090506000805b8951811015610d36576000610c8b858c8481518110610a2857fe5b9050610ce38b8381518110610c9c57fe5b6020026020010151610cdd8c8581518110610cb357fe5b60200260200101518e8681518110610cc757fe5b602002602001015161137390919063ffffffff16565b906114bd565b848381518110610cef57fe5b602002602001018181525050610d2b610d2482868581518110610d0e57fe5b602002602001015161152b90919063ffffffff16565b8490611373565b925050600101610c70565b506060895167ffffffffffffffff81118015610d5157600080fd5b50604051908082528060200260200182016040528015610d7b578160200160208202803683370190505b50905060005b8a51811015610e4f57600083858381518110610d9957fe5b60200260200101511115610e08576000610dca610dbe86670de0b6b3a76400006114a7565b8e8581518110610d0e57fe5b90506000610dde828e8681518110610aaf57fe5b9050610dff610df882670de0b6b3a76400008d900361152b565b8390611373565b92505050610e1f565b8a8281518110610e1457fe5b602002602001015190505b610e2f818d8481518110610cc757fe5b838381518110610e3b57fe5b602090810291909101015250600101610d81565b506000610e5c8c83610819565b90506000610e6a828a6114bd565b9050670de0b6b3a7640000811115610eb557610ea88a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000830161152b565b96505050505050506107a1565b600096505050505050506107a1565b600080845186029050600085600081518110610edc57fe5b602002602001015190506000865187600081518110610ef757fe5b60200260200101510290506000600190505b8751811015610f5d57610f42610f3c610f35848b8581518110610f2857fe5b6020026020010151611385565b8a51611385565b886113a9565b9150610f5388828151811061083957fe5b9250600101610f09565b50868581518110610f6a57fe5b6020026020010151820391506000610f828788611385565b90506000610fb3610fa7610f9f84610f9a8988611385565b611557565b6103e8611385565b8a8981518110610f2857fe5b90506000610fce610fc7610f9f8b896113a9565b8690611373565b9050600080610fea610fe08686611373565b610f9a8d86611373565b905060005b60ff8110156110705781925061102561100c866108ed8586611385565b610f9a8e61101f886108ed886002611385565b906114a7565b91508282111561104e57600183830311611049575097506107e89650505050505050565b611068565b600182840311611068575097506107e89650505050505050565b600101610fef565b5061107c6101426113c9565b5050505050505050949350505050565b600061109e83878781518110610cc757fe5b8686815181106110aa57fe5b60200260200101818152505060006110c488888588610ec4565b9050838787815181106110d357fe5b6020026020010151038787815181106110e857fe5b60200260200101818152505061077c600161101f838a8981518110610aaf57fe5b600080805b8751811015611130576111268882815181106109f457fe5b915060010161110e565b506060865167ffffffffffffffff8111801561114b57600080fd5b50604051908082528060200260200182016040528015611175578160200160208202803683370190505b5090506000805b89518110156112355760006111ad858c848151811061119757fe5b60200260200101516113f690919063ffffffff16565b90506111e98b83815181106111be57fe5b60200260200101516109908c85815181106111d557fe5b60200260200101518e8681518110610aaf57fe5b8483815181106111f557fe5b60200260200101818152505061122a610d248286858151811061121457fe5b602002602001015161144d90919063ffffffff16565b92505060010161117c565b506060895167ffffffffffffffff8111801561125057600080fd5b5060405190808252806020026020018201604052801561127a578160200160208202803683370190505b50905060005b8a5181101561133257600084828151811061129757fe5b60200260200101518411156112eb5760006112b4610dbe86611505565b905060006112c8828e8681518110610aaf57fe5b90506112e2610df882670de0b6b3a76400008d90036113f6565b92505050611302565b8a82815181106112f757fe5b602002602001015190505b611312818d8481518110610aaf57fe5b83838151811061131e57fe5b602090810291909101015250600101611280565b50600061133f8c83610819565b9050600061134d828a6114bd565b905061136261135b82611505565b8b9061144d565b9d9c50505050505050505050505050565b6000828201610762848210158361158a565b60008282026107628415806113a257508385838161139f57fe5b04145b600361158a565b60006113b8821515600461158a565b8183816113c157fe5b049392505050565b6113f3817f42414c000000000000000000000000000000000000000000000000000000000061159c565b50565b6000611405821515600461158a565b8261141257506000610765565b670de0b6b3a7640000838102906114359085838161142c57fe5b0414600561158a565b82600182038161144157fe5b04600101915050610765565b60008282026114678415806113a257508385838161139f57fe5b80611476576000915050610765565b670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201611441565b60006114b783831115600161158a565b50900390565b60006114cc821515600461158a565b826114d957506000610765565b670de0b6b3a7640000838102906114f39085838161142c57fe5b8281816114fc57fe5b04915050610765565b6000670de0b6b3a7640000821061151d576000610765565b50670de0b6b3a76400000390565b60008282026115458415806113a257508385838161139f57fe5b670de0b6b3a764000090049392505050565b6000611566821515600461158a565b8261157357506000610765565b81600184038161157f57fe5b046001019050610765565b8161159857611598816113c9565b5050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fdfea2646970667358221220dbb5e20b2a0d818ebb2450d49e32ea2e13c4048995d8f2909fde2e65e85ba17264736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCC832AC9 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xCC832AC9 EQ PUSH2 0x380 JUMPI DUP1 PUSH4 0xF3E92912 EQ PUSH2 0x4B9 JUMPI DUP1 PUSH4 0xFE2DD7BA EQ PUSH2 0x568 JUMPI DUP1 PUSH4 0xFFF8E54E EQ PUSH2 0x61D JUMPI PUSH2 0x88 JUMP JUMPDEST DUP1 PUSH4 0x155BFCB8 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x59D02E62 EQ PUSH2 0x149 JUMPI DUP1 PUSH4 0x9CD91D3F EQ PUSH2 0x20A JUMPI DUP1 PUSH4 0xAB55D412 EQ PUSH2 0x2BF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xC5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xD7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x756 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x15F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x181 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x193 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x76B JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x220 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x242 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x254 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x276 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x788 JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x32B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x80 ADD CALLDATALOAD PUSH2 0x7AB JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x396 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x3B8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x3CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x3EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x44E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x470 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x7BC JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x4F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x503 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x525 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x7D7 JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xA0 DUP2 LT ISZERO PUSH2 0x57E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x5A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x5B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x5D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x7F0 JUMP JUMPDEST PUSH2 0x137 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x633 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x655 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x667 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x689 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 SWAP5 SWAP4 PUSH1 0x20 DUP2 ADD SWAP4 POP CALLDATALOAD SWAP2 POP POP PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x6D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x70D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 ADD CALLDATALOAD PUSH2 0x809 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x762 DUP4 DUP4 PUSH2 0x819 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77C DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0x97B JUMP JUMPDEST SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A1 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x79C DUP13 DUP13 PUSH2 0x819 JUMP JUMPDEST PUSH2 0xA9D JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x77C DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 DUP9 PUSH2 0xB46 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7CC DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xBFD JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7E5 DUP6 DUP6 DUP6 DUP6 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A1 DUP7 DUP7 DUP7 DUP7 DUP7 PUSH2 0x804 DUP13 DUP13 PUSH2 0x819 JUMP JUMPDEST PUSH2 0x108C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7CC DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x1109 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x0 SWAP1 DUP2 SWAP1 DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x85A JUMPI PUSH2 0x850 DUP6 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x839 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x1373 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0x822 JUMP JUMPDEST POP DUP2 PUSH2 0x86B JUMPI PUSH1 0x0 SWAP3 POP POP POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP7 DUP4 MUL DUP3 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x964 JUMPI DUP3 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x8C1 JUMPI PUSH2 0x8B7 PUSH2 0x895 DUP4 DUP8 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8B2 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x8A4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP11 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x13A9 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x880 JUMP JUMPDEST POP DUP4 SWAP5 POP PUSH2 0x91A PUSH2 0x8F9 PUSH2 0x8F3 PUSH2 0x8D8 DUP5 DUP11 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8ED PUSH2 0x8E5 DUP9 DUP14 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x13A9 JUMP JUMPDEST SWAP1 PUSH2 0x1373 JUMP JUMPDEST DUP7 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8B2 PUSH2 0x909 DUP10 PUSH1 0x1 ADD DUP6 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x8ED PUSH2 0x8E5 PUSH2 0x3E8 DUP10 SUB DUP11 PUSH2 0x1385 JUMP JUMPDEST SWAP4 POP DUP5 DUP5 GT ISZERO PUSH2 0x942 JUMPI PUSH1 0x1 DUP6 DUP6 SUB GT PUSH2 0x93D JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x765 JUMP JUMPDEST PUSH2 0x95B JUMP JUMPDEST PUSH1 0x1 DUP5 DUP7 SUB GT PUSH2 0x95B JUMPI DUP4 SWAP8 POP POP POP POP POP POP POP POP PUSH2 0x765 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x873 JUMP JUMPDEST POP PUSH2 0x970 PUSH2 0x141 PUSH2 0x13C9 JUMP JUMPDEST POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x99C DUP5 PUSH2 0x996 DUP8 PUSH2 0x990 DUP2 DUP12 PUSH2 0x1373 JUMP JUMPDEST SWAP1 PUSH2 0x13F6 JUMP JUMPDEST SWAP1 PUSH2 0x144D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9AC DUP11 DUP11 DUP5 DUP12 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x9D6 DUP11 DUP11 DUP2 MLOAD DUP2 LT PUSH2 0x9BF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x14A7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0xA15 JUMPI PUSH2 0xA0B DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP4 PUSH2 0x1373 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x9DC JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xA3E DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x14BD SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA4B DUP3 PUSH2 0x1505 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA59 DUP6 DUP4 PUSH2 0x144D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xA67 DUP7 DUP4 PUSH2 0x14A7 JUMP JUMPDEST SWAP1 POP PUSH2 0xA88 PUSH2 0xA81 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x13F6 JUMP JUMPDEST DUP3 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP9 POP POP POP POP POP POP POP POP POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAC5 DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x14A7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xAD1 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0xAEB DUP9 DUP9 DUP6 DUP10 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAFA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD ADD DUP8 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xB0F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x77C PUSH1 0x1 PUSH2 0x8ED DUP10 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xB2F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 PUSH2 0x14A7 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0xB5B DUP5 PUSH2 0x996 DUP8 PUSH2 0x990 DUP2 DUP12 PUSH2 0x14A7 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xB6B DUP11 DUP11 DUP5 DUP12 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xB7F DUP3 DUP12 DUP12 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0xBA7 JUMPI PUSH2 0xB9D DUP13 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xB85 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xBBA DUP3 DUP14 DUP14 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBC7 DUP3 PUSH2 0x1505 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBD5 DUP6 DUP4 PUSH2 0x144D JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xBE3 DUP7 DUP4 PUSH2 0x14A7 JUMP JUMPDEST SWAP1 POP PUSH2 0xA88 PUSH2 0xA81 DUP4 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x152B JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0xC24 JUMPI PUSH2 0xC1A DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0xC02 JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xC3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xC69 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0xD36 JUMPI PUSH1 0x0 PUSH2 0xC8B DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xA28 JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xCE3 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xC9C JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0xCDD DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xCB3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xCC7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1373 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0x14BD JUMP JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xCEF JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0xD2B PUSH2 0xD24 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xD0E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x152B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP5 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0xC70 JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0xD51 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xD7B JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0xE4F JUMPI PUSH1 0x0 DUP4 DUP6 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xD99 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD GT ISZERO PUSH2 0xE08 JUMPI PUSH1 0x0 PUSH2 0xDCA PUSH2 0xDBE DUP7 PUSH8 0xDE0B6B3A7640000 PUSH2 0x14A7 JUMP JUMPDEST DUP15 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xD0E JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xDDE DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0xDFF PUSH2 0xDF8 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x152B JUMP JUMPDEST DUP4 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0xE1F JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0xE14 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0xE2F DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xCC7 JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0xE3B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0xD81 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0xE5C DUP13 DUP4 PUSH2 0x819 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xE6A DUP3 DUP11 PUSH2 0x14BD JUMP JUMPDEST SWAP1 POP PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO PUSH2 0xEB5 JUMPI PUSH2 0xEA8 DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD PUSH2 0x152B JUMP JUMPDEST SWAP7 POP POP POP POP POP POP POP PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x0 SWAP7 POP POP POP POP POP POP POP PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 MLOAD DUP7 MUL SWAP1 POP PUSH1 0x0 DUP6 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEDC JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH1 0x0 DUP7 MLOAD DUP8 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEF7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD MUL SWAP1 POP PUSH1 0x0 PUSH1 0x1 SWAP1 POP JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0xF5D JUMPI PUSH2 0xF42 PUSH2 0xF3C PUSH2 0xF35 DUP5 DUP12 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xF28 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x1385 JUMP JUMPDEST DUP11 MLOAD PUSH2 0x1385 JUMP JUMPDEST DUP9 PUSH2 0x13A9 JUMP JUMPDEST SWAP2 POP PUSH2 0xF53 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x839 JUMPI INVALID JUMPDEST SWAP3 POP PUSH1 0x1 ADD PUSH2 0xF09 JUMP JUMPDEST POP DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0xF6A JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 SUB SWAP2 POP PUSH1 0x0 PUSH2 0xF82 DUP8 DUP9 PUSH2 0x1385 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFB3 PUSH2 0xFA7 PUSH2 0xF9F DUP5 PUSH2 0xF9A DUP10 DUP9 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0x1557 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x1385 JUMP JUMPDEST DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xF28 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0xFCE PUSH2 0xFC7 PUSH2 0xF9F DUP12 DUP10 PUSH2 0x13A9 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP1 PUSH2 0xFEA PUSH2 0xFE0 DUP7 DUP7 PUSH2 0x1373 JUMP JUMPDEST PUSH2 0xF9A DUP14 DUP7 PUSH2 0x1373 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 JUMPDEST PUSH1 0xFF DUP2 LT ISZERO PUSH2 0x1070 JUMPI DUP2 SWAP3 POP PUSH2 0x1025 PUSH2 0x100C DUP7 PUSH2 0x8ED DUP6 DUP7 PUSH2 0x1385 JUMP JUMPDEST PUSH2 0xF9A DUP15 PUSH2 0x101F DUP9 PUSH2 0x8ED DUP9 PUSH1 0x2 PUSH2 0x1385 JUMP JUMPDEST SWAP1 PUSH2 0x14A7 JUMP JUMPDEST SWAP2 POP DUP3 DUP3 GT ISZERO PUSH2 0x104E JUMPI PUSH1 0x1 DUP4 DUP4 SUB GT PUSH2 0x1049 JUMPI POP SWAP8 POP PUSH2 0x7E8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x1068 JUMP JUMPDEST PUSH1 0x1 DUP3 DUP5 SUB GT PUSH2 0x1068 JUMPI POP SWAP8 POP PUSH2 0x7E8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xFEF JUMP JUMPDEST POP PUSH2 0x107C PUSH2 0x142 PUSH2 0x13C9 JUMP JUMPDEST POP POP POP POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x109E DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0xCC7 JUMPI INVALID JUMPDEST DUP7 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0x10AA JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x0 PUSH2 0x10C4 DUP9 DUP9 DUP6 DUP9 PUSH2 0xEC4 JUMP JUMPDEST SWAP1 POP DUP4 DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x10D3 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SUB DUP8 DUP8 DUP2 MLOAD DUP2 LT PUSH2 0x10E8 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x77C PUSH1 0x1 PUSH2 0x101F DUP4 DUP11 DUP10 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x1130 JUMPI PUSH2 0x1126 DUP9 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9F4 JUMPI INVALID JUMPDEST SWAP2 POP PUSH1 0x1 ADD PUSH2 0x110E JUMP JUMPDEST POP PUSH1 0x60 DUP7 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x114B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1175 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x1235 JUMPI PUSH1 0x0 PUSH2 0x11AD DUP6 DUP13 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1197 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x13F6 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x11E9 DUP12 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11BE JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x990 DUP13 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x11D5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST DUP5 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x11F5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH2 0x122A PUSH2 0xD24 DUP3 DUP7 DUP6 DUP2 MLOAD DUP2 LT PUSH2 0x1214 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH2 0x144D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 ADD PUSH2 0x117C JUMP JUMPDEST POP PUSH1 0x60 DUP10 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1250 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x127A JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP11 MLOAD DUP2 LT ISZERO PUSH2 0x1332 JUMPI PUSH1 0x0 DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1297 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 GT ISZERO PUSH2 0x12EB JUMPI PUSH1 0x0 PUSH2 0x12B4 PUSH2 0xDBE DUP7 PUSH2 0x1505 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x12C8 DUP3 DUP15 DUP7 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST SWAP1 POP PUSH2 0x12E2 PUSH2 0xDF8 DUP3 PUSH8 0xDE0B6B3A7640000 DUP14 SWAP1 SUB PUSH2 0x13F6 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x1302 JUMP JUMPDEST DUP11 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x12F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x1312 DUP2 DUP14 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0xAAF JUMPI INVALID JUMPDEST DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x131E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP PUSH1 0x1 ADD PUSH2 0x1280 JUMP JUMPDEST POP PUSH1 0x0 PUSH2 0x133F DUP13 DUP4 PUSH2 0x819 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x134D DUP3 DUP11 PUSH2 0x14BD JUMP JUMPDEST SWAP1 POP PUSH2 0x1362 PUSH2 0x135B DUP3 PUSH2 0x1505 JUMP JUMPDEST DUP12 SWAP1 PUSH2 0x144D JUMP JUMPDEST SWAP14 SWAP13 POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD PUSH2 0x762 DUP5 DUP3 LT ISZERO DUP4 PUSH2 0x158A JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x762 DUP5 ISZERO DUP1 PUSH2 0x13A2 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x139F JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x158A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x13B8 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP2 DUP4 DUP2 PUSH2 0x13C1 JUMPI INVALID JUMPDEST DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x13F3 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x159C JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1405 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH2 0x1412 JUMPI POP PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x1435 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x142C JUMPI INVALID JUMPDEST DIV EQ PUSH1 0x5 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH1 0x1 DUP3 SUB DUP2 PUSH2 0x1441 JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1467 DUP5 ISZERO DUP1 PUSH2 0x13A2 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x139F JUMPI INVALID JUMPDEST DUP1 PUSH2 0x1476 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x765 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 ADD PUSH2 0x1441 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14B7 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x158A JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14CC DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH2 0x14D9 JUMPI POP PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP4 DUP2 MUL SWAP1 PUSH2 0x14F3 SWAP1 DUP6 DUP4 DUP2 PUSH2 0x142C JUMPI INVALID JUMPDEST DUP3 DUP2 DUP2 PUSH2 0x14FC JUMPI INVALID JUMPDEST DIV SWAP2 POP POP PUSH2 0x765 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xDE0B6B3A7640000 DUP3 LT PUSH2 0x151D JUMPI PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x1545 DUP5 ISZERO DUP1 PUSH2 0x13A2 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x139F JUMPI INVALID JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP1 DIV SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1566 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x158A JUMP JUMPDEST DUP3 PUSH2 0x1573 JUMPI POP PUSH1 0x0 PUSH2 0x765 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x157F JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x765 JUMP JUMPDEST DUP2 PUSH2 0x1598 JUMPI PUSH2 0x1598 DUP2 PUSH2 0x13C9 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xB5 0xE2 SIGNEXTEND 0x2A 0xD DUP2 DUP15 0xBB 0x24 POP 0xD4 SWAP15 ORIGIN 0xEA 0x2E SGT 0xC4 DIV DUP10 SWAP6 0xD8 CALLCODE SWAP1 SWAP16 0xDE 0x2E PUSH6 0xE85BA1726473 PUSH16 0x6C634300070100330000000000000000 ", + "sourceMap": "742:3809:66:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;772:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;772:160:66;;-1:-1:-1;772:160:66;;-1:-1:-1;;;;;772:160:66:i;:::-;;;;;;;;;;;;;;;;2434:559;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2434:559:66;;-1:-1:-1;;2434:559:66;;;-1:-1:-1;;;2434:559:66;;;;;;;;;;;;;;;;;;;:::i;1428:486::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1428:486:66;;-1:-1:-1;;1428:486:66;;;-1:-1:-1;;;1428:486:66;;;;;;;;;:::i;2999:557::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2999:557:66;;-1:-1:-1;;2999:557:66;;;-1:-1:-1;;;2999:557:66;;;;;;;;;;;;;;;;;;;:::i;1920:508::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1920:508:66;;;;;;;;-1:-1:-1;1920:508:66;;-1:-1:-1;;1920:508:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1920:508:66;;-1:-1:-1;;1920:508:66;;;-1:-1:-1;;;1920:508:66;;;;;;;;;:::i;4078:471::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4078:471:66;;-1:-1:-1;;4078:471:66;;;-1:-1:-1;;;4078:471:66;;;;:::i;938:484::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;938:484:66;;-1:-1:-1;;938:484:66;;;-1:-1:-1;;;938:484:66;;;;;;;;;:::i;3562:510::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3562:510:66;;;;;;;;-1:-1:-1;3562:510:66;;-1:-1:-1;;3562:510:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3562:510:66;;-1:-1:-1;;3562:510:66;;;-1:-1:-1;;;3562:510:66;;;;;;;;;:::i;772:160::-;854:7;880:45;911:3;916:8;880:30;:45::i;:::-;873:52;;772:160;;;;;:::o;2434:559::-;2699:7;2737:249;2794:3;2815:8;2841:10;2869:12;2899:14;2931:16;2965:7;2737:39;:249::i;:::-;2718:268;2434:559;-1:-1:-1;;;;;;;;2434:559:66:o;1428:486::-;1626:7;1664:243;1708:3;1729:8;1755:12;1785:13;1816:14;1848:45;1879:3;1884:8;1848:30;:45::i;:::-;1664:26;:243::i;:::-;1645:262;1428:486;-1:-1:-1;;;;;;1428:486:66:o;2999:557::-;3263:7;3301:248;3358:3;3379:8;3405:10;3433:11;3462:14;3494:16;3528:7;3301:39;:248::i;1920:508::-;2164:7;2202:219;2260:3;2281:8;2307:9;2334:14;2366:16;2400:7;2202:40;:219::i;:::-;2183:238;1920:508;-1:-1:-1;;;;;;;1920:508:66:o;4078:471::-;4302:7;4340:202;4418:22;4458:8;4484:16;4518:10;4340:60;:202::i;:::-;4321:221;;4078:471;;;;;;;:::o;938:484::-;1135:7;1173:242;1217:3;1238:8;1264:12;1294:13;1325;1356:45;1387:3;1392:8;1356:30;:45::i;:::-;1173:26;:242::i;3562:510::-;3807:7;3845:220;3903:3;3924:8;3950:10;3978:14;4010:16;4044:7;3845:40;:220::i;3181:2872:60:-;4328:15;;3316:7;;;;;4353:91;4377:9;4373:1;:13;4353:91;;;4413:20;4421:8;4430:1;4421:11;;;;;;;;;;;;;;4413:3;:7;;:20;;;;:::i;:::-;4407:26;-1:-1:-1;4388:3:60;;4353:91;;;-1:-1:-1;4457:8:60;4453:47;;4488:1;4481:8;;;;;;4453:47;4510:21;4591:3;4654:34;;;4510:21;4727:1262;4751:3;4747:1;:7;4727:1262;;;4789:9;4775:11;4813:216;4837:9;4833:1;:13;4813:216;;;4942:72;4955:24;4964:3;4969:9;4955:8;:24::i;:::-;4981:32;4990:8;4999:1;4990:11;;;;;;;;;;;;;;5003:9;4981:8;:32::i;:::-;4942:12;:72::i;:::-;4936:78;-1:-1:-1;4848:3:60;;4813:216;;;;5059:9;5043:25;;5095:622;5125:248;5235:88;5298:24;5307:3;5312:9;5298:8;:24::i;:::-;5235:58;5248:28;5257:13;5272:3;5248:8;:28::i;:::-;1372:3;5235:12;:58::i;:::-;:62;;:88::i;:::-;5346:9;5125:8;:248::i;:::-;5520:165;5633:30;5643:9;5655:1;5643:13;5659:3;5633:8;:30::i;:::-;5520:83;5533:53;1372:3;5543:13;:30;5576:9;5533:8;:53::i;5095:622::-;5083:634;;5748:13;5736:9;:25;5732:247;;;5814:1;5797:13;5785:9;:25;:30;5781:93;;5846:9;5839:16;;;;;;;;;;;5781:93;5732:247;;;5927:1;5914:9;5898:13;:25;:30;5894:85;;5955:9;5948:16;;;;;;;;;;;5894:85;-1:-1:-1;4756:3:60;;4727:1262;;;;5999:47;7757:3:10;5999:7:60;:47::i;:::-;3181:2872;;;;;;;;;:::o;13693:1695::-;13975:7;;14063:78;14124:16;14063:54;14102:14;14063:32;14102:14;14082:12;14063:18;:32::i;:::-;:38;;:54::i;:::-;:60;;:78::i;:::-;14040:101;;14196:28;14227:148;14290:3;14307:8;14329:12;14355:10;14227:49;:148::i;:::-;14196:179;;14385:26;14414:46;14439:8;14448:10;14439:20;;;;;;;;;;;;;;14414;:24;;:46;;;;:::i;:::-;14385:75;;14605:19;14643:9;14638:113;14662:8;:15;14658:1;:19;14638:113;;;14712:28;14728:8;14737:1;14728:11;;;;;;;;;;;;;;14712;:15;;:28;;;;:::i;:::-;14698:42;-1:-1:-1;14679:3:60;;14638:113;;;;14905:21;14929:41;14958:11;14929:8;14938:10;14929:20;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;14905:65;;14980:25;15008:26;:13;:24;:26::i;:::-;14980:54;-1:-1:-1;15044:21:60;15068:43;:18;14980:54;15068:24;:43::i;:::-;15044:67;-1:-1:-1;15121:24:60;15148:37;:18;15044:67;15148:22;:37::i;:::-;15121:64;-1:-1:-1;15304:77:60;15325:55;:13;945:4:47;15345:34:60;;;15325:19;:55::i;:::-;15304:16;;:20;:77::i;:::-;15297:84;;;;;;;;;;13693:1695;;;;;;;;;:::o;8733:2295::-;8982:7;10394:43;10422:14;10394:8;10403:13;10394:23;;;;;;;;;;;;;;:27;;:43;;;;:::i;:::-;10368:8;10377:13;10368:23;;;;;;;;;;;;;:69;;;;;10448:22;10473:166;10536:22;10572:8;10594:9;10617:12;10473:49;:166::i;:::-;10448:191;;10940:14;10914:8;10923:13;10914:23;;;;;;;;;;;;;;:40;10888:8;10897:13;10888:23;;;;;;;;;;;;;:66;;;;;10972:49;11019:1;10972:42;10991:8;11000:12;10991:22;;;;;;;;;;;;;;10972:14;:18;;:42;;;;:::i;18099:1903::-;18380:7;;18471:77;18531:16;18471:53;18509:14;18471:31;18509:14;18490:11;18471:18;:31::i;:77::-;18448:100;;18603:28;18634:148;18697:3;18714:8;18736:12;18762:10;18634:49;:148::i;:::-;18603:179;;18792:27;18822:46;18847:20;18822:8;18831:10;18822:20;;;;;;;:46;18792:76;;19013:19;19051:9;19046:113;19070:8;:15;19066:1;:19;19046:113;;;19120:28;19136:8;19145:1;19136:11;;;;;;;19120:28;19106:42;-1:-1:-1;19087:3:60;;19046:113;;;;19314:21;19338:41;19367:11;19338:8;19347:10;19338:20;;;;;;;:41;19314:65;;19389:25;19417:26;:13;:24;:26::i;:::-;19389:54;-1:-1:-1;19654:21:60;19678:44;:19;19389:54;19678:25;:44::i;:::-;19654:68;-1:-1:-1;19732:24:60;19759:38;:19;19654:68;19759:23;:38::i;:::-;19732:65;-1:-1:-1;19916:79:60;19937:57;:13;945:4:47;19959:34:60;;;19937:21;:57::i;11034:2653::-;11295:7;;;11557:113;11581:8;:15;11577:1;:19;11557:113;;;11631:28;11647:8;11656:1;11647:11;;;;;;;11631:28;11617:42;-1:-1:-1;11598:3:60;;11557:113;;;;11753:37;11807:9;:16;11793:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11793:31:60;;11753:71;;11895:30;11944:9;11939:330;11963:8;:15;11959:1;:19;11939:330;;;11999:21;12023:32;12043:11;12023:8;12032:1;12023:11;;;;;;;:32;11999:56;;12095:50;12133:8;12142:1;12133:11;;;;;;;;;;;;;;12095:29;12111:9;12121:1;12111:12;;;;;;;;;;;;;;12095:8;12104:1;12095:11;;;;;;;;;;;;;;:15;;:29;;;;:::i;:::-;:37;;:50::i;:::-;12069:20;12090:1;12069:23;;;;;;;;;;;;;:76;;;;;12184:74;12211:46;12243:13;12211:20;12232:1;12211:23;;;;;;;;;;;;;;:31;;:46;;;;:::i;:::-;12184:22;;:26;:74::i;:::-;12159:99;-1:-1:-1;;11980:3:60;;11939:330;;;;12382:28;12427:8;:15;12413:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12413:30:60;;12382:61;;12458:9;12453:826;12477:8;:15;12473:1;:19;12453:826;;;12513:26;12680:22;12654:20;12675:1;12654:23;;;;;;;;;;;;;;:48;12650:552;;;12722:24;12749:63;12769:42;:22;945:4:47;12769:26:60;:42::i;:::-;12749:8;12758:1;12749:11;;;;;;;:63;12722:90;;12830:21;12854:34;12871:16;12854:9;12864:1;12854:12;;;;;;;:34;12830:58;-1:-1:-1;13036:79:60;13057:57;12830:58;945:4:47;13079:34:60;;;13057:21;:57::i;:::-;13036:16;;:20;:79::i;:::-;13015:100;;12650:552;;;;;13175:9;13185:1;13175:12;;;;;;;;;;;;;;13154:33;;12650:552;13233:35;13249:18;13233:8;13242:1;13233:11;;;;;;;:35;13216:11;13228:1;13216:14;;;;;;;;;;;;;;;;;:52;-1:-1:-1;12494:3:60;;12453:826;;;;13289:20;13312:37;13332:3;13337:11;13312:19;:37::i;:::-;13289:60;-1:-1:-1;13359:22:60;13384:38;13289:60;13405:16;13384:20;:38::i;:::-;13359:63;;945:4:47;13522:14:60;:31;13518:163;;;13576:55;:14;13599:31;;;13576:22;:55::i;:::-;13569:62;;;;;;;;;;13518:163;13669:1;13662:8;;;;;;;;;;20136:2083;20354:7;20410:21;20459:8;:15;20434:22;:40;20410:64;;20484:11;20498:8;20507:1;20498:11;;;;;;;;;;;;;;20484:25;;20519:11;20547:8;:15;20533:8;20542:1;20533:11;;;;;;;;;;;;;;:29;20519:43;;20577:9;20589:1;20577:13;;20572:195;20596:8;:15;20592:1;:19;20572:195;;;20638:78;20651:53;20660:26;20669:3;20674:8;20683:1;20674:11;;;;;;;;;;;;;;20660:8;:26::i;:::-;20688:8;:15;20651:8;:53::i;:::-;20706:9;20638:12;:78::i;:::-;20632:84;;20736:20;20744:8;20753:1;20744:11;;;;;;;20736:20;20730:26;-1:-1:-1;20613:3:60;;20572:195;;;;20906:8;20915:10;20906:20;;;;;;;;;;;;;;20900:3;:26;20894:32;;20937:12;20952:30;20961:9;20972;20952:8;:30::i;:::-;20937:45;;21050:9;21062:138;21084:72;21093:46;21104:4;21110:28;21119:13;21134:3;21110:8;:28::i;:::-;21093:10;:46::i;:::-;1372:3;21084:8;:72::i;:::-;21170:8;21179:10;21170:20;;;;;;;21062:138;21050:150;;21210:9;21222:73;21230:64;21239:38;21252:9;21263:13;21239:12;:38::i;21230:64::-;21222:3;;:7;:73::i;:::-;21210:85;-1:-1:-1;21348:24:60;;21546:41;21557:11;:4;21566:1;21557:8;:11::i;:::-;21570:16;:9;21584:1;21570:13;:16::i;21546:41::-;21523:64;;21603:9;21598:555;21622:3;21618:1;:7;21598:555;;;21665:12;21646:31;;21707:150;21735:43;21776:1;21735:36;21744:12;21758;21735:8;:36::i;:43::-;21796:47;21833:9;21796:32;21826:1;21796:25;21805:12;21819:1;21796:8;:25::i;:32::-;:36;;:47::i;21707:150::-;21692:165;;21891:16;21876:12;:31;21872:271;;;21966:1;21946:16;21931:12;:31;:36;21927:102;;-1:-1:-1;21998:12:60;-1:-1:-1;21991:19:60;;-1:-1:-1;;;;;;;21991:19:60;21927:102;21872:271;;;22088:1;22072:12;22053:16;:31;:36;22049:94;;-1:-1:-1;22116:12:60;-1:-1:-1;22109:19:60;;-1:-1:-1;;;;;;;22109:19:60;22049:94;21627:3;;21598:555;;;;22163:49;7828:3:10;22163:7:60;:49::i;:::-;20136:2083;;;;;;;;;;;;;;:::o;6228:2287::-;6476:7;7890:41;7917:13;7890:8;7899:12;7890:22;;;;;;;:41;7865:8;7874:12;7865:22;;;;;;;;;;;;;:66;;;;;7942:23;7968:167;8031:22;8067:8;8089:9;8112:13;7968:49;:167::i;:::-;7942:193;;8426:13;8401:8;8410:12;8401:22;;;;;;;;;;;;;;:38;8376:8;8385:12;8376:22;;;;;;;;;;;;;:63;;;;;8457:51;8506:1;8457:44;8485:15;8457:8;8466:13;8457:23;;;;;;;15566:2527;15828:7;;;16086:113;16110:8;:15;16106:1;:19;16086:113;;;16160:28;16176:8;16185:1;16176:11;;;;;;;16160:28;16146:42;-1:-1:-1;16127:3:60;;16086:113;;;;16282:40;16339:10;:17;16325:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16325:32:60;;16282:75;;16367:33;16419:9;16414:337;16438:8;:15;16434:1;:19;16414:337;;;16474:21;16498:30;16516:11;16498:8;16507:1;16498:11;;;;;;;;;;;;;;:17;;:30;;;;:::i;:::-;16474:54;;16571:49;16608:8;16617:1;16608:11;;;;;;;;;;;;;;16571:30;16587:10;16598:1;16587:13;;;;;;;;;;;;;;16571:8;16580:1;16571:11;;;;;;;:49;16542:23;16566:1;16542:26;;;;;;;;;;;;;:78;;;;;16662;16692:47;16725:13;16692:23;16716:1;16692:26;;;;;;;;;;;;;;:32;;:47;;;;:::i;16662:78::-;16634:106;-1:-1:-1;;16455:3:60;;16414:337;;;;16864:28;16909:8;:15;16895:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16895:30:60;;16864:61;;16940:9;16935:911;16959:8;:15;16955:1;:19;16935:911;;;17183:24;17253:23;17277:1;17253:26;;;;;;;;;;;;;;17225:25;:54;17221:550;;;17299:24;17326:59;17346:38;:25;:36;:38::i;17326:59::-;17299:86;;17403:21;17427:35;17445:16;17427:10;17438:1;17427:13;;;;;;;:35;17403:59;-1:-1:-1;17608:77:60;17629:55;17403:59;945:4:47;17649:34:60;;;17629:19;:55::i;17608:77::-;17589:96;;17221:550;;;;;17743:10;17754:1;17743:13;;;;;;;;;;;;;;17724:32;;17221:550;17802:33;17818:16;17802:8;17811:1;17802:11;;;;;;;:33;17785:11;17797:1;17785:14;;;;;;;;;;;;;;;;;:50;-1:-1:-1;16976:3:60;;16935:911;;;;17856:20;17879:37;17899:3;17904:11;17879:19;:37::i;:::-;17856:60;-1:-1:-1;17926:22:60;17951:38;17856:60;17972:16;17951:20;:38::i;:::-;17926:63;;18037:49;18058:27;:14;:25;:27::i;:::-;18037:14;;:20;:49::i;:::-;18030:56;15566:2527;-1:-1:-1;;;;;;;;;;;;;15566:2527:60:o;1300:239:47:-;1358:7;1462:5;;;1477:37;1486:6;;;;1358:7;1477:8;:37::i;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;2402:148::-;2464:7;2483:38;2492:6;;;5318:1:10;2483:8:49;:38::i;:::-;2542:1;2538;:5;;;;;;;2402:148;-1:-1:-1;;;2402:148:49:o;1437:126:10:-;1484:28;1492:9;1484:28;:7;:28::i;:::-;1437:126;:::o;2989:682:47:-;3049:7;3068:38;3077:6;;;5318:1:10;3068:8:47;:38::i;:::-;3121:6;3117:548;;-1:-1:-1;3150:1:47;3143:8;;3117:548;945:4;3202:7;;;;3223:51;;3202:1;:7;:1;3232:13;;;;;:20;5366:1:10;3223:8:47;:51::i;:::-;3648:1;3643;3631:9;:13;3630:19;;;;;;3653:1;3629:25;3622:32;;;;;2005:617;2065:7;2102:5;;;2117:57;2126:6;;;:26;;;2151:1;2146;2136:7;:11;;;;2117:57;2189:12;2185:431;;2224:1;2217:8;;;;;2185:431;945:4;2582:11;;;2581:19;;1545:239;1603:7;1695:37;1709:1;1704;:6;;5172:1:10;1695:8:47;:37::i;:::-;-1:-1:-1;1754:5:47;;;1545:239::o;2628:355::-;2690:7;2709:38;2718:6;;;5318:1:10;2709:8:47;:38::i;:::-;2762:6;2758:219;;-1:-1:-1;2791:1:47;2784:8;;2758:219;945:4;2843:7;;;;2864:51;;2843:1;:7;:1;2873:13;;;2864:51;2965:1;2953:9;:13;;;;;;2946:20;;;;;5813:112;5867:7;945:4;5894:1;:7;5893:25;;5917:1;5893:25;;;-1:-1:-1;945:4:47;5906:7;;5813:112::o;1790:209::-;1852:7;1889:5;;;1904:57;1913:6;;;:26;;;1938:1;1933;1923:7;:11;;;;1904:57;945:4;1979:13;;;;-1:-1:-1;;;1790:209:47:o;2556:232:49:-;2616:7;2635:38;2644:6;;;5318:1:10;2635:8:49;:38::i;:::-;2688:6;2684:98;;-1:-1:-1;2717:1:49;2710:8;;2684:98;2770:1;2765;2761;:5;2760:11;;;;;;2756:1;:15;2749:22;;;;918:101:10;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;1670:3378::-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14" + }, + "methodIdentifiers": { + "bptInForExactTokensOut(uint256,uint256[],uint256[],uint256,uint256,uint256)": "fff8e54e", + "exactBPTInForTokenOut(uint256,uint256[],uint256,uint256,uint256,uint256,uint256)": "ab55d412", + "exactTokensInForBPTOut(uint256,uint256[],uint256[],uint256,uint256,uint256)": "cc832ac9", + "getTokenBalanceGivenInvariantAndAllOtherBalances(uint256,uint256[],uint256,uint256)": "f3e92912", + "inGivenOut(uint256,uint256[],uint256,uint256,uint256)": "9cd91d3f", + "invariant(uint256,uint256[])": "155bfcb8", + "outGivenIn(uint256,uint256[],uint256,uint256,uint256)": "fe2dd7ba", + "tokenInForExactBPTOut(uint256,uint256[],uint256,uint256,uint256,uint256,uint256)": "59d02e62" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"bptInForExactTokensOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"exactBPTInForTokenOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"exactTokensInForBPTOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amplificationParameter\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"currentInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"}],\"name\":\"getTokenBalanceGivenInvariantAndAllOtherBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountOut\",\"type\":\"uint256\"}],\"name\":\"inGivenOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"}],\"name\":\"invariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmountIn\",\"type\":\"uint256\"}],\"name\":\"outGivenIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amp\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"currentInvariant\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"}],\"name\":\"tokenInForExactBPTOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockStableMath.sol\":\"MockStableMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/test/MockStableMath.sol\":{\"keccak256\":\"0xc371fa477df3fb071e3011213f4516980d3844ed5bef8e80c187abf00d7091b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://18bdfde82c9ac013334f2927904d728e946f00daa40d86ea7258c5798079ee29\",\"dweb:/ipfs/QmTw1Pd9eZyFAUa9oeH3cZnUMruuhP2bXMkzZy4fopto1L\"]}},\"version\":1}" + } + }, + "contracts/test/MockStablePoolAmplification.sol": { + "MockStablePoolAmplification": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amplificationParameter", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "startValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "AmpUpdateStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "currentValue", + "type": "uint256" + } + ], + "name": "AmpUpdateStopped", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAmplificationParameter", + "outputs": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isUpdating", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "precision", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "rawEndValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + } + ], + "name": "startAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stopAmplificationParameterUpdate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60e06040523480156200001157600080fd5b5060405162000da638038062000da68339810160408190526200003491620002b6565b306080526001600160601b0319606083901b1660a052806200005d600182101561012c620000b2565b6200007061138882111561012d620000b2565b60006200008b826103e8620000c760201b620002db1760201c565b90506200009881620000f6565b5050505060601b6001600160601b03191660c0526200031c565b81620000c357620000c38162000140565b5050565b6000828202620000ef841580620000e7575083858381620000e457fe5b04145b6003620000b2565b9392505050565b620001048180428062000155565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a023381604051620001359190620002fd565b60405180910390a150565b62000152816210905360ea1b620001c8565b50565b6200016f8160c060406200022960201b620003081760201c565b6200018983608060406200022960201b620003081760201c565b620001a2856040806200022960201b620003081760201c565b620001bc87600060406200022960201b620003081760201c565b17171760005550505050565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000620002388484846200023e565b50501b90565b6200024f61010083106064620000b2565b62000288600182101580156200028057506200027c60ff84610100036200029e60201b6200031b1760201c565b8211155b6064620000b2565b6200029983821c156101b4620000b2565b505050565b6000818310620002af5781620000ef565b5090919050565b600080600060608486031215620002cb578283fd5b8351620002d88162000306565b6020850151909350620002eb8162000306565b80925050604084015190509250925092565b90815260200190565b6001600160a01b03811681146200015257600080fd5b60805160a05160601c60c05160601c610a576200034f6000398061027a5250806102565250806102065250610a576000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063893d20e81161005b578063893d20e8146100d75780638d928af8146100ec578063aaabadc5146100f4578063eb0f24d6146100fc5761007d565b80632f1a0bc9146100825780636daccffa14610097578063851c1bb3146100b7575b600080fd5b610095610090366004610949565b610104565b005b61009f6101e7565b6040516100ae939291906109f0565b60405180910390f35b6100ca6100c53660046108d5565b610202565b6040516100ae91906109bb565b6100df610254565b6040516100ae919061099a565b6100df610278565b6100df61029c565b6100956102ab565b61010c610331565b61011c600183101561012c61037a565b61012d61138883111561012d61037a565b60006101398242610388565b905061014d6201518082101561013d61037a565b60008061015861039e565b91509150610169811561013e61037a565b6000610177866103e86102db565b905060008382116101a6576101a161019262015180866102db565b61019c84886102db565b610412565b6101c0565b6101c06101b662015180846102db565b61019c86886102db565b90506101d2600282111561013f61037a565b6101de84834289610445565b50505050505050565b60008060006101f461039e565b90949093506103e892509050565b60007f00000000000000000000000000000000000000000000000000000000000000008260405160200161023792919061096a565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006102a6610494565b905090565b6102b3610331565b6000806102be61039e565b915091506102ce8161014061037a565b6102d78261051b565b5050565b60008282026102ff8415806102f85750838583816102f557fe5b04145b600361037a565b90505b92915050565b6000610315848484610561565b50501b90565b600081831061032a57816102ff565b5090919050565b60006103606000357fffffffff0000000000000000000000000000000000000000000000000000000016610202565b905061037761036f82336105ad565b61019161037a565b50565b816102d7576102d7816106d1565b600061039883831115600161037a565b50900390565b6000806000806000806103af6106fb565b9350935093509350804210156104025760019450838311156103e65781810382420385850302816103dc57fe5b04840195506103fd565b81810382420384860302816103f757fe5b04840395505b61040a565b600094508295505b505050509091565b6000610421821515600461037a565b8261042e57506000610302565b81600184038161043a57fe5b046001019050610302565b6104518484848461075a565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516104869493929190610a06565b60405180910390a150505050565b600061049e610278565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e357600080fd5b505afa1580156104f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a69190610915565b6105278182424261075a565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a02338160405161055691906109bb565b60405180910390a150565b6105706101008310606461037a565b61059960018210158015610592575061058e60ff846101000361031b565b8211155b606461037a565b6105a883821c156101b461037a565b505050565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b6105cc610254565b73ffffffffffffffffffffffffffffffffffffffff16141580156105f457506105f483610799565b1561063657610601610254565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050610302565b61063e610494565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161067a939291906109c4565b60206040518083038186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ca91906108b5565b9050610302565b610377817f42414c0000000000000000000000000000000000000000000000000000000000610807565b60008060008061071a600060406000546108829092919063ffffffff16565b60005490945061072c90604080610882565b60005490935061073f9060806040610882565b6000549092506107529060c06040610882565b905090919293565b6107678160c06040610308565b6107748360806040610308565b61078085604080610308565b61078d8760006040610308565b17171760005550505050565b60006107c47f2f1a0bc900000000000000000000000000000000000000000000000000000000610202565b8214806107f857506107f57feb0f24d600000000000000000000000000000000000000000000000000000000610202565b82145b806103025750610302826108af565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6001901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191901c1690565b50600090565b6000602082840312156108c6578081fd5b815180151581146102ff578182fd5b6000602082840312156108e6578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146102ff578182fd5b600060208284031215610926578081fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102ff578182fd5b6000806040838503121561095b578081fd5b50508035926020909101359150565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b9283529015156020830152604082015260600190565b9384526020840192909252604083015260608201526080019056fea26469706673582212201688e80fe9b16387236a22ce48ebbf634e59daf8d1a5bfe1bebf33708037373864736f6c63430007010033", + "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0xDA6 CODESIZE SUB DUP1 PUSH3 0xDA6 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x2B6 JUMP JUMPDEST ADDRESS PUSH1 0x80 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 DUP4 SWAP1 SHL AND PUSH1 0xA0 MSTORE DUP1 PUSH3 0x5D PUSH1 0x1 DUP3 LT ISZERO PUSH2 0x12C PUSH3 0xB2 JUMP JUMPDEST PUSH3 0x70 PUSH2 0x1388 DUP3 GT ISZERO PUSH2 0x12D PUSH3 0xB2 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x8B DUP3 PUSH2 0x3E8 PUSH3 0xC7 PUSH1 0x20 SHL PUSH3 0x2DB OR PUSH1 0x20 SHR JUMP JUMPDEST SWAP1 POP PUSH3 0x98 DUP2 PUSH3 0xF6 JUMP JUMPDEST POP POP POP POP PUSH1 0x60 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT AND PUSH1 0xC0 MSTORE PUSH3 0x31C JUMP JUMPDEST DUP2 PUSH3 0xC3 JUMPI PUSH3 0xC3 DUP2 PUSH3 0x140 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH3 0xEF DUP5 ISZERO DUP1 PUSH3 0xE7 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH3 0xE4 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH3 0xB2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH3 0x104 DUP2 DUP1 TIMESTAMP DUP1 PUSH3 0x155 JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH3 0x135 SWAP2 SWAP1 PUSH3 0x2FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH3 0x152 DUP2 PUSH3 0x109053 PUSH1 0xEA SHL PUSH3 0x1C8 JUMP JUMPDEST POP JUMP JUMPDEST PUSH3 0x16F DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH3 0x229 PUSH1 0x20 SHL PUSH3 0x308 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x189 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH3 0x229 PUSH1 0x20 SHL PUSH3 0x308 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1A2 DUP6 PUSH1 0x40 DUP1 PUSH3 0x229 PUSH1 0x20 SHL PUSH3 0x308 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x1BC DUP8 PUSH1 0x0 PUSH1 0x40 PUSH3 0x229 PUSH1 0x20 SHL PUSH3 0x308 OR PUSH1 0x20 SHR JUMP JUMPDEST OR OR OR PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH3 0x461BCD PUSH1 0xE5 SHL PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH3 0x238 DUP5 DUP5 DUP5 PUSH3 0x23E JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH3 0x24F PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH3 0xB2 JUMP JUMPDEST PUSH3 0x288 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH3 0x280 JUMPI POP PUSH3 0x27C PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH3 0x29E PUSH1 0x20 SHL PUSH3 0x31B OR PUSH1 0x20 SHR JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH3 0xB2 JUMP JUMPDEST PUSH3 0x299 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH3 0xB2 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH3 0x2AF JUMPI DUP2 PUSH3 0xEF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0x2CB JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH3 0x2D8 DUP2 PUSH3 0x306 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0x2EB DUP2 PUSH3 0x306 JUMP JUMPDEST DUP1 SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x152 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH1 0x60 SHR PUSH2 0xA57 PUSH3 0x34F PUSH1 0x0 CODECOPY DUP1 PUSH2 0x27A MSTORE POP DUP1 PUSH2 0x256 MSTORE POP DUP1 PUSH2 0x206 MSTORE POP PUSH2 0xA57 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x893D20E8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xEC JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0xFC JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x949 JUMP JUMPDEST PUSH2 0x104 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x202 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x9BB JUMP JUMPDEST PUSH2 0xDF PUSH2 0x254 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x99A JUMP JUMPDEST PUSH2 0xDF PUSH2 0x278 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x29C JUMP JUMPDEST PUSH2 0x95 PUSH2 0x2AB JUMP JUMPDEST PUSH2 0x10C PUSH2 0x331 JUMP JUMPDEST PUSH2 0x11C PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x37A JUMP JUMPDEST PUSH2 0x12D PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x37A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139 DUP3 TIMESTAMP PUSH2 0x388 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x37A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x158 PUSH2 0x39E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x169 DUP2 ISZERO PUSH2 0x13E PUSH2 0x37A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x177 DUP7 PUSH2 0x3E8 PUSH2 0x2DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0x1A6 JUMPI PUSH2 0x1A1 PUSH2 0x192 PUSH3 0x15180 DUP7 PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x19C DUP5 DUP9 PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST PUSH2 0x1C0 JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x1B6 PUSH3 0x15180 DUP5 PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x19C DUP7 DUP9 PUSH2 0x2DB JUMP JUMPDEST SWAP1 POP PUSH2 0x1D2 PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x37A JUMP JUMPDEST PUSH2 0x1DE DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x445 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F4 PUSH2 0x39E JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x237 SWAP3 SWAP2 SWAP1 PUSH2 0x96A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A6 PUSH2 0x494 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2B3 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2BE PUSH2 0x39E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2CE DUP2 PUSH2 0x140 PUSH2 0x37A JUMP JUMPDEST PUSH2 0x2D7 DUP3 PUSH2 0x51B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x2FF DUP5 ISZERO DUP1 PUSH2 0x2F8 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2F5 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x37A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x315 DUP5 DUP5 DUP5 PUSH2 0x561 JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x32A JUMPI DUP2 PUSH2 0x2FF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x360 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x202 JUMP JUMPDEST SWAP1 POP PUSH2 0x377 PUSH2 0x36F DUP3 CALLER PUSH2 0x5AD JUMP JUMPDEST PUSH2 0x191 PUSH2 0x37A JUMP JUMPDEST POP JUMP JUMPDEST DUP2 PUSH2 0x2D7 JUMPI PUSH2 0x2D7 DUP2 PUSH2 0x6D1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x398 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x37A JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3AF PUSH2 0x6FB JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x402 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x3E6 JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x3DC JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x3FD JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x3F7 JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x40A JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x421 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x37A JUMP JUMPDEST DUP3 PUSH2 0x42E JUMPI POP PUSH1 0x0 PUSH2 0x302 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x43A JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x302 JUMP JUMPDEST PUSH2 0x451 DUP5 DUP5 DUP5 DUP5 PUSH2 0x75A JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x486 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA06 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x49E PUSH2 0x278 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A6 SWAP2 SWAP1 PUSH2 0x915 JUMP JUMPDEST PUSH2 0x527 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x75A JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x556 SWAP2 SWAP1 PUSH2 0x9BB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x570 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x37A JUMP JUMPDEST PUSH2 0x599 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x592 JUMPI POP PUSH2 0x58E PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x31B JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x37A JUMP JUMPDEST PUSH2 0x5A8 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x37A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x5CC PUSH2 0x254 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x5F4 JUMPI POP PUSH2 0x5F4 DUP4 PUSH2 0x799 JUMP JUMPDEST ISZERO PUSH2 0x636 JUMPI PUSH2 0x601 PUSH2 0x254 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ SWAP1 POP PUSH2 0x302 JUMP JUMPDEST PUSH2 0x63E PUSH2 0x494 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x67A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9C4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6CA SWAP2 SWAP1 PUSH2 0x8B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x302 JUMP JUMPDEST PUSH2 0x377 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x807 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x71A PUSH1 0x0 PUSH1 0x40 PUSH1 0x0 SLOAD PUSH2 0x882 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP5 POP PUSH2 0x72C SWAP1 PUSH1 0x40 DUP1 PUSH2 0x882 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP4 POP PUSH2 0x73F SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x882 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP3 POP PUSH2 0x752 SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x882 JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x767 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x774 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x780 DUP6 PUSH1 0x40 DUP1 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x78D DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x308 JUMP JUMPDEST OR OR OR PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7C4 PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x202 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x7F8 JUMPI POP PUSH2 0x7F5 PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x202 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0x302 JUMPI POP PUSH2 0x302 DUP3 PUSH2 0x8AF JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8C6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8E6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x2FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x926 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x95B JUMPI DUP1 DUP2 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND DUP9 0xE8 0xF 0xE9 0xB1 PUSH4 0x87236A22 0xCE 0x48 0xEB 0xBF PUSH4 0x4E59DAF8 0xD1 0xA5 0xBF 0xE1 0xBE 0xBF CALLER PUSH17 0x8037373864736F6C634300070100330000 ", + "sourceMap": "856:609:67:-:0;;;964:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1207:4;2049:46:38;;-1:-1:-1;;;;;;1724:14:29;;;;;;;1099:22:67;2735:71:61;1275:1:60;2744:45:61;;;6565:3:10;2735:8:61;:71::i;:::-;2816;1319:4:60;2825:45:61;;;6610:3:10;2816:8:61;:71::i;:::-;2898:18;2919:59;2928:22;1372:3:60;2919:8:61;;;;;:59;;:::i;:::-;2898:80;-1:-1:-1;2988:33:61;2898:80;2988:21;:33::i;:::-;-1:-1:-1;;;;1230:14:67::3;::::0;-1:-1:-1;;;;;;1230:14:67;::::3;::::0;856:609;;918:101:10;987:9;982:34;;998:18;1006:9;998:7;:18::i;:::-;918:101;;:::o;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;:::-;2210:1;2038:180;-1:-1:-1;;;2038:180:49:o;7584::61:-;7648:71;7672:5;;7686:15;;7648:23;:71::i;:::-;7734:23;7751:5;7734:23;;;;;;:::i;:::-;;;;;;;;7584:180;:::o;1437:126:10:-;1484:28;1492:9;-1:-1:-1;;;1484:7:10;:28::i;:::-;1437:126;:::o;8082:570:61:-;8567:78;8588:7;2352:3;2472:2;8567:20;;;;;:78;;:::i;:::-;8470:82;8491:9;2295:3;2472:2;8470:20;;;;;:82;;:::i;:::-;8379:76;8400:8;2237:2;2411;8379:20;;;;;:76;;:::i;:::-;8284:80;8305:10;2181:1;2411:2;8284:20;;;;;:80;;:::i;:::-;:171;:268;:361;8245:24;:400;-1:-1:-1;;;;8082:570:61:o;1670:3378:10:-;-1:-1:-1;;;1732:18:10;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;3883:240:46;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;7061:607::-;7197:44;7215:3;7206:12;;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;;;;;:27;;:::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;:::-;7061:607;;;:::o;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;2005:20;-1:-1:-1;1928:104:49:o;458:565:-1:-;;;;622:2;610:9;601:7;597:23;593:32;590:2;;;-1:-1;;628:12;590:2;245:6;239:13;257:48;299:5;257:48;:::i;:::-;806:2;856:22;;83:13;680:89;;-1:-1;101:33;83:13;101:33;:::i;:::-;814:74;;;;925:2;979:9;975:22;395:13;933:74;;584:439;;;;;:::o;1150:222::-;1101:37;;;1277:2;1262:18;;1248:124::o;1797:117::-;-1:-1;;;;;1652:54;;1856:35;;1846:2;;1905:1;;1895:12;1840:74;856:609:67;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "3869": [ + { + "length": 32, + "start": 598 + } + ], + "5049": [ + { + "length": 32, + "start": 518 + } + ], + "17244": [ + { + "length": 32, + "start": 634 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b506004361061007d5760003560e01c8063893d20e81161005b578063893d20e8146100d75780638d928af8146100ec578063aaabadc5146100f4578063eb0f24d6146100fc5761007d565b80632f1a0bc9146100825780636daccffa14610097578063851c1bb3146100b7575b600080fd5b610095610090366004610949565b610104565b005b61009f6101e7565b6040516100ae939291906109f0565b60405180910390f35b6100ca6100c53660046108d5565b610202565b6040516100ae91906109bb565b6100df610254565b6040516100ae919061099a565b6100df610278565b6100df61029c565b6100956102ab565b61010c610331565b61011c600183101561012c61037a565b61012d61138883111561012d61037a565b60006101398242610388565b905061014d6201518082101561013d61037a565b60008061015861039e565b91509150610169811561013e61037a565b6000610177866103e86102db565b905060008382116101a6576101a161019262015180866102db565b61019c84886102db565b610412565b6101c0565b6101c06101b662015180846102db565b61019c86886102db565b90506101d2600282111561013f61037a565b6101de84834289610445565b50505050505050565b60008060006101f461039e565b90949093506103e892509050565b60007f00000000000000000000000000000000000000000000000000000000000000008260405160200161023792919061096a565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006102a6610494565b905090565b6102b3610331565b6000806102be61039e565b915091506102ce8161014061037a565b6102d78261051b565b5050565b60008282026102ff8415806102f85750838583816102f557fe5b04145b600361037a565b90505b92915050565b6000610315848484610561565b50501b90565b600081831061032a57816102ff565b5090919050565b60006103606000357fffffffff0000000000000000000000000000000000000000000000000000000016610202565b905061037761036f82336105ad565b61019161037a565b50565b816102d7576102d7816106d1565b600061039883831115600161037a565b50900390565b6000806000806000806103af6106fb565b9350935093509350804210156104025760019450838311156103e65781810382420385850302816103dc57fe5b04840195506103fd565b81810382420384860302816103f757fe5b04840395505b61040a565b600094508295505b505050509091565b6000610421821515600461037a565b8261042e57506000610302565b81600184038161043a57fe5b046001019050610302565b6104518484848461075a565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516104869493929190610a06565b60405180910390a150505050565b600061049e610278565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e357600080fd5b505afa1580156104f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a69190610915565b6105278182424261075a565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a02338160405161055691906109bb565b60405180910390a150565b6105706101008310606461037a565b61059960018210158015610592575061058e60ff846101000361031b565b8211155b606461037a565b6105a883821c156101b461037a565b505050565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b6105cc610254565b73ffffffffffffffffffffffffffffffffffffffff16141580156105f457506105f483610799565b1561063657610601610254565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050610302565b61063e610494565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161067a939291906109c4565b60206040518083038186803b15801561069257600080fd5b505afa1580156106a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ca91906108b5565b9050610302565b610377817f42414c0000000000000000000000000000000000000000000000000000000000610807565b60008060008061071a600060406000546108829092919063ffffffff16565b60005490945061072c90604080610882565b60005490935061073f9060806040610882565b6000549092506107529060c06040610882565b905090919293565b6107678160c06040610308565b6107748360806040610308565b61078085604080610308565b61078d8760006040610308565b17171760005550505050565b60006107c47f2f1a0bc900000000000000000000000000000000000000000000000000000000610202565b8214806107f857506107f57feb0f24d600000000000000000000000000000000000000000000000000000000610202565b82145b806103025750610302826108af565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6001901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191901c1690565b50600090565b6000602082840312156108c6578081fd5b815180151581146102ff578182fd5b6000602082840312156108e6578081fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146102ff578182fd5b600060208284031215610926578081fd5b815173ffffffffffffffffffffffffffffffffffffffff811681146102ff578182fd5b6000806040838503121561095b578081fd5b50508035926020909101359150565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b9283529015156020830152604082015260600190565b9384526020840192909252604083015260608201526080019056fea26469706673582212201688e80fe9b16387236a22ce48ebbf634e59daf8d1a5bfe1bebf33708037373864736f6c63430007010033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x7D JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x893D20E8 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x893D20E8 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xEC JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xF4 JUMPI DUP1 PUSH4 0xEB0F24D6 EQ PUSH2 0xFC JUMPI PUSH2 0x7D JUMP JUMPDEST DUP1 PUSH4 0x2F1A0BC9 EQ PUSH2 0x82 JUMPI DUP1 PUSH4 0x6DACCFFA EQ PUSH2 0x97 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xB7 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x95 PUSH2 0x90 CALLDATASIZE PUSH1 0x4 PUSH2 0x949 JUMP JUMPDEST PUSH2 0x104 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x9F PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xCA PUSH2 0xC5 CALLDATASIZE PUSH1 0x4 PUSH2 0x8D5 JUMP JUMPDEST PUSH2 0x202 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x9BB JUMP JUMPDEST PUSH2 0xDF PUSH2 0x254 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x99A JUMP JUMPDEST PUSH2 0xDF PUSH2 0x278 JUMP JUMPDEST PUSH2 0xDF PUSH2 0x29C JUMP JUMPDEST PUSH2 0x95 PUSH2 0x2AB JUMP JUMPDEST PUSH2 0x10C PUSH2 0x331 JUMP JUMPDEST PUSH2 0x11C PUSH1 0x1 DUP4 LT ISZERO PUSH2 0x12C PUSH2 0x37A JUMP JUMPDEST PUSH2 0x12D PUSH2 0x1388 DUP4 GT ISZERO PUSH2 0x12D PUSH2 0x37A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x139 DUP3 TIMESTAMP PUSH2 0x388 JUMP JUMPDEST SWAP1 POP PUSH2 0x14D PUSH3 0x15180 DUP3 LT ISZERO PUSH2 0x13D PUSH2 0x37A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x158 PUSH2 0x39E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x169 DUP2 ISZERO PUSH2 0x13E PUSH2 0x37A JUMP JUMPDEST PUSH1 0x0 PUSH2 0x177 DUP7 PUSH2 0x3E8 PUSH2 0x2DB JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP4 DUP3 GT PUSH2 0x1A6 JUMPI PUSH2 0x1A1 PUSH2 0x192 PUSH3 0x15180 DUP7 PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x19C DUP5 DUP9 PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x412 JUMP JUMPDEST PUSH2 0x1C0 JUMP JUMPDEST PUSH2 0x1C0 PUSH2 0x1B6 PUSH3 0x15180 DUP5 PUSH2 0x2DB JUMP JUMPDEST PUSH2 0x19C DUP7 DUP9 PUSH2 0x2DB JUMP JUMPDEST SWAP1 POP PUSH2 0x1D2 PUSH1 0x2 DUP3 GT ISZERO PUSH2 0x13F PUSH2 0x37A JUMP JUMPDEST PUSH2 0x1DE DUP5 DUP4 TIMESTAMP DUP10 PUSH2 0x445 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x1F4 PUSH2 0x39E JUMP JUMPDEST SWAP1 SWAP5 SWAP1 SWAP4 POP PUSH2 0x3E8 SWAP3 POP SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x237 SWAP3 SWAP2 SWAP1 PUSH2 0x96A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2A6 PUSH2 0x494 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x2B3 PUSH2 0x331 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x2BE PUSH2 0x39E JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH2 0x2CE DUP2 PUSH2 0x140 PUSH2 0x37A JUMP JUMPDEST PUSH2 0x2D7 DUP3 PUSH2 0x51B JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MUL PUSH2 0x2FF DUP5 ISZERO DUP1 PUSH2 0x2F8 JUMPI POP DUP4 DUP6 DUP4 DUP2 PUSH2 0x2F5 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH1 0x3 PUSH2 0x37A JUMP JUMPDEST SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x315 DUP5 DUP5 DUP5 PUSH2 0x561 JUMP JUMPDEST POP POP SHL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 LT PUSH2 0x32A JUMPI DUP2 PUSH2 0x2FF JUMP JUMPDEST POP SWAP1 SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x360 PUSH1 0x0 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH2 0x202 JUMP JUMPDEST SWAP1 POP PUSH2 0x377 PUSH2 0x36F DUP3 CALLER PUSH2 0x5AD JUMP JUMPDEST PUSH2 0x191 PUSH2 0x37A JUMP JUMPDEST POP JUMP JUMPDEST DUP2 PUSH2 0x2D7 JUMPI PUSH2 0x2D7 DUP2 PUSH2 0x6D1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x398 DUP4 DUP4 GT ISZERO PUSH1 0x1 PUSH2 0x37A JUMP JUMPDEST POP SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x3AF PUSH2 0x6FB JUMP JUMPDEST SWAP4 POP SWAP4 POP SWAP4 POP SWAP4 POP DUP1 TIMESTAMP LT ISZERO PUSH2 0x402 JUMPI PUSH1 0x1 SWAP5 POP DUP4 DUP4 GT ISZERO PUSH2 0x3E6 JUMPI DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP6 DUP6 SUB MUL DUP2 PUSH2 0x3DC JUMPI INVALID JUMPDEST DIV DUP5 ADD SWAP6 POP PUSH2 0x3FD JUMP JUMPDEST DUP2 DUP2 SUB DUP3 TIMESTAMP SUB DUP5 DUP7 SUB MUL DUP2 PUSH2 0x3F7 JUMPI INVALID JUMPDEST DIV DUP5 SUB SWAP6 POP JUMPDEST PUSH2 0x40A JUMP JUMPDEST PUSH1 0x0 SWAP5 POP DUP3 SWAP6 POP JUMPDEST POP POP POP POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x421 DUP3 ISZERO ISZERO PUSH1 0x4 PUSH2 0x37A JUMP JUMPDEST DUP3 PUSH2 0x42E JUMPI POP PUSH1 0x0 PUSH2 0x302 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP5 SUB DUP2 PUSH2 0x43A JUMPI INVALID JUMPDEST DIV PUSH1 0x1 ADD SWAP1 POP PUSH2 0x302 JUMP JUMPDEST PUSH2 0x451 DUP5 DUP5 DUP5 DUP5 PUSH2 0x75A JUMP JUMPDEST PUSH32 0x1835882EE7A34AC194F717A35E09BB1D24C82A3B9D854AB6C9749525B714CDF2 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH2 0x486 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xA06 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x49E PUSH2 0x278 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xAAABADC5 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x2A6 SWAP2 SWAP1 PUSH2 0x915 JUMP JUMPDEST PUSH2 0x527 DUP2 DUP3 TIMESTAMP TIMESTAMP PUSH2 0x75A JUMP JUMPDEST PUSH32 0xA0D01593E47E69D07E0CCD87BECE09411E07DD1ED40CA8F2E7AF2976542A0233 DUP2 PUSH1 0x40 MLOAD PUSH2 0x556 SWAP2 SWAP1 PUSH2 0x9BB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0x570 PUSH2 0x100 DUP4 LT PUSH1 0x64 PUSH2 0x37A JUMP JUMPDEST PUSH2 0x599 PUSH1 0x1 DUP3 LT ISZERO DUP1 ISZERO PUSH2 0x592 JUMPI POP PUSH2 0x58E PUSH1 0xFF DUP5 PUSH2 0x100 SUB PUSH2 0x31B JUMP JUMPDEST DUP3 GT ISZERO JUMPDEST PUSH1 0x64 PUSH2 0x37A JUMP JUMPDEST PUSH2 0x5A8 DUP4 DUP3 SHR ISZERO PUSH2 0x1B4 PUSH2 0x37A JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xBA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1BA1B PUSH2 0x5CC PUSH2 0x254 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x5F4 JUMPI POP PUSH2 0x5F4 DUP4 PUSH2 0x799 JUMP JUMPDEST ISZERO PUSH2 0x636 JUMPI PUSH2 0x601 PUSH2 0x254 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ SWAP1 POP PUSH2 0x302 JUMP JUMPDEST PUSH2 0x63E PUSH2 0x494 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9BE2A884 DUP5 DUP5 ADDRESS PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x67A SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x9C4 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x6A6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x6CA SWAP2 SWAP1 PUSH2 0x8B5 JUMP JUMPDEST SWAP1 POP PUSH2 0x302 JUMP JUMPDEST PUSH2 0x377 DUP2 PUSH32 0x42414C0000000000000000000000000000000000000000000000000000000000 PUSH2 0x807 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x71A PUSH1 0x0 PUSH1 0x40 PUSH1 0x0 SLOAD PUSH2 0x882 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP5 POP PUSH2 0x72C SWAP1 PUSH1 0x40 DUP1 PUSH2 0x882 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP4 POP PUSH2 0x73F SWAP1 PUSH1 0x80 PUSH1 0x40 PUSH2 0x882 JUMP JUMPDEST PUSH1 0x0 SLOAD SWAP1 SWAP3 POP PUSH2 0x752 SWAP1 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x882 JUMP JUMPDEST SWAP1 POP SWAP1 SWAP2 SWAP3 SWAP4 JUMP JUMPDEST PUSH2 0x767 DUP2 PUSH1 0xC0 PUSH1 0x40 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x774 DUP4 PUSH1 0x80 PUSH1 0x40 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x780 DUP6 PUSH1 0x40 DUP1 PUSH2 0x308 JUMP JUMPDEST PUSH2 0x78D DUP8 PUSH1 0x0 PUSH1 0x40 PUSH2 0x308 JUMP JUMPDEST OR OR OR PUSH1 0x0 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7C4 PUSH32 0x2F1A0BC900000000000000000000000000000000000000000000000000000000 PUSH2 0x202 JUMP JUMPDEST DUP3 EQ DUP1 PUSH2 0x7F8 JUMPI POP PUSH2 0x7F5 PUSH32 0xEB0F24D600000000000000000000000000000000000000000000000000000000 PUSH2 0x202 JUMP JUMPDEST DUP3 EQ JUMPDEST DUP1 PUSH2 0x302 JUMPI POP PUSH2 0x302 DUP3 PUSH2 0x8AF JUMP JUMPDEST PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 MSTORE PUSH1 0x7 PUSH1 0x24 MSTORE PUSH1 0xA DUP1 DUP5 DIV DUP2 DUP2 MOD PUSH1 0x30 SWAP1 DUP2 ADD PUSH1 0x8 SHL SWAP6 DUP4 SWAP1 MOD SWAP6 SWAP1 SWAP6 ADD SWAP1 DUP3 SWAP1 DIV SWAP2 DUP3 MOD DUP6 ADD PUSH1 0x10 SHL ADD PUSH1 0x23 PUSH4 0xFFFFFF00 PUSH1 0xE0 DUP7 SWAP1 SHR AND ADD PUSH1 0x18 SHL ADD SWAP1 SWAP4 ADD PUSH1 0xC8 SHL PUSH1 0x44 MSTORE PUSH1 0xE8 DUP3 SWAP1 SHR SWAP1 PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH1 0x1 SWAP1 SHL PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP2 SWAP1 SHR AND SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8C6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x2FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x8E6 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x2FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x926 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2FF JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x95B JUMPI DUP1 DUP2 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x24 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 AND DUP9 0xE8 0xF 0xE9 0xB1 PUSH4 0x87236A22 0xCE 0x48 0xEB 0xBF PUSH4 0x4E59DAF8 0xD1 0xA5 0xBF 0xE1 0xBE 0xBF CALLER PUSH17 0x8037373864736F6C634300070100330000 ", + "sourceMap": "856:609:67:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5907:1301:61;;;;;;:::i;:::-;;:::i;:::-;;3034:299;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;2607:430:38;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1751:80:29:-;;;:::i;:::-;;;;;;;:::i;1257:79:67:-;;;:::i;1837:101:29:-;;;:::i;7319:259:61:-;;;:::i;5907:1301::-;2276:21:38;:19;:21::i;:::-;6020:60:61::1;1275:1:60;6029:11:61;:34;;6565:3:10;6020:8:61;:60::i;:::-;6090;1319:4:60;6099:11:61;:34;;6610:3:10;6090:8:61;:60::i;:::-;6161:16;6180:34;6189:7;6198:15;6180:8;:34::i;:::-;6161:53;;6224:69;1823:6;6233:8;:28;;7518:3:10;6224:8:61;:69::i;:::-;6305:20;6327:15:::0;6346:28:::1;:26;:28::i;:::-;6304:70;;;;6384:48;6394:10;6393:11;7574:3:10;6384:8:61;:48::i;:::-;6443:16;6462:48;6471:11;1372:3:60;6462:8:61;:48::i;:::-;6443:67;;6817:17;6848:12;6837:8;:23;:197;;6962:72;6973:30;6982:6;6990:12;6973:8;:30::i;:::-;7005:28;7014:8;7024;7005;:28::i;:::-;6962:10;:72::i;:::-;6837:197;;;6875:72;6886:26;6895:6;6903:8;6886;:26::i;:::-;6914:32;6923:12;6937:8;6914;:32::i;6875:72::-;6817:217;;7044:75;1889:1;7053:9;:39;;7629:3:10;7044:8:61;:75::i;:::-;7130:71;7152:12;7166:8;7176:15;7193:7;7130:21;:71::i;:::-;2307:1:38;;;;;5907:1301:61::0;;:::o;3034:299::-;3131:13;3158:15;3187:17;3251:28;:26;:28::i;:::-;3229:50;;;;-1:-1:-1;1372:3:60;;-1:-1:-1;3034:299:61;-1:-1:-1;3034:299:61:o;2607:430:38:-;2675:7;2996:22;3020:8;2979:50;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2969:61;;;;;;2962:68;;2607:430;;;:::o;1751:80:29:-;1818:6;1751:80;:::o;1257:79:67:-;1323:6;1257:79;:::o;1837:101:29:-;1885:11;1915:16;:14;:16::i;:::-;1908:23;;1837:101;:::o;7319:259:61:-;2276:21:38;:19;:21::i;:::-;7396:20:61::1;7418:15:::0;7437:28:::1;:26;:28::i;:::-;7395:70;;;;7475:50;7484:10;7688:3:10;7475:8:61;:50::i;:::-;7536:35;7558:12;7536:21;:35::i;:::-;2307:1:38;;7319:259:61:o:0;2038:180:49:-;2096:7;2127:5;;;2142:51;2151:6;;;:20;;;2170:1;2165;2161;:5;;;;;;:10;2151:20;5269:1:10;2142:8:49;:51::i;:::-;2210:1;-1:-1:-1;2038:180:49;;;;;:::o;3883:240:46:-;4006:7;4025:49;4049:5;4056:6;4064:9;4025:23;:49::i;:::-;-1:-1:-1;;4100:15:46;;3883:240::o;1928:104:49:-;1986:7;2016:1;2012;:5;:13;;2024:1;2012:13;;;-1:-1:-1;2020:1:49;;2005:20;-1:-1:-1;1928:104:49:o;2420:181:38:-;2475:16;2494:20;2506:7;;;;2494:11;:20::i;:::-;2475:39;;2524:70;2533:33;2545:8;2555:10;2533:11;:33::i;:::-;9891:3:10;2524:8:38;:70::i;:::-;2420:181;:::o;918:101:10:-;987:9;982:34;;998:18;1006:9;998:7;:18::i;1193:166:49:-;1251:7;1270:37;1284:1;1279;:6;;5172:1:10;1270:8:49;:37::i;:::-;-1:-1:-1;1329:5:49;;;1193:166::o;3515:1248:61:-;3576:13;3591:15;3619:18;3639:16;3657:17;3676:15;3695:23;:21;:23::i;:::-;3618:100;;;;;;;;3868:7;3850:15;:25;3846:911;;;3904:4;3891:17;;4380:10;4369:8;:21;4365:303;;;4502:9;4492:7;:19;4477:9;4459:15;:27;4444:10;4433:8;:21;4432:55;4431:81;;;;;;4418:10;:94;4410:102;;4365:303;;;4643:9;4633:7;:19;4618:9;4600:15;:27;4587:8;4574:10;:21;4573:55;4572:81;;;;;;4559:10;:94;4551:102;;4365:303;3846:911;;;4711:5;4698:18;;4738:8;4730:16;;3846:911;3515:1248;;;;;;:::o;2556:232:49:-;2616:7;2635:38;2644:6;;;5318:1:10;2635:8:49;:38::i;:::-;2688:6;2684:98;;-1:-1:-1;2717:1:49;2710:8;;2684:98;2770:1;2765;2761;:5;2760:11;;;;;;2756:1;:15;2749:22;;;;7770:306:61;7931:65;7955:10;7967:8;7977:9;7988:7;7931:23;:65::i;:::-;8011:58;8028:10;8040:8;8050:9;8061:7;8011:58;;;;;;;;;:::i;:::-;;;;;;;;7770:306;;;;:::o;1342:121:67:-;1400:11;1430:10;:8;:10::i;:::-;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7584:180:61:-;7648:71;7672:5;7679;7686:15;7703;7648:23;:71::i;:::-;7734:23;7751:5;7734:23;;;;;;:::i;:::-;;;;;;;;7584:180;:::o;7061:607:46:-;7197:44;7215:3;7206:6;:12;5640:3:10;7197:8:46;:44::i;:::-;7406:90;7428:1;7415:9;:14;;:58;;;;;7446:27;7455:3;7466:6;7460:3;:12;7446:8;:27::i;:::-;7433:9;:40;;7415:58;5640:3:10;7406:8:46;:90::i;:::-;7605:56;7614:18;;;:23;12057:3:10;7605:8:46;:56::i;:::-;7061:607;;;:::o;1944:544:29:-;2032:4;1638:42;2053:10;:8;:10::i;:::-;:29;;;;2052:63;;;;;2087:28;2106:8;2087:18;:28::i;:::-;2048:434;;;2247:10;:8;:10::i;:::-;2233:24;;:10;:24;;;2226:31;;;;2048:434;2410:16;:14;:16::i;:::-;:27;;;2438:8;2448:7;2465:4;2410:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2403:68;;;;1437:126:10;1484:28;1492:9;1484:28;:7;:28::i;4832:642:61:-;4924:18;4956:16;4986:17;5017:15;5070:83;2181:1;2411:2;5070:24;;:35;;:83;;;;;:::i;:::-;5174:24;;5057:96;;-1:-1:-1;5174:81:61;;2237:2;;5174:35;:81::i;:::-;5277:24;;5163:92;;-1:-1:-1;5277:86:61;;2295:3;2472:2;5277:35;:86::i;:::-;5383:24;;5265:98;;-1:-1:-1;5383:84:61;;2352:3;2472:2;5383:35;:84::i;:::-;5373:94;;4832:642;;;;:::o;8082:570::-;8567:78;8588:7;2352:3;2472:2;8567:20;:78::i;:::-;8470:82;8491:9;2295:3;2472:2;8470:20;:82::i;:::-;8379:76;8400:8;2237:2;2411;8379:20;:76::i;:::-;8284:80;8305:10;2181:1;2411:2;8284:20;:80::i;:::-;:171;:268;:361;8245:24;:400;-1:-1:-1;;;;8082:570:61:o;8801:341::-;8887:4;8935:60;8947:47;8935:11;:60::i;:::-;8923:8;:72;8922:163;;;-1:-1:-1;9025:59:61;9037:46;9025:11;:59::i;:::-;9013:8;:71;8922:163;:213;;;;9101:34;9126:8;9101:24;:34::i;1670:3378:10:-;4395:66;1732:18;4383:79;;;4601:66;4595:4;4588:80;4743:1;4737:4;4730:15;2871:2;2904:18;;;2949;;;2876:4;2945:29;;;3747:1;3838:14;2856:18;;;;3827:26;;;;2997:18;;;;3044;;;3040:29;;3859:2;3855:17;3823:50;3737:4;3743:18;;;;;;3733:29;3729:2;3725:38;3802:72;;;;3797:3;3793:82;4810:4;4803:26;1761:14;;;;;5036:3;;5026:14;4847:203:46;5041:1;5023:14;;5022:20;;5003:14;;;4995:48;;4847:203::o;2494:103:29:-;-1:-1:-1;2562:4:29;;2494:103::o;593:257:-1:-;;705:2;693:9;684:7;680:23;676:32;673:2;;;-1:-1;;711:12;673:2;86:6;80:13;7547:5;6133:13;6126:21;7525:5;7522:32;7512:2;;-1:-1;;7558:12;857:239;;960:2;948:9;939:7;935:23;931:32;928:2;;;-1:-1;;966:12;928:2;219:6;206:20;6310:66;7669:5;6299:78;7645:5;7642:34;7632:2;;-1:-1;;7680:12;1103:303;;1238:2;1226:9;1217:7;1213:23;1209:32;1206:2;;;-1:-1;;1244:12;1206:2;379:6;373:13;6580:42;7833:5;6569:54;7788:5;7785:55;7775:2;;-1:-1;;7844:12;1413:366;;;1534:2;1522:9;1513:7;1509:23;1505:32;1502:2;;;-1:-1;;1540:12;1502:2;-1:-1;;523:20;;;1692:2;1731:22;;;523:20;;-1:-1;1496:283::o;2907:387::-;2088:37;;;6310:66;6299:78;3158:2;3149:12;;2383:56;3258:11;;;3049:245::o;3301:222::-;6580:42;6569:54;;;;1857:37;;3428:2;3413:18;;3399:124::o;3530:222::-;2088:37;;;3657:2;3642:18;;3628:124::o;3759:444::-;2088:37;;;6580:42;6569:54;;;4106:2;4091:18;;1857:37;6569:54;4189:2;4174:18;;1857:37;3942:2;3927:18;;3913:290::o;4967:432::-;2088:37;;;6133:13;;6126:21;5302:2;5287:18;;1971:34;5385:2;5370:18;;2088:37;5144:2;5129:18;;5115:284::o;5406:556::-;2088:37;;;5782:2;5767:18;;2088:37;;;;5865:2;5850:18;;2088:37;5948:2;5933:18;;2088:37;5617:3;5602:19;;5588:374::o" + }, + "methodIdentifiers": { + "getActionId(bytes4)": "851c1bb3", + "getAmplificationParameter()": "6daccffa", + "getAuthorizer()": "aaabadc5", + "getOwner()": "893d20e8", + "getVault()": "8d928af8", + "startAmplificationParameterUpdate(uint256,uint256)": "2f1a0bc9", + "stopAmplificationParameterUpdate()": "eb0f24d6" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amplificationParameter\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"currentValue\",\"type\":\"uint256\"}],\"name\":\"AmpUpdateStopped\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmplificationParameter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isUpdating\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"precision\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rawEndValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"startAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAmplificationParameterUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"details\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"startAmplificationParameterUpdate(uint256,uint256)\":{\"details\":\"Begin changing the amplification parameter to `rawEndValue` over time. The value will change linearly until `endTime` is reached, when it will be `rawEndValue`. NOTE: Internally, the amplification parameter is represented using higher precision. The values returned by `getAmplificationParameter` have to be corrected to account for this when comparing to `rawEndValue`.\"},\"stopAmplificationParameterUpdate()\":{\"details\":\"Stops the amplification parameter change process, keeping the current value.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockStablePoolAmplification.sol\":\"MockStablePoolAmplification\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":9999},\"remappings\":[]},\"sources\":{\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol\":{\"keccak256\":\"0x0a18e547a5a02960715d13222c38671444bf2de3153321aaa4c2e1c6a6c3dc86\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://422513642fe275dd59c6bcc04b50eccce31c1bf2e666625ccf95be443726da41\",\"dweb:/ipfs/QmNLsoUmZxWKdgeDTch84hGrgzLsriqJaeNU5NFdRuNAnC\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xfd687ced203d2c6da8189792e1719a5182faf45956129388b231ee76740b99a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://581aa664e84e950cd9bb747bf6022867db63c64f67d9556a86b5f04f871c2c5d\",\"dweb:/ipfs/QmRa6EEV3LXJaHzymztiLqyeAzmE4jAgBEEi3mi8R5cfFa\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol\":{\"keccak256\":\"0x2fe46b13b7c8bfc6f5c539c0b73d6325813f383f551b71fb6bca8dafd06964e1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e651ae7a3a3652c8bb7aaa42c2cce5924310df62a923d9ec50ddb9c850d2995\",\"dweb:/ipfs/QmTHz9y18L5FD7v9GcvxGWSLJuin2KCUEYoARTgz8njce8\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol\":{\"keccak256\":\"0xb3e5b7c63f80b80ef3f0138eac56c397a439bf6b667fc06d5061aa869828b562\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://978d66fba0721a1a67e29a32eaddab8d1f92ab2fb2d611724ea8d0d3c9b0e95b\",\"dweb:/ipfs/QmfG4foZvx3NDZao7d4VvGzL4Uxtk8VWNJXvgo9fiAJxZv\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x19a0628bedbe48178a4c90509a40d750d5039677b964ec533a24361a8d97274b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c55887c89f152f00e5d65389061de28fada0e73eb5f41ebd16a3b8e65846cb1a\",\"dweb:/ipfs/QmNbVtaA44BGvKnKiCT4bEtjZu1ZD5ZJ6XrgBDh5qVEGcP\"]},\"@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol\":{\"keccak256\":\"0xd828a935a72a6d182912abba290e4debb8c684c36fd756088f7acb30e0b2bb76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e6ac013b95e9622917c5ad388dc73f0a389a76341597731746e54547aa9de8a\",\"dweb:/ipfs/QmPB8qWcRPZaDsASgQpf5a6i2YrZ4TDV3Ebi25Mn9EAdf4\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol\":{\"keccak256\":\"0x70ecf1d48c285d78718bd2e159345677038ed8a81c74444bedd6a5c61af9aff6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7c210e449ea5d284abeaaed82e3bb3c203b57d8b3e5dfb6daedf76eaae31d1\",\"dweb:/ipfs/QmfJWLPhCG6PcHNJMLNDbAM6nd2ZVFCexCXvJ9qQmRaNbn\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x792871e208bba1dad291f8d1cffad86f4afa5e2360816bd9c43481f7297155f5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af8ab65258e294c8ba0a5feee91208789f641181d225364b02123d38d9eec7d0\",\"dweb:/ipfs/Qmb5HUXRaSrHJafwK1H8XRjcCTnAZMShTvBNhr1ovA1j2m\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol\":{\"keccak256\":\"0x5370e6567e4765d26437ff0904ae3244e57a19b20155079b34c4c292d003e521\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://309377ce43e8fb09c8ae998612a1556b9b5cbcca2da71dd7c786cf0480f5dc92\",\"dweb:/ipfs/QmeUJKtRBtFdLK7WHbTAMn4ZuBoiSXYX5wZFPZ46oqpkv8\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol\":{\"keccak256\":\"0xa073b9e057a346ac1fdab1b4c348799d199b44daf1553da3fb3301d5c038282b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://640d27c0ea440a2b9fa3312d92d7eb63a68dd1a2ebb76ca0c26920986b05a1d1\",\"dweb:/ipfs/QmRQ7xdHQ7kvfY3XhmRoKVBoUET2V1LRwiN4TGnLy1MZrU\"]},\"@balancer-labs/v2-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0x5c942367601af6fcff9f54774cccd3dc0e72d98becc69e5c0eb6bcf053d486ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://edfe93fb7cc70bac2f5deedfe9558b8f5c07ad94d272d2e16d88948aa46fb713\",\"dweb:/ipfs/QmeCP598vDn6rTHQuWUbUVnHn2y8GJLmtoJwhaga8znHJm\"]},\"@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol\":{\"keccak256\":\"0x84e3f88f972a704cad9cb327f070ca3724a261a4842fed26e5dafff5b05b3f3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://54f854fcfd7bc8a3f16d1038366cd6fc3de6d7ee7e2f08f2122af5adbad22de0\",\"dweb:/ipfs/QmbeVJQ7xx73uBQgyeeoz2uXDmEPF6U2Eb43KaFEVFHqAr\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x1462b53900d425f1c7dcd53d928b6aa5d327cba8fa2bec27720603bb40d9be70\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ad188b1ccd7b1353665228bdc77de9c25e426553f3ec518006aa83d1300b6bf2\",\"dweb:/ipfs/QmaBTVdpM5jSucrVJHU37ZUHdZXEWPYMLkbB6hRiEwHcKN\"]},\"@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0x1ad308f5d6b263fbd039dea4b6136f87bd093877c4f2681736aa46339a597637\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a78dd3e61288d00811884ed98f4598a4567b7ac5fb404efb5494deaeabc2b310\",\"dweb:/ipfs/QmYjEURaDnqquVHk79WkRB8sbqj4RwPYp7ujv8RTXtDAg5\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x1ac831deb4f3dcea6c5f67a2bc83d49a9a7434029a4d6cc386b086a7f8fce369\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://492a6ea2320206e8956c15ebf326de8dbba3c3869014d7de4959bdb856ecd892\",\"dweb:/ipfs/QmSuPXCvQJyTe2YbSE9sgTv64nMuoZrHH7Y2LPG7cVbJG7\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x1ef044eb991d5278b9edfe159e3cd4824733d5ed8e6a9de3f4f57d6bf65be94d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://168d31e5d2a92c9eeb0b50be5fb859d17746ad4ce0ee97552befce65dc6d726a\",\"dweb:/ipfs/QmQLyFUS1PTkkKUKKXU5Z7BoMPoQGdcvgpMUtJ6LaWMjrW\"]},\"@balancer-labs/v2-solidity-utils/contracts/math/Math.sol\":{\"keccak256\":\"0xa50a6030616fb98d27463df96d3bd9386c157ecae82c7a71be7e0b7ba778d02f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51dbb7eeb98561aaf6cf6b48825a64a725f5d1d63cfd888711c4cb1468f52fc4\",\"dweb:/ipfs/Qmc2o8dUCBuu8PxJPrPufHmoZ6DGdMPoaXcruUqr3WuCLA\"]},\"contracts/StableMath.sol\":{\"keccak256\":\"0x82eb1bf7001a58aebbca2fe38952e9c252676e572c4d70b43ddafe6ce7b55d25\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70c3c5819a60435926f99cd6426174407fbb46b59975b8c1b61b0a7352759ee5\",\"dweb:/ipfs/QmYJDeA376HZ86YQMiuBb9cHRnUKrrsrc26fnZDhYT5yZ8\"]},\"contracts/StablePoolAmplification.sol\":{\"keccak256\":\"0x35131a0fda0168332354ea2da753a595cedcdbc2663b83281fb86adbd10e2b15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c4a52f1ed61716bf879e3d232c47060196602de456fced19722bd38e2c967dc\",\"dweb:/ipfs/QmStzAS76tvSSvbofjV8EB9VrbcF7h8DwygTZGpuqzAavm\"]},\"contracts/test/MockStablePoolAmplification.sol\":{\"keccak256\":\"0xd5f039e3822affd6eba58f5e0a98bbe651f8d117bfbbd9ab19300bc2b8b24391\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://47462925f5f120c2abc5266f1ccba55e30b2d4dbb6e067c491e752425927e769\",\"dweb:/ipfs/Qma3MB6VEgBrhe3VAXVPUy7C71Q94uoVUd3ZiBEMko8caA\"]}},\"version\":1}" + } + } + }, + "errors": [ + { + "component": "general", + "errorCode": "5574", + "formattedMessage": "contracts/test/MockComposableStablePool.sol:22:1: Warning: Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\ncontract MockComposableStablePool is ComposableStablePool, MockFailureModes {\n^ (Relevant source part starts here and spans across multiple lines).\n", + "message": "Contract code size exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.", + "severity": "warning", + "sourceLocation": { + "end": 3547, + "file": "contracts/test/MockComposableStablePool.sol", + "start": 862 + }, + "type": "Warning" + } + ], + "sources": { + "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "exportedSymbols": { + "IAuthorizerAdaptor": [ + 28 + ] + }, + "id": 29, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:0" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 2, + "nodeType": "ImportDirective", + "scope": 29, + "sourceUnit": 1023, + "src": "713:55:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "../vault/IVault.sol", + "id": 3, + "nodeType": "ImportDirective", + "scope": 29, + "sourceUnit": 2022, + "src": "769:29:0", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 4, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1022, + "src": "832:15:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1022", + "typeString": "contract IAuthentication" + } + }, + "id": 5, + "nodeType": "InheritanceSpecifier", + "src": "832:15:0" + } + ], + "contractDependencies": [ + 1022 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 28, + "linearizedBaseContracts": [ + 28, + 1022 + ], + "name": "IAuthorizerAdaptor", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 6, + "nodeType": "StructuredDocumentation", + "src": "854:53:0", + "text": " @notice Returns the Balancer Vault" + }, + "functionSelector": "8d928af8", + "id": 11, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7, + "nodeType": "ParameterList", + "parameters": [], + "src": "929:2:0" + }, + "returnParameters": { + "id": 10, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11, + "src": "955:6:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 8, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "955:6:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "954:8:0" + }, + "scope": 28, + "src": "912:51:0", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 12, + "nodeType": "StructuredDocumentation", + "src": "969:49:0", + "text": " @notice Returns the Authorizer" + }, + "functionSelector": "aaabadc5", + "id": 17, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13, + "nodeType": "ParameterList", + "parameters": [], + "src": "1045:2:0" + }, + "returnParameters": { + "id": 16, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17, + "src": "1071:11:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 14, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "1071:11:0", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1070:13:0" + }, + "scope": 28, + "src": "1023:61:0", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 18, + "nodeType": "StructuredDocumentation", + "src": "1090:331:0", + "text": " @notice Performs an arbitrary function call on a target contract, provided the caller is authorized to do so.\n @param target - Address of the contract to be called\n @param data - Calldata to be sent to the target contract\n @return The bytes encoded return value from the performed function call" + }, + "functionSelector": "4036176a", + "id": 27, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "performAction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 23, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 20, + "mutability": "mutable", + "name": "target", + "nodeType": "VariableDeclaration", + "scope": 27, + "src": "1449:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 19, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1449:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 22, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 27, + "src": "1465:19:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 21, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1465:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1448:37:0" + }, + "returnParameters": { + "id": 26, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 25, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 27, + "src": "1512:12:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 24, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1512:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1511:14:0" + }, + "scope": 28, + "src": "1426:100:0", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 29, + "src": "800:728:0" + } + ], + "src": "688:841:0" + }, + "id": 0 + }, + "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol", + "exportedSymbols": { + "StablePoolUserData": [ + 236 + ] + }, + "id": 237, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 30, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:1" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 236, + "linearizedBaseContracts": [ + 236 + ], + "name": "StablePoolUserData", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "StablePoolUserData.JoinKind", + "id": 35, + "members": [ + { + "id": 31, + "name": "INIT", + "nodeType": "EnumValue", + "src": "762:4:1" + }, + { + "id": 32, + "name": "EXACT_TOKENS_IN_FOR_BPT_OUT", + "nodeType": "EnumValue", + "src": "768:27:1" + }, + { + "id": 33, + "name": "TOKEN_IN_FOR_EXACT_BPT_OUT", + "nodeType": "EnumValue", + "src": "797:26:1" + }, + { + "id": 34, + "name": "ALL_TOKENS_IN_FOR_EXACT_BPT_OUT", + "nodeType": "EnumValue", + "src": "825:31:1" + } + ], + "name": "JoinKind", + "nodeType": "EnumDefinition", + "src": "746:112:1" + }, + { + "canonicalName": "StablePoolUserData.ExitKind", + "id": 39, + "members": [ + { + "id": 36, + "name": "EXACT_BPT_IN_FOR_ONE_TOKEN_OUT", + "nodeType": "EnumValue", + "src": "879:30:1" + }, + { + "id": 37, + "name": "BPT_IN_FOR_EXACT_TOKENS_OUT", + "nodeType": "EnumValue", + "src": "911:27:1" + }, + { + "id": 38, + "name": "EXACT_BPT_IN_FOR_ALL_TOKENS_OUT", + "nodeType": "EnumValue", + "src": "940:31:1" + } + ], + "name": "ExitKind", + "nodeType": "EnumDefinition", + "src": "863:110:1" + }, + { + "body": { + "id": 53, + "nodeType": "Block", + "src": "1049:52:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 48, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 41, + "src": "1077:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 49, + "name": "JoinKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "1084:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + } + ], + "id": 50, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1083:10:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + ], + "expression": { + "id": 46, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1066:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 47, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1066:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 51, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1066:28:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "functionReturnParameters": 45, + "id": 52, + "nodeType": "Return", + "src": "1059:35:1" + } + ] + }, + "id": 54, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "joinKind", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 42, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 41, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 54, + "src": "997:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 40, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "997:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "996:19:1" + }, + "returnParameters": { + "id": 45, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 44, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 54, + "src": "1039:8:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "typeName": { + "id": 43, + "name": "JoinKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 35, + "src": "1039:8:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "visibility": "internal" + } + ], + "src": "1038:10:1" + }, + "scope": 236, + "src": "979:122:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 68, + "nodeType": "Block", + "src": "1177:52:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56, + "src": "1205:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 64, + "name": "ExitKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39, + "src": "1212:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + } + ], + "id": 65, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1211:10:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + ], + "expression": { + "id": 61, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1194:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 62, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1194:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 66, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1194:28:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "functionReturnParameters": 60, + "id": 67, + "nodeType": "Return", + "src": "1187:35:1" + } + ] + }, + "id": 69, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exitKind", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 57, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 69, + "src": "1125:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 55, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1125:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1124:19:1" + }, + "returnParameters": { + "id": 60, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 69, + "src": "1167:8:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + }, + "typeName": { + "id": 58, + "name": "ExitKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 39, + "src": "1167:8:1", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "visibility": "internal" + } + ], + "src": "1166:10:1" + }, + "scope": 236, + "src": "1107:122:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 90, + "nodeType": "Block", + "src": "1345:72:1", + "statements": [ + { + "expression": { + "id": 88, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 77, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "1358:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 78, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "1355:13:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(,uint256[] memory)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 81, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 71, + "src": "1382:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 82, + "name": "JoinKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "1389:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + { + "baseExpression": { + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1399:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 83, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1399:7:1", + "typeDescriptions": {} + } + }, + "id": 85, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1399:9:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "type(uint256[] memory)" + } + } + ], + "id": 86, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1388:21:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256[] memory))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256[] memory))" + } + ], + "expression": { + "id": 79, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1371:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 80, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1371:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 87, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1371:39:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_JoinKind_$35_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(enum StablePoolUserData.JoinKind,uint256[] memory)" + } + }, + "src": "1355:55:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 89, + "nodeType": "ExpressionStatement", + "src": "1355:55:1" + } + ] + }, + "id": 91, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "initialAmountsIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 72, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 71, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 91, + "src": "1275:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 70, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1275:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1274:19:1" + }, + "returnParameters": { + "id": 76, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 75, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 91, + "src": "1317:26:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 73, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1317:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 74, + "nodeType": "ArrayTypeName", + "src": "1317:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "1316:28:1" + }, + "scope": 236, + "src": "1249:168:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 117, + "nodeType": "Block", + "src": "1578:98:1", + "statements": [ + { + "expression": { + "id": 115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 101, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 97, + "src": "1591:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 102, + "name": "minBPTAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 99, + "src": "1602:15:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 103, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "1588:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(,uint256[] memory,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 106, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 93, + "src": "1632:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 107, + "name": "JoinKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "1639:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + { + "baseExpression": { + "id": 109, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1649:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 108, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1649:7:1", + "typeDescriptions": {} + } + }, + "id": 110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1649:9:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "type(uint256[] memory)" + } + }, + { + "id": 112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1660:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 111, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1660:7:1", + "typeDescriptions": {} + } + } + ], + "id": 113, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1638:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256[] memory),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256[] memory),type(uint256))" + } + ], + "expression": { + "id": 104, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1621:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 105, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1621:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1621:48:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_JoinKind_$35_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(enum StablePoolUserData.JoinKind,uint256[] memory,uint256)" + } + }, + "src": "1588:81:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 116, + "nodeType": "ExpressionStatement", + "src": "1588:81:1" + } + ] + }, + "id": 118, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exactTokensInForBptOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 94, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 93, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 118, + "src": "1455:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 92, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1455:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1454:19:1" + }, + "returnParameters": { + "id": 100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 97, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 118, + "src": "1521:26:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 95, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1521:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 96, + "nodeType": "ArrayTypeName", + "src": "1521:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 99, + "mutability": "mutable", + "name": "minBPTAmountOut", + "nodeType": "VariableDeclaration", + "scope": 118, + "src": "1549:23:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 98, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1549:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1520:53:1" + }, + "scope": 236, + "src": "1423:253:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 142, + "nodeType": "Block", + "src": "1797:94:1", + "statements": [ + { + "expression": { + "id": 140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 127, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 123, + "src": "1810:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 128, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "1824:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 129, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "1807:28:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_uint256_$_t_uint256_$", + "typeString": "tuple(,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 132, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 120, + "src": "1849:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 133, + "name": "JoinKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "1856:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + { + "id": 135, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1866:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1866:7:1", + "typeDescriptions": {} + } + }, + { + "id": 137, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1875:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 136, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1875:7:1", + "typeDescriptions": {} + } + } + ], + "id": 138, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1855:28:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256),type(uint256))" + } + ], + "expression": { + "id": 130, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1838:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1838:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1838:46:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_JoinKind_$35_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(enum StablePoolUserData.JoinKind,uint256,uint256)" + } + }, + "src": "1807:77:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 141, + "nodeType": "ExpressionStatement", + "src": "1807:77:1" + } + ] + }, + "id": 143, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tokenInForExactBptOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 121, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 120, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 143, + "src": "1713:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 119, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1713:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1712:19:1" + }, + "returnParameters": { + "id": 126, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 123, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 143, + "src": "1755:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1755:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 125, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 143, + "src": "1777:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 124, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1777:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1754:42:1" + }, + "scope": 236, + "src": "1682:209:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 162, + "nodeType": "Block", + "src": "1996:73:1", + "statements": [ + { + "expression": { + "id": 160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 150, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 148, + "src": "2009:12:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 151, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "2006:16:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_uint256_$", + "typeString": "tuple(,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 154, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 145, + "src": "2036:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 155, + "name": "JoinKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 35, + "src": "2043:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + { + "id": 157, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2053:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2053:7:1", + "typeDescriptions": {} + } + } + ], + "id": 158, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2042:19:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_JoinKind_$35_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.JoinKind),type(uint256))" + } + ], + "expression": { + "id": 152, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2025:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 153, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "2025:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2025:37:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_JoinKind_$35_$_t_uint256_$", + "typeString": "tuple(enum StablePoolUserData.JoinKind,uint256)" + } + }, + "src": "2006:56:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 161, + "nodeType": "ExpressionStatement", + "src": "2006:56:1" + } + ] + }, + "id": 163, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allTokensInForExactBptOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 146, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 145, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 163, + "src": "1932:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 144, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1932:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1931:19:1" + }, + "returnParameters": { + "id": 149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 148, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 163, + "src": "1974:20:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 147, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1974:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1973:22:1" + }, + "scope": 236, + "src": "1897:172:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 187, + "nodeType": "Block", + "src": "2203:93:1", + "statements": [ + { + "expression": { + "id": 185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 172, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 168, + "src": "2216:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 173, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 170, + "src": "2229:10:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 174, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "2213:27:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_uint256_$_t_uint256_$", + "typeString": "tuple(,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 177, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 165, + "src": "2254:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 178, + "name": "ExitKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39, + "src": "2261:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + }, + { + "id": 180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2271:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2271:7:1", + "typeDescriptions": {} + } + }, + { + "id": 182, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2280:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 181, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2280:7:1", + "typeDescriptions": {} + } + } + ], + "id": 183, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2260:28:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_ExitKind_$39_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.ExitKind),type(uint256),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_ExitKind_$39_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.ExitKind),type(uint256),type(uint256))" + } + ], + "expression": { + "id": 175, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2243:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 176, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "2243:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2243:46:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_ExitKind_$39_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(enum StablePoolUserData.ExitKind,uint256,uint256)" + } + }, + "src": "2213:76:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 186, + "nodeType": "ExpressionStatement", + "src": "2213:76:1" + } + ] + }, + "id": 188, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exactBptInForTokenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 166, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 165, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 188, + "src": "2120:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 164, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2120:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2119:19:1" + }, + "returnParameters": { + "id": 171, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 168, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 188, + "src": "2162:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2162:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 170, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 188, + "src": "2183:18:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 169, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2183:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2161:41:1" + }, + "scope": 236, + "src": "2089:207:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 207, + "nodeType": "Block", + "src": "2397:72:1", + "statements": [ + { + "expression": { + "id": 205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 195, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 193, + "src": "2410:11:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 196, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "2407:15:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_uint256_$", + "typeString": "tuple(,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 199, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 190, + "src": "2436:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 200, + "name": "ExitKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39, + "src": "2443:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + }, + { + "id": 202, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2453:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 201, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2453:7:1", + "typeDescriptions": {} + } + } + ], + "id": 203, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2442:19:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_ExitKind_$39_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.ExitKind),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_ExitKind_$39_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.ExitKind),type(uint256))" + } + ], + "expression": { + "id": 197, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2425:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "2425:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2425:37:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_ExitKind_$39_$_t_uint256_$", + "typeString": "tuple(enum StablePoolUserData.ExitKind,uint256)" + } + }, + "src": "2407:55:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 206, + "nodeType": "ExpressionStatement", + "src": "2407:55:1" + } + ] + }, + "id": 208, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exactBptInForTokensOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 191, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 190, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 208, + "src": "2334:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 189, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2334:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2333:19:1" + }, + "returnParameters": { + "id": 194, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 193, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 208, + "src": "2376:19:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2376:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2375:21:1" + }, + "scope": 236, + "src": "2302:167:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 234, + "nodeType": "Block", + "src": "2630:98:1", + "statements": [ + { + "expression": { + "id": 232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 218, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 214, + "src": "2643:10:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 219, + "name": "maxBPTAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 216, + "src": "2655:14:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 220, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "2640:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(,uint256[] memory,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 223, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 210, + "src": "2684:4:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 224, + "name": "ExitKind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39, + "src": "2691:8:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + }, + { + "baseExpression": { + "id": 226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2701:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 225, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2701:7:1", + "typeDescriptions": {} + } + }, + "id": 227, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2701:9:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "type(uint256[] memory)" + } + }, + { + "id": 229, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2712:7:1", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 228, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2712:7:1", + "typeDescriptions": {} + } + } + ], + "id": 230, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2690:30:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_ExitKind_$39_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.ExitKind),type(uint256[] memory),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_enum$_ExitKind_$39_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(enum StablePoolUserData.ExitKind),type(uint256[] memory),type(uint256))" + } + ], + "expression": { + "id": 221, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2673:3:1", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 222, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "2673:10:1", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2673:48:1", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_enum$_ExitKind_$39_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(enum StablePoolUserData.ExitKind,uint256[] memory,uint256)" + } + }, + "src": "2640:81:1", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 233, + "nodeType": "ExpressionStatement", + "src": "2640:81:1" + } + ] + }, + "id": 235, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "bptInForExactTokensOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 211, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 210, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 235, + "src": "2507:17:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 209, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2507:5:1", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2506:19:1" + }, + "returnParameters": { + "id": 217, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 214, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 235, + "src": "2573:27:1", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2573:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 213, + "nodeType": "ArrayTypeName", + "src": "2573:9:1", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 216, + "mutability": "mutable", + "name": "maxBPTAmountIn", + "nodeType": "VariableDeclaration", + "scope": 235, + "src": "2602:22:1", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 215, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2602:7:1", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2572:53:1" + }, + "scope": 236, + "src": "2475:253:1", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 237, + "src": "713:2017:1" + } + ], + "src": "688:2043:1" + }, + "id": 1 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol", + "exportedSymbols": { + "BasePoolUserData": [ + 286 + ] + }, + "id": 287, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 238, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:2" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 286, + "linearizedBaseContracts": [ + 286 + ], + "name": "BasePoolUserData", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "functionSelector": "09564cb1", + "id": 241, + "mutability": "constant", + "name": "RECOVERY_MODE_EXIT_KIND", + "nodeType": "VariableDeclaration", + "scope": 286, + "src": "955:51:2", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 239, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "955:5:2", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": { + "hexValue": "323535", + "id": 240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1003:3:2", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "visibility": "public" + }, + { + "body": { + "id": 263, + "nodeType": "Block", + "src": "1146:163:2", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 248, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 243, + "src": "1231:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1231:11:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 250, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1245:1:2", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1231:15:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 254, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 243, + "src": "1261:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1268:5:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + }, + "typeName": { + "id": 255, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1268:5:2", + "typeDescriptions": {} + } + } + ], + "id": 257, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1267:7:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + } + ], + "expression": { + "id": 252, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1250:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 253, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1250:10:2", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1250:25:2", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 259, + "name": "RECOVERY_MODE_EXIT_KIND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 241, + "src": "1279:23:2", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "1250:52:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1231:71:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 247, + "id": 262, + "nodeType": "Return", + "src": "1224:78:2" + } + ] + }, + "id": 264, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isRecoveryModeExitKind", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 244, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 243, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 264, + "src": "1098:17:2", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 242, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1098:5:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1097:19:2" + }, + "returnParameters": { + "id": 247, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 246, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 264, + "src": "1140:4:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 245, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1140:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1139:6:2" + }, + "scope": 286, + "src": "1066:243:2", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 284, + "nodeType": "Block", + "src": "1453:69:2", + "statements": [ + { + "expression": { + "id": 282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "id": 271, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 269, + "src": "1466:11:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 272, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "1463:15:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_uint256_$", + "typeString": "tuple(,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 275, + "name": "self", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 266, + "src": "1492:4:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1499:5:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + }, + "typeName": { + "id": 276, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1499:5:2", + "typeDescriptions": {} + } + }, + { + "id": 279, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1506:7:2", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1506:7:2", + "typeDescriptions": {} + } + } + ], + "id": 280, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1498:16:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_uint8_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(uint8),type(uint256))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_uint8_$_$_t_type$_t_uint256_$_$", + "typeString": "tuple(type(uint8),type(uint256))" + } + ], + "expression": { + "id": 273, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1481:3:2", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 274, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "1481:10:2", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1481:34:2", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint8_$_t_uint256_$", + "typeString": "tuple(uint8,uint256)" + } + }, + "src": "1463:52:2", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 283, + "nodeType": "ExpressionStatement", + "src": "1463:52:2" + } + ] + }, + "id": 285, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "recoveryModeExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 266, + "mutability": "mutable", + "name": "self", + "nodeType": "VariableDeclaration", + "scope": 285, + "src": "1390:17:2", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 265, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1390:5:2", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1389:19:2" + }, + "returnParameters": { + "id": 270, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 269, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 285, + "src": "1432:19:2", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 268, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1432:7:2", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1431:21:2" + }, + "scope": 286, + "src": "1364:158:2", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 287, + "src": "713:811:2" + } + ], + "src": "688:837:2" + }, + "id": 2 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol", + "exportedSymbols": { + "IAssetManager": [ + 368 + ] + }, + "id": 369, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 288, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:3" + }, + { + "id": 289, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:3" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 290, + "nodeType": "ImportDirective", + "scope": 369, + "sourceUnit": 1153, + "src": "747:51:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 368, + "linearizedBaseContracts": [ + 368 + ], + "name": "IAssetManager", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 291, + "nodeType": "StructuredDocumentation", + "src": "830:67:3", + "text": " @notice Emitted when asset manager is rebalanced" + }, + "id": 295, + "name": "Rebalance", + "nodeType": "EventDefinition", + "parameters": { + "id": 294, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 293, + "indexed": false, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 295, + "src": "918:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 292, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "918:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "917:16:3" + }, + "src": "902:32:3" + }, + { + "documentation": { + "id": 296, + "nodeType": "StructuredDocumentation", + "src": "940:42:3", + "text": " @notice Sets the config" + }, + "functionSelector": "18e736d4", + "id": 303, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setConfig", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 298, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 303, + "src": "1006:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 297, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1006:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 300, + "mutability": "mutable", + "name": "config", + "nodeType": "VariableDeclaration", + "scope": 303, + "src": "1022:21:3", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 299, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1022:5:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1005:39:3" + }, + "returnParameters": { + "id": 302, + "nodeType": "ParameterList", + "parameters": [], + "src": "1053:0:3" + }, + "scope": 368, + "src": "987:67:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 304, + "nodeType": "StructuredDocumentation", + "src": "1246:60:3", + "text": " @notice Returns the asset manager's token" + }, + "functionSelector": "21df0da7", + "id": 309, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 305, + "nodeType": "ParameterList", + "parameters": [], + "src": "1328:2:3" + }, + "returnParameters": { + "id": 308, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 307, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 309, + "src": "1354:6:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 306, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1354:6:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1353:8:3" + }, + "scope": 368, + "src": "1311:51:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 310, + "nodeType": "StructuredDocumentation", + "src": "1368:84:3", + "text": " @return the current assets under management of this asset manager" + }, + "functionSelector": "dc99fc21", + "id": 317, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAUM", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 312, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 317, + "src": "1473:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 311, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1473:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1472:16:3" + }, + "returnParameters": { + "id": 316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 315, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 317, + "src": "1512:7:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 314, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1512:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1511:9:3" + }, + "scope": 368, + "src": "1457:64:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 318, + "nodeType": "StructuredDocumentation", + "src": "1527:149:3", + "text": " @return poolCash - The up-to-date cash balance of the pool\n @return poolManaged - The up-to-date managed balance of the pool" + }, + "functionSelector": "76bad529", + "id": 327, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolBalances", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 320, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 327, + "src": "1706:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 319, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1706:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1705:16:3" + }, + "returnParameters": { + "id": 326, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 323, + "mutability": "mutable", + "name": "poolCash", + "nodeType": "VariableDeclaration", + "scope": 327, + "src": "1745:16:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 322, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1745:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 325, + "mutability": "mutable", + "name": "poolManaged", + "nodeType": "VariableDeclaration", + "scope": 327, + "src": "1763:19:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 324, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1763:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1744:39:3" + }, + "scope": 368, + "src": "1681:103:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 328, + "nodeType": "StructuredDocumentation", + "src": "1790:161:3", + "text": " @return The difference in tokens between the target investment\n and the currently invested amount (i.e. the amount that can be invested)" + }, + "functionSelector": "ea748923", + "id": 335, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "maxInvestableBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 330, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 335, + "src": "1986:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 329, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1986:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1985:16:3" + }, + "returnParameters": { + "id": 334, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 333, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 335, + "src": "2025:6:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 332, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2025:6:3", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "2024:8:3" + }, + "scope": 368, + "src": "1956:77:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 336, + "nodeType": "StructuredDocumentation", + "src": "2039:90:3", + "text": " @notice Updates the Vault on the value of the pool's investment returns" + }, + "functionSelector": "0b5ff6b9", + "id": 341, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "updateBalanceOfPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 339, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 338, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 341, + "src": "2163:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 337, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2163:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2162:16:3" + }, + "returnParameters": { + "id": 340, + "nodeType": "ParameterList", + "parameters": [], + "src": "2187:0:3" + }, + "scope": 368, + "src": "2134:54:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 342, + "nodeType": "StructuredDocumentation", + "src": "2194:99:3", + "text": " @notice Determines whether the pool should rebalance given the provided balances" + }, + "functionSelector": "9c64ad30", + "id": 351, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "shouldRebalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 344, + "mutability": "mutable", + "name": "cash", + "nodeType": "VariableDeclaration", + "scope": 351, + "src": "2323:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 343, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2323:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 346, + "mutability": "mutable", + "name": "managed", + "nodeType": "VariableDeclaration", + "scope": 351, + "src": "2337:15:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2337:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2322:31:3" + }, + "returnParameters": { + "id": 350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 349, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 351, + "src": "2377:4:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 348, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2377:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2376:6:3" + }, + "scope": 368, + "src": "2298:85:3", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 352, + "nodeType": "StructuredDocumentation", + "src": "2389:304:3", + "text": " @notice Rebalances funds between the pool and the asset manager to maintain target investment percentage.\n @param poolId - the poolId of the pool to be rebalanced\n @param force - a boolean representing whether a rebalance should be forced even when the pool is near balance" + }, + "functionSelector": "4c936d8a", + "id": 359, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "rebalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 357, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 354, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 359, + "src": "2717:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 353, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2717:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 356, + "mutability": "mutable", + "name": "force", + "nodeType": "VariableDeclaration", + "scope": 359, + "src": "2733:10:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 355, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2733:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2716:28:3" + }, + "returnParameters": { + "id": 358, + "nodeType": "ParameterList", + "parameters": [], + "src": "2753:0:3" + }, + "scope": 368, + "src": "2698:56:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 360, + "nodeType": "StructuredDocumentation", + "src": "2760:253:3", + "text": " @notice allows an authorized rebalancer to remove capital to facilitate large withdrawals\n @param poolId - the poolId of the pool to withdraw funds back to\n @param amount - the amount of tokens to withdraw back to the pool" + }, + "functionSelector": "2b13a509", + "id": 367, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "capitalOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 365, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 362, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 367, + "src": "3038:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 361, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3038:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 364, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 367, + "src": "3054:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3054:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3037:32:3" + }, + "returnParameters": { + "id": 366, + "nodeType": "ParameterList", + "parameters": [], + "src": "3078:0:3" + }, + "scope": 368, + "src": "3018:61:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 369, + "src": "800:2281:3" + } + ], + "src": "688:2394:3" + }, + "id": 3 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol", + "exportedSymbols": { + "IBasePoolFactory": [ + 393 + ] + }, + "id": 394, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 370, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:4" + }, + { + "id": 371, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:4" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 372, + "nodeType": "ImportDirective", + "scope": 394, + "sourceUnit": 1023, + "src": "747:55:4", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 373, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1022, + "src": "834:15:4", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1022", + "typeString": "contract IAuthentication" + } + }, + "id": 374, + "nodeType": "InheritanceSpecifier", + "src": "834:15:4" + } + ], + "contractDependencies": [ + 1022 + ], + "contractKind": "interface", + "fullyImplemented": false, + "id": 393, + "linearizedBaseContracts": [ + 393, + 1022 + ], + "name": "IBasePoolFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 375, + "nodeType": "StructuredDocumentation", + "src": "856:75:4", + "text": " @dev Returns true if `pool` was created by this factory." + }, + "functionSelector": "6634b753", + "id": 382, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isPoolFromFactory", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 378, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 377, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 382, + "src": "963:12:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 376, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "963:7:4", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "962:14:4" + }, + "returnParameters": { + "id": 381, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 380, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 382, + "src": "1000:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 379, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1000:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "999:6:4" + }, + "scope": 393, + "src": "936:70:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 383, + "nodeType": "StructuredDocumentation", + "src": "1012:76:4", + "text": " @dev Check whether the derived factory has been disabled." + }, + "functionSelector": "6c57f5a9", + "id": 388, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isDisabled", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 384, + "nodeType": "ParameterList", + "parameters": [], + "src": "1112:2:4" + }, + "returnParameters": { + "id": 387, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 386, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 388, + "src": "1138:4:4", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 385, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1138:4:4", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1137:6:4" + }, + "scope": 393, + "src": "1093:51:4", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 389, + "nodeType": "StructuredDocumentation", + "src": "1150:182:4", + "text": " @dev Disable the factory, preventing the creation of more pools. Already existing pools are unaffected.\n Once a factory is disabled, it cannot be re-enabled." + }, + "functionSelector": "2f2770db", + "id": 392, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "disable", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 390, + "nodeType": "ParameterList", + "parameters": [], + "src": "1353:2:4" + }, + "returnParameters": { + "id": 391, + "nodeType": "ParameterList", + "parameters": [], + "src": "1364:0:4" + }, + "scope": 393, + "src": "1337:28:4", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 394, + "src": "804:563:4" + } + ], + "src": "688:680:4" + }, + "id": 4 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol", + "exportedSymbols": { + "IControlledPool": [ + 409 + ] + }, + "id": 410, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 395, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:5" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 396, + "nodeType": "ImportDirective", + "scope": 410, + "sourceUnit": 1153, + "src": "713:51:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 409, + "linearizedBaseContracts": [ + 409 + ], + "name": "IControlledPool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "38e9922e", + "id": 401, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 398, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 401, + "src": "828:25:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 397, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "828:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "827:27:5" + }, + "returnParameters": { + "id": 400, + "nodeType": "ParameterList", + "parameters": [], + "src": "863:0:5" + }, + "scope": 409, + "src": "798:66:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "50dd6ed9", + "id": 408, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setAssetManagerPoolConfig", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 406, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 403, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 408, + "src": "905:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 402, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "905:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 405, + "mutability": "mutable", + "name": "poolConfig", + "nodeType": "VariableDeclaration", + "scope": 408, + "src": "919:23:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 404, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "919:5:5", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "904:39:5" + }, + "returnParameters": { + "id": 407, + "nodeType": "ParameterList", + "parameters": [], + "src": "952:0:5" + }, + "scope": 409, + "src": "870:83:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 410, + "src": "766:189:5" + } + ], + "src": "688:268:5" + }, + "id": 5 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol", + "exportedSymbols": { + "IPoolVersion": [ + 419 + ] + }, + "id": 420, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 411, + "literals": [ + "solidity", + ">=", + "0.7", + ".0", + "<", + "0.9", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:31:6" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 412, + "nodeType": "StructuredDocumentation", + "src": "721:96:6", + "text": " @notice Simple interface to retrieve the version of pools deployed by a pool factory." + }, + "fullyImplemented": false, + "id": 419, + "linearizedBaseContracts": [ + 419 + ], + "name": "IPoolVersion", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 413, + "nodeType": "StructuredDocumentation", + "src": "847:339:6", + "text": " @dev Returns a JSON representation of the deployed pool version containing name, version number and task ID.\n This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about\n each other. Note that this value will only be updated at factory creation time." + }, + "functionSelector": "3f819b6f", + "id": 418, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolVersion", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 414, + "nodeType": "ParameterList", + "parameters": [], + "src": "1214:2:6" + }, + "returnParameters": { + "id": 417, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 416, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 418, + "src": "1240:13:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 415, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1240:6:6", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1239:15:6" + }, + "scope": 419, + "src": "1191:64:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 420, + "src": "818:439:6" + } + ], + "src": "688:570:6" + }, + "id": 6 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "exportedSymbols": { + "IRateProvider": [ + 428 + ] + }, + "id": 429, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 421, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:7" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 428, + "linearizedBaseContracts": [ + 428 + ], + "name": "IRateProvider", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 422, + "nodeType": "StructuredDocumentation", + "src": "743:191:7", + "text": " @dev Returns an 18 decimal fixed point number that is the exchange rate of the token to some other underlying\n token. The meaning of this rate depends on the context." + }, + "functionSelector": "679aefce", + "id": 427, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 423, + "nodeType": "ParameterList", + "parameters": [], + "src": "955:2:7" + }, + "returnParameters": { + "id": 426, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 425, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 427, + "src": "981:7:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 424, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "981:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "980:9:7" + }, + "scope": 428, + "src": "939:51:7", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 429, + "src": "713:279:7" + } + ], + "src": "688:305:7" + }, + "id": 7 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol", + "exportedSymbols": { + "IRecoveryMode": [ + 451 + ] + }, + "id": 452, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 430, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:8" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 431, + "nodeType": "StructuredDocumentation", + "src": "713:54:8", + "text": " @dev Interface for the RecoveryMode module." + }, + "fullyImplemented": false, + "id": 451, + "linearizedBaseContracts": [ + 451 + ], + "name": "IRecoveryMode", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 432, + "nodeType": "StructuredDocumentation", + "src": "798:70:8", + "text": " @dev Emitted when the Recovery Mode status changes." + }, + "id": 436, + "name": "RecoveryModeStateChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 435, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 434, + "indexed": false, + "mutability": "mutable", + "name": "enabled", + "nodeType": "VariableDeclaration", + "scope": 436, + "src": "904:12:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 433, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "904:4:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "903:14:8" + }, + "src": "873:45:8" + }, + { + "documentation": { + "id": 437, + "nodeType": "StructuredDocumentation", + "src": "924:198:8", + "text": " @notice Enables Recovery Mode in the Pool, disabling protocol fee collection and allowing for safe proportional\n exits with low computational complexity and no dependencies." + }, + "functionSelector": "54a844ba", + "id": 440, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "enableRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 438, + "nodeType": "ParameterList", + "parameters": [], + "src": "1154:2:8" + }, + "returnParameters": { + "id": 439, + "nodeType": "ParameterList", + "parameters": [], + "src": "1165:0:8" + }, + "scope": 451, + "src": "1127:39:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 441, + "nodeType": "StructuredDocumentation", + "src": "1172:132:8", + "text": " @notice Disables Recovery Mode in the Pool, restoring protocol fee collection and disallowing proportional exits." + }, + "functionSelector": "b7b814fc", + "id": 444, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "disableRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 442, + "nodeType": "ParameterList", + "parameters": [], + "src": "1337:2:8" + }, + "returnParameters": { + "id": 443, + "nodeType": "ParameterList", + "parameters": [], + "src": "1348:0:8" + }, + "scope": 451, + "src": "1309:40:8", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 445, + "nodeType": "StructuredDocumentation", + "src": "1355:72:8", + "text": " @notice Returns true if the Pool is in Recovery Mode." + }, + "functionSelector": "b35056b8", + "id": 450, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "inRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 446, + "nodeType": "ParameterList", + "parameters": [], + "src": "1455:2:8" + }, + "returnParameters": { + "id": 449, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 448, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 450, + "src": "1481:4:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 447, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1481:4:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1480:6:8" + }, + "scope": 451, + "src": "1432:55:8", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 452, + "src": "768:721:8" + } + ], + "src": "688:802:8" + }, + "id": 8 + }, + "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol", + "exportedSymbols": { + "IVersion": [ + 461 + ] + }, + "id": 462, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 453, + "literals": [ + "solidity", + ">=", + "0.7", + ".0", + "<", + "0.9", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:31:9" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 454, + "nodeType": "StructuredDocumentation", + "src": "721:83:9", + "text": " @notice Simple interface to retrieve the version of a deployed contract." + }, + "fullyImplemented": false, + "id": 461, + "linearizedBaseContracts": [ + 461 + ], + "name": "IVersion", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 455, + "nodeType": "StructuredDocumentation", + "src": "830:122:9", + "text": " @dev Returns a JSON representation of the contract version containing name, version number and task ID." + }, + "functionSelector": "54fd4d50", + "id": 460, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 456, + "nodeType": "ParameterList", + "parameters": [], + "src": "973:2:9" + }, + "returnParameters": { + "id": 459, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 458, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 460, + "src": "999:13:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 457, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "999:6:9", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "998:15:9" + }, + "scope": 461, + "src": "957:57:9", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 462, + "src": "805:211:9" + } + ], + "src": "688:329:9" + }, + "id": 9 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "exportedSymbols": { + "Errors": [ + 1011 + ], + "_require": [ + 479, + 498 + ], + "_revert": [ + 510, + 530 + ] + }, + "id": 1012, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 463, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:10" + }, + { + "body": { + "id": 478, + "nodeType": "Block", + "src": "976:43:10", + "statements": [ + { + "condition": { + "id": 472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "986:10:10", + "subExpression": { + "id": 471, + "name": "condition", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 466, + "src": "987:9:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 477, + "nodeType": "IfStatement", + "src": "982:34:10", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 474, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 468, + "src": "1006:9:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 473, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "998:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "998:18:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 476, + "nodeType": "ExpressionStatement", + "src": "998:18:10" + } + } + ] + }, + "documentation": { + "id": 464, + "nodeType": "StructuredDocumentation", + "src": "733:184:10", + "text": " @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n supported.\n Uses the default 'BAL' prefix for the error code" + }, + "id": 479, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_require", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 469, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 466, + "mutability": "mutable", + "name": "condition", + "nodeType": "VariableDeclaration", + "scope": 479, + "src": "936:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 465, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "936:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 468, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 479, + "src": "952:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 467, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "952:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "935:35:10" + }, + "returnParameters": { + "id": 470, + "nodeType": "ParameterList", + "parameters": [], + "src": "976:0:10" + }, + "scope": 1012, + "src": "918:101:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 497, + "nodeType": "Block", + "src": "1227:51:10", + "statements": [ + { + "condition": { + "id": 490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1237:10:10", + "subExpression": { + "id": 489, + "name": "condition", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "1238:9:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 496, + "nodeType": "IfStatement", + "src": "1233:42:10", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 492, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "1257:9:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 493, + "name": "prefix", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 486, + "src": "1268:6:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + } + ], + "id": 491, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 530, + "src": "1249:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_bytes3_$returns$__$", + "typeString": "function (uint256,bytes3) pure" + } + }, + "id": 494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1249:26:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 495, + "nodeType": "ExpressionStatement", + "src": "1249:26:10" + } + } + ] + }, + "documentation": { + "id": 480, + "nodeType": "StructuredDocumentation", + "src": "1021:132:10", + "text": " @dev Reverts if `condition` is false, with a revert reason containing `errorCode`. Only codes up to 999 are\n supported." + }, + "id": 498, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_require", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 487, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 482, + "mutability": "mutable", + "name": "condition", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "1172:14:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 481, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1172:4:10", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 484, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "1188:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 483, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1188:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 486, + "mutability": "mutable", + "name": "prefix", + "nodeType": "VariableDeclaration", + "scope": 498, + "src": "1207:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + }, + "typeName": { + "id": 485, + "name": "bytes3", + "nodeType": "ElementaryTypeName", + "src": "1207:6:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + } + }, + "visibility": "internal" + } + ], + "src": "1171:50:10" + }, + "returnParameters": { + "id": 488, + "nodeType": "ParameterList", + "parameters": [], + "src": "1227:0:10" + }, + "scope": 1012, + "src": "1154:124:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 509, + "nodeType": "Block", + "src": "1478:85:10", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 505, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "1492:9:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "3078343234313463", + "id": 506, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1503:8:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_4342092_by_1", + "typeString": "int_const 4342092" + }, + "value": "0x42414c" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_4342092_by_1", + "typeString": "int_const 4342092" + } + ], + "id": 504, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 530, + "src": "1484:7:10", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_bytes3_$returns$__$", + "typeString": "function (uint256,bytes3) pure" + } + }, + "id": 507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1484:28:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 508, + "nodeType": "ExpressionStatement", + "src": "1484:28:10" + } + ] + }, + "documentation": { + "id": 499, + "nodeType": "StructuredDocumentation", + "src": "1280:156:10", + "text": " @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported.\n Uses the default 'BAL' prefix for the error code" + }, + "id": 510, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_revert", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 502, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 501, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 510, + "src": "1454:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 500, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1454:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1453:19:10" + }, + "returnParameters": { + "id": 503, + "nodeType": "ParameterList", + "parameters": [], + "src": "1478:0:10" + }, + "scope": 1012, + "src": "1437:126:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 529, + "nodeType": "Block", + "src": "1726:3322:10", + "statements": [ + { + "assignments": [ + 519 + ], + "declarations": [ + { + "constant": false, + "id": 519, + "mutability": "mutable", + "name": "prefixUint", + "nodeType": "VariableDeclaration", + "scope": 529, + "src": "1732:18:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 518, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1732:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 527, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 524, + "name": "prefix", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 515, + "src": "1768:6:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + } + ], + "id": 523, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1761:6:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint24_$", + "typeString": "type(uint24)" + }, + "typeName": { + "id": 522, + "name": "uint24", + "nodeType": "ElementaryTypeName", + "src": "1761:6:10", + "typeDescriptions": {} + } + }, + "id": 525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1761:14:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint24", + "typeString": "uint24" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint24", + "typeString": "uint24" + } + ], + "id": 521, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1753:7:10", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 520, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1753:7:10", + "typeDescriptions": {} + } + }, + "id": 526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1753:23:10", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1732:44:10" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "2565:2481:10", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2839:42:10", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2860:9:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2871:2:10", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "2856:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "2856:18:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2876:4:10", + "type": "", + "value": "0x30" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2852:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "2852:29:10" + }, + "variables": [ + { + "name": "units", + "nodeType": "YulTypedName", + "src": "2843:5:10", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2891:31:10", + "value": { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2908:9:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2919:2:10", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "2904:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "2904:18:10" + }, + "variableNames": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2891:9:10" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2931:43:10", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2953:9:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2964:2:10", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "2949:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "2949:18:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2969:4:10", + "type": "", + "value": "0x30" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2945:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "2945:29:10" + }, + "variables": [ + { + "name": "tenths", + "nodeType": "YulTypedName", + "src": "2935:6:10", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2984:31:10", + "value": { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "3001:9:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3012:2:10", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "div", + "nodeType": "YulIdentifier", + "src": "2997:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "2997:18:10" + }, + "variableNames": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "2984:9:10" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3024:45:10", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "errorCode", + "nodeType": "YulIdentifier", + "src": "3048:9:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3059:2:10", + "type": "", + "value": "10" + } + ], + "functionName": { + "name": "mod", + "nodeType": "YulIdentifier", + "src": "3044:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3044:18:10" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3064:4:10", + "type": "", + "value": "0x30" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3040:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3040:29:10" + }, + "variables": [ + { + "name": "hundreds", + "nodeType": "YulTypedName", + "src": "3028:8:10", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3702:61:10", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3729:2:10", + "type": "", + "value": "24" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3737:4:10", + "type": "", + "value": "0x23" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3747:1:10", + "type": "", + "value": "8" + }, + { + "name": "prefixUint", + "nodeType": "YulIdentifier", + "src": "3750:10:10" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3743:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3743:18:10" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3733:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3733:29:10" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3725:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3725:38:10" + }, + "variables": [ + { + "name": "formattedPrefix", + "nodeType": "YulTypedName", + "src": "3706:15:10", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3773:102:10", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3797:3:10", + "type": "", + "value": "200" + }, + { + "arguments": [ + { + "name": "formattedPrefix", + "nodeType": "YulIdentifier", + "src": "3806:15:10" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "units", + "nodeType": "YulIdentifier", + "src": "3831:5:10" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3842:1:10", + "type": "", + "value": "8" + }, + { + "name": "tenths", + "nodeType": "YulIdentifier", + "src": "3845:6:10" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3838:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3838:14:10" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3827:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3827:26:10" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3859:2:10", + "type": "", + "value": "16" + }, + { + "name": "hundreds", + "nodeType": "YulIdentifier", + "src": "3863:8:10" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3855:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3855:17:10" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3823:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3823:50:10" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3802:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3802:72:10" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "3793:3:10" + }, + "nodeType": "YulFunctionCall", + "src": "3793:82:10" + }, + "variables": [ + { + "name": "revertReason", + "nodeType": "YulTypedName", + "src": "3777:12:10", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4390:3:10", + "type": "", + "value": "0x0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4395:66:10", + "type": "", + "value": "0x08c379a000000000000000000000000000000000000000000000000000000000" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4383:6:10" + }, + "nodeType": "YulFunctionCall", + "src": "4383:79:10" + }, + "nodeType": "YulExpressionStatement", + "src": "4383:79:10" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4595:4:10", + "type": "", + "value": "0x04" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4601:66:10", + "type": "", + "value": "0x0000000000000000000000000000000000000000000000000000000000000020" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4588:6:10" + }, + "nodeType": "YulFunctionCall", + "src": "4588:80:10" + }, + "nodeType": "YulExpressionStatement", + "src": "4588:80:10" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4737:4:10", + "type": "", + "value": "0x24" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4743:1:10", + "type": "", + "value": "7" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4730:6:10" + }, + "nodeType": "YulFunctionCall", + "src": "4730:15:10" + }, + "nodeType": "YulExpressionStatement", + "src": "4730:15:10" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4810:4:10", + "type": "", + "value": "0x44" + }, + { + "name": "revertReason", + "nodeType": "YulIdentifier", + "src": "4816:12:10" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4803:6:10" + }, + "nodeType": "YulFunctionCall", + "src": "4803:26:10" + }, + "nodeType": "YulExpressionStatement", + "src": "4803:26:10" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5033:1:10", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5036:3:10", + "type": "", + "value": "100" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5026:6:10" + }, + "nodeType": "YulFunctionCall", + "src": "5026:14:10" + }, + "nodeType": "YulExpressionStatement", + "src": "5026:14:10" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "2860:9:10", + "valueSize": 1 + }, + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "2891:9:10", + "valueSize": 1 + }, + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "2908:9:10", + "valueSize": 1 + }, + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "2953:9:10", + "valueSize": 1 + }, + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "2984:9:10", + "valueSize": 1 + }, + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "3001:9:10", + "valueSize": 1 + }, + { + "declaration": 513, + "isOffset": false, + "isSlot": false, + "src": "3048:9:10", + "valueSize": 1 + }, + { + "declaration": 519, + "isOffset": false, + "isSlot": false, + "src": "3750:10:10", + "valueSize": 1 + } + ], + "id": 528, + "nodeType": "InlineAssembly", + "src": "2556:2490:10" + } + ] + }, + "documentation": { + "id": 511, + "nodeType": "StructuredDocumentation", + "src": "1565:104:10", + "text": " @dev Reverts with a revert reason containing `errorCode`. Only codes up to 999 are supported." + }, + "id": 530, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_revert", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 516, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 513, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 530, + "src": "1687:17:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 512, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1687:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 515, + "mutability": "mutable", + "name": "prefix", + "nodeType": "VariableDeclaration", + "scope": 530, + "src": "1706:13:10", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + }, + "typeName": { + "id": 514, + "name": "bytes3", + "nodeType": "ElementaryTypeName", + "src": "1706:6:10", + "typeDescriptions": { + "typeIdentifier": "t_bytes3", + "typeString": "bytes3" + } + }, + "visibility": "internal" + } + ], + "src": "1686:34:10" + }, + "returnParameters": { + "id": 517, + "nodeType": "ParameterList", + "parameters": [], + "src": "1726:0:10" + }, + "scope": 1012, + "src": "1670:3378:10", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 1011, + "linearizedBaseContracts": [ + 1011 + ], + "name": "Errors", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 533, + "mutability": "constant", + "name": "ADD_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5083:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 531, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5083:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "30", + "id": 532, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5124:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 536, + "mutability": "constant", + "name": "SUB_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5131:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 534, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5131:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 535, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5172:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 539, + "mutability": "constant", + "name": "SUB_UNDERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5179:43:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 537, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5179:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 538, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5221:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 542, + "mutability": "constant", + "name": "MUL_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5228:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 540, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5228:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "33", + "id": 541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5269:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 545, + "mutability": "constant", + "name": "ZERO_DIVISION", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5276:43:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 543, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5276:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "34", + "id": 544, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5318:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 548, + "mutability": "constant", + "name": "DIV_INTERNAL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5325:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 546, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5325:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "35", + "id": 547, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5366:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 551, + "mutability": "constant", + "name": "X_OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5373:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 549, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5373:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "36", + "id": 550, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5417:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 554, + "mutability": "constant", + "name": "Y_OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5424:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 552, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5424:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "37", + "id": 553, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5468:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 557, + "mutability": "constant", + "name": "PRODUCT_OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5475:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 555, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5475:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "38", + "id": 556, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5525:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 560, + "mutability": "constant", + "name": "INVALID_EXPONENT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5532:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 558, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5532:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "39", + "id": 559, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5577:1:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 563, + "mutability": "constant", + "name": "OUT_OF_BOUNDS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5598:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 561, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5598:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313030", + "id": 562, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5640:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 566, + "mutability": "constant", + "name": "UNSORTED_ARRAY", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5649:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 564, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5649:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313031", + "id": 565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5692:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_101_by_1", + "typeString": "int_const 101" + }, + "value": "101" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 569, + "mutability": "constant", + "name": "UNSORTED_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5701:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 567, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5701:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313032", + "id": 568, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5745:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_102_by_1", + "typeString": "int_const 102" + }, + "value": "102" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 572, + "mutability": "constant", + "name": "INPUT_LENGTH_MISMATCH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5754:53:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 570, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5754:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313033", + "id": 571, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5804:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_103_by_1", + "typeString": "int_const 103" + }, + "value": "103" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 575, + "mutability": "constant", + "name": "ZERO_TOKEN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5813:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 573, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5813:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313034", + "id": 574, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5852:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_104_by_1", + "typeString": "int_const 104" + }, + "value": "104" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 578, + "mutability": "constant", + "name": "MIN_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5882:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 576, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5882:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323030", + "id": 577, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5921:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_200_by_1", + "typeString": "int_const 200" + }, + "value": "200" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 581, + "mutability": "constant", + "name": "MAX_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5930:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 579, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5930:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323031", + "id": 580, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5969:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_201_by_1", + "typeString": "int_const 201" + }, + "value": "201" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 584, + "mutability": "constant", + "name": "MAX_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "5978:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 582, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5978:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323032", + "id": 583, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6030:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_202_by_1", + "typeString": "int_const 202" + }, + "value": "202" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 587, + "mutability": "constant", + "name": "MIN_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6039:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 585, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6039:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323033", + "id": 586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6091:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_203_by_1", + "typeString": "int_const 203" + }, + "value": "203" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 590, + "mutability": "constant", + "name": "MINIMUM_BPT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6100:43:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 588, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6100:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323034", + "id": 589, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6140:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_204_by_1", + "typeString": "int_const 204" + }, + "value": "204" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 593, + "mutability": "constant", + "name": "CALLER_NOT_VAULT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6149:48:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 591, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6149:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323035", + "id": 592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6194:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_205_by_1", + "typeString": "int_const 205" + }, + "value": "205" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 596, + "mutability": "constant", + "name": "UNINITIALIZED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6203:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 594, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6203:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323036", + "id": 595, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6245:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_206_by_1", + "typeString": "int_const 206" + }, + "value": "206" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 599, + "mutability": "constant", + "name": "BPT_IN_MAX_AMOUNT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6254:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 597, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6254:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323037", + "id": 598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6300:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_207_by_1", + "typeString": "int_const 207" + }, + "value": "207" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 602, + "mutability": "constant", + "name": "BPT_OUT_MIN_AMOUNT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6309:50:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 600, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6309:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323038", + "id": 601, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6356:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_208_by_1", + "typeString": "int_const 208" + }, + "value": "208" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 605, + "mutability": "constant", + "name": "EXPIRED_PERMIT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6365:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 603, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6365:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323039", + "id": 604, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6408:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_209_by_1", + "typeString": "int_const 209" + }, + "value": "209" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 608, + "mutability": "constant", + "name": "NOT_TWO_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6417:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 606, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6417:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323130", + "id": 607, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6460:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_210_by_1", + "typeString": "int_const 210" + }, + "value": "210" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 611, + "mutability": "constant", + "name": "DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6469:40:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 609, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6469:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323131", + "id": 610, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6506:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_211_by_1", + "typeString": "int_const 211" + }, + "value": "211" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 614, + "mutability": "constant", + "name": "MIN_AMP", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6529:39:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 612, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6529:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333030", + "id": 613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6565:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_300_by_1", + "typeString": "int_const 300" + }, + "value": "300" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 617, + "mutability": "constant", + "name": "MAX_AMP", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6574:39:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 615, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6574:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333031", + "id": 616, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6610:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_301_by_1", + "typeString": "int_const 301" + }, + "value": "301" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 620, + "mutability": "constant", + "name": "MIN_WEIGHT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6619:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 618, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6619:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333032", + "id": 619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6658:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_302_by_1", + "typeString": "int_const 302" + }, + "value": "302" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 623, + "mutability": "constant", + "name": "MAX_STABLE_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6667:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 621, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6667:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333033", + "id": 622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6713:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_303_by_1", + "typeString": "int_const 303" + }, + "value": "303" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 626, + "mutability": "constant", + "name": "MAX_IN_RATIO", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6722:44:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 624, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6722:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333034", + "id": 625, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6763:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_304_by_1", + "typeString": "int_const 304" + }, + "value": "304" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 629, + "mutability": "constant", + "name": "MAX_OUT_RATIO", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6772:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 627, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6772:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333035", + "id": 628, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6814:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_305_by_1", + "typeString": "int_const 305" + }, + "value": "305" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 632, + "mutability": "constant", + "name": "MIN_BPT_IN_FOR_TOKEN_OUT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6823:56:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 630, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6823:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333036", + "id": 631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6876:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_306_by_1", + "typeString": "int_const 306" + }, + "value": "306" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 635, + "mutability": "constant", + "name": "MAX_OUT_BPT_FOR_TOKEN_IN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6885:56:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 633, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6885:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333037", + "id": 634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6938:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_307_by_1", + "typeString": "int_const 307" + }, + "value": "307" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 638, + "mutability": "constant", + "name": "NORMALIZED_WEIGHT_INVARIANT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "6947:59:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 636, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6947:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333038", + "id": 637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7003:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_308_by_1", + "typeString": "int_const 308" + }, + "value": "308" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 641, + "mutability": "constant", + "name": "INVALID_TOKEN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7012:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 639, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7012:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333039", + "id": 640, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7054:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_309_by_1", + "typeString": "int_const 309" + }, + "value": "309" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 644, + "mutability": "constant", + "name": "UNHANDLED_JOIN_KIND", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7063:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 642, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7063:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333130", + "id": 643, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7111:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_310_by_1", + "typeString": "int_const 310" + }, + "value": "310" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 647, + "mutability": "constant", + "name": "ZERO_INVARIANT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7120:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 645, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7120:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333131", + "id": 646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7163:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_311_by_1", + "typeString": "int_const 311" + }, + "value": "311" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 650, + "mutability": "constant", + "name": "ORACLE_INVALID_SECONDS_QUERY", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7172:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 648, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7172:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333132", + "id": 649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7229:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_312_by_1", + "typeString": "int_const 312" + }, + "value": "312" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 653, + "mutability": "constant", + "name": "ORACLE_NOT_INITIALIZED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7238:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 651, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7238:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333133", + "id": 652, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7289:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_313_by_1", + "typeString": "int_const 313" + }, + "value": "313" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 656, + "mutability": "constant", + "name": "ORACLE_QUERY_TOO_OLD", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7298:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 654, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7298:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333134", + "id": 655, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7347:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_314_by_1", + "typeString": "int_const 314" + }, + "value": "314" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 659, + "mutability": "constant", + "name": "ORACLE_INVALID_INDEX", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7356:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 657, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7356:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333135", + "id": 658, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7405:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_315_by_1", + "typeString": "int_const 315" + }, + "value": "315" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 662, + "mutability": "constant", + "name": "ORACLE_BAD_SECS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7414:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 660, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7414:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333136", + "id": 661, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7458:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_316_by_1", + "typeString": "int_const 316" + }, + "value": "316" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 665, + "mutability": "constant", + "name": "AMP_END_TIME_TOO_CLOSE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7467:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 663, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7467:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333137", + "id": 664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7518:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_317_by_1", + "typeString": "int_const 317" + }, + "value": "317" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 668, + "mutability": "constant", + "name": "AMP_ONGOING_UPDATE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7527:50:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 666, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7527:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333138", + "id": 667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7574:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_318_by_1", + "typeString": "int_const 318" + }, + "value": "318" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 671, + "mutability": "constant", + "name": "AMP_RATE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7583:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 669, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7583:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333139", + "id": 670, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7629:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_319_by_1", + "typeString": "int_const 319" + }, + "value": "319" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 674, + "mutability": "constant", + "name": "AMP_NO_ONGOING_UPDATE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7638:53:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 672, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7638:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333230", + "id": 673, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7688:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_320_by_1", + "typeString": "int_const 320" + }, + "value": "320" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 677, + "mutability": "constant", + "name": "STABLE_INVARIANT_DIDNT_CONVERGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7697:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 675, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7697:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333231", + "id": 676, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7757:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_321_by_1", + "typeString": "int_const 321" + }, + "value": "321" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 680, + "mutability": "constant", + "name": "STABLE_GET_BALANCE_DIDNT_CONVERGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7766:65:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 678, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7766:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333232", + "id": 679, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7828:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_322_by_1", + "typeString": "int_const 322" + }, + "value": "322" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 683, + "mutability": "constant", + "name": "RELAYER_NOT_CONTRACT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7837:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 681, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7837:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333233", + "id": 682, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7886:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_323_by_1", + "typeString": "int_const 323" + }, + "value": "323" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 686, + "mutability": "constant", + "name": "BASE_POOL_RELAYER_NOT_CALLED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7895:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 684, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7895:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333234", + "id": 685, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7952:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_324_by_1", + "typeString": "int_const 324" + }, + "value": "324" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 689, + "mutability": "constant", + "name": "REBALANCING_RELAYER_REENTERED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "7961:61:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 687, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7961:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333235", + "id": 688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8019:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_325_by_1", + "typeString": "int_const 325" + }, + "value": "325" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 692, + "mutability": "constant", + "name": "GRADUAL_UPDATE_TIME_TRAVEL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8028:58:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 690, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8028:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333236", + "id": 691, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8083:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_326_by_1", + "typeString": "int_const 326" + }, + "value": "326" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 695, + "mutability": "constant", + "name": "SWAPS_DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8092:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 693, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8092:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333237", + "id": 694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8135:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_327_by_1", + "typeString": "int_const 327" + }, + "value": "327" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 698, + "mutability": "constant", + "name": "CALLER_IS_NOT_LBP_OWNER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8144:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 696, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8144:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333238", + "id": 697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8196:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_328_by_1", + "typeString": "int_const 328" + }, + "value": "328" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 701, + "mutability": "constant", + "name": "PRICE_RATE_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8205:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 699, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8205:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333239", + "id": 700, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8253:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_329_by_1", + "typeString": "int_const 329" + }, + "value": "329" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 704, + "mutability": "constant", + "name": "INVALID_JOIN_EXIT_KIND_WHILE_SWAPS_DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8262:75:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 702, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8262:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333330", + "id": 703, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8334:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_330_by_1", + "typeString": "int_const 330" + }, + "value": "330" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 707, + "mutability": "constant", + "name": "WEIGHT_CHANGE_TOO_FAST", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8343:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 705, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8343:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333331", + "id": 706, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8394:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_331_by_1", + "typeString": "int_const 331" + }, + "value": "331" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 710, + "mutability": "constant", + "name": "LOWER_GREATER_THAN_UPPER_TARGET", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8403:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8403:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333332", + "id": 709, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8463:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_332_by_1", + "typeString": "int_const 332" + }, + "value": "332" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 713, + "mutability": "constant", + "name": "UPPER_TARGET_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8472:53:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 711, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8472:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333333", + "id": 712, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8522:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_333_by_1", + "typeString": "int_const 333" + }, + "value": "333" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 716, + "mutability": "constant", + "name": "UNHANDLED_BY_LINEAR_POOL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8531:56:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 714, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8531:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333334", + "id": 715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8584:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_334_by_1", + "typeString": "int_const 334" + }, + "value": "334" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 719, + "mutability": "constant", + "name": "OUT_OF_TARGET_RANGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8593:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 717, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8593:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333335", + "id": 718, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8641:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_335_by_1", + "typeString": "int_const 335" + }, + "value": "335" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 722, + "mutability": "constant", + "name": "UNHANDLED_EXIT_KIND", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8650:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 720, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8650:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333336", + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8698:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_336_by_1", + "typeString": "int_const 336" + }, + "value": "336" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 725, + "mutability": "constant", + "name": "UNAUTHORIZED_EXIT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8707:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 723, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8707:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333337", + "id": 724, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8753:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_337_by_1", + "typeString": "int_const 337" + }, + "value": "337" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 728, + "mutability": "constant", + "name": "MAX_MANAGEMENT_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8762:66:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 726, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8762:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333338", + "id": 727, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8825:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_338_by_1", + "typeString": "int_const 338" + }, + "value": "338" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 731, + "mutability": "constant", + "name": "UNHANDLED_BY_MANAGED_POOL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8834:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 729, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8834:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333339", + "id": 730, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8888:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_339_by_1", + "typeString": "int_const 339" + }, + "value": "339" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 734, + "mutability": "constant", + "name": "UNHANDLED_BY_PHANTOM_POOL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8897:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8897:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333430", + "id": 733, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8951:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_340_by_1", + "typeString": "int_const 340" + }, + "value": "340" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 737, + "mutability": "constant", + "name": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "8960:65:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 735, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8960:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333431", + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9022:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_341_by_1", + "typeString": "int_const 341" + }, + "value": "341" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 740, + "mutability": "constant", + "name": "INVALID_INITIALIZATION", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9031:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 738, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9031:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333432", + "id": 739, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9082:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_342_by_1", + "typeString": "int_const 342" + }, + "value": "342" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 743, + "mutability": "constant", + "name": "OUT_OF_NEW_TARGET_RANGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9091:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 741, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9091:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333433", + "id": 742, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9143:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_343_by_1", + "typeString": "int_const 343" + }, + "value": "343" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 746, + "mutability": "constant", + "name": "FEATURE_DISABLED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9152:48:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 744, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9152:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333434", + "id": 745, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9197:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_344_by_1", + "typeString": "int_const 344" + }, + "value": "344" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 749, + "mutability": "constant", + "name": "UNINITIALIZED_POOL_CONTROLLER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9206:61:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 747, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9206:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333435", + "id": 748, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9264:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_345_by_1", + "typeString": "int_const 345" + }, + "value": "345" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 752, + "mutability": "constant", + "name": "SET_SWAP_FEE_DURING_FEE_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9273:62:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9273:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333436", + "id": 751, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9332:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_346_by_1", + "typeString": "int_const 346" + }, + "value": "346" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 755, + "mutability": "constant", + "name": "SET_SWAP_FEE_PENDING_FEE_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9341:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9341:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333437", + "id": 754, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9401:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_347_by_1", + "typeString": "int_const 347" + }, + "value": "347" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 758, + "mutability": "constant", + "name": "CHANGE_TOKENS_DURING_WEIGHT_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9410:66:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 756, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9410:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333438", + "id": 757, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9473:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_348_by_1", + "typeString": "int_const 348" + }, + "value": "348" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 761, + "mutability": "constant", + "name": "CHANGE_TOKENS_PENDING_WEIGHT_CHANGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9482:67:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 759, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9482:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333439", + "id": 760, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9546:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_349_by_1", + "typeString": "int_const 349" + }, + "value": "349" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 764, + "mutability": "constant", + "name": "MAX_WEIGHT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9555:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 762, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9555:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333530", + "id": 763, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9594:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_350_by_1", + "typeString": "int_const 350" + }, + "value": "350" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 767, + "mutability": "constant", + "name": "UNAUTHORIZED_JOIN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9603:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 765, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9603:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333531", + "id": 766, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9649:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_351_by_1", + "typeString": "int_const 351" + }, + "value": "351" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 770, + "mutability": "constant", + "name": "MAX_MANAGEMENT_AUM_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9658:65:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 768, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9658:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333532", + "id": 769, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9720:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_352_by_1", + "typeString": "int_const 352" + }, + "value": "352" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 773, + "mutability": "constant", + "name": "FRACTIONAL_TARGET", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9729:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 771, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9729:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "333533", + "id": 772, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9775:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_353_by_1", + "typeString": "int_const 353" + }, + "value": "353" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 776, + "mutability": "constant", + "name": "REENTRANCY", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9796:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 774, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9796:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343030", + "id": 775, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9835:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_400_by_1", + "typeString": "int_const 400" + }, + "value": "400" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 779, + "mutability": "constant", + "name": "SENDER_NOT_ALLOWED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9844:50:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 777, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9844:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343031", + "id": 778, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9891:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_401_by_1", + "typeString": "int_const 401" + }, + "value": "401" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 782, + "mutability": "constant", + "name": "PAUSED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9900:38:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 780, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9900:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343032", + "id": 781, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9935:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_402_by_1", + "typeString": "int_const 402" + }, + "value": "402" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 785, + "mutability": "constant", + "name": "PAUSE_WINDOW_EXPIRED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "9944:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 783, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9944:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343033", + "id": 784, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9993:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_403_by_1", + "typeString": "int_const 403" + }, + "value": "403" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 788, + "mutability": "constant", + "name": "MAX_PAUSE_WINDOW_DURATION", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10002:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 786, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10002:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343034", + "id": 787, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10056:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_404_by_1", + "typeString": "int_const 404" + }, + "value": "404" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 791, + "mutability": "constant", + "name": "MAX_BUFFER_PERIOD_DURATION", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10065:58:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 789, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10065:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343035", + "id": 790, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10120:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_405_by_1", + "typeString": "int_const 405" + }, + "value": "405" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 794, + "mutability": "constant", + "name": "INSUFFICIENT_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10129:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 792, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10129:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343036", + "id": 793, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10178:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_406_by_1", + "typeString": "int_const 406" + }, + "value": "406" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 797, + "mutability": "constant", + "name": "INSUFFICIENT_ALLOWANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10187:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 795, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10187:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343037", + "id": 796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10238:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_407_by_1", + "typeString": "int_const 407" + }, + "value": "407" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 800, + "mutability": "constant", + "name": "ERC20_TRANSFER_FROM_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10247:64:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 798, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10247:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343038", + "id": 799, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10308:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_408_by_1", + "typeString": "int_const 408" + }, + "value": "408" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 803, + "mutability": "constant", + "name": "ERC20_TRANSFER_TO_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10317:62:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 801, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10317:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343039", + "id": 802, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10376:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_409_by_1", + "typeString": "int_const 409" + }, + "value": "409" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 806, + "mutability": "constant", + "name": "ERC20_MINT_TO_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10385:58:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 804, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10385:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343130", + "id": 805, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10440:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_410_by_1", + "typeString": "int_const 410" + }, + "value": "410" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 809, + "mutability": "constant", + "name": "ERC20_BURN_FROM_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10449:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10449:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343131", + "id": 808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10506:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_411_by_1", + "typeString": "int_const 411" + }, + "value": "411" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 812, + "mutability": "constant", + "name": "ERC20_APPROVE_FROM_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10515:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10515:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343132", + "id": 811, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10575:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_412_by_1", + "typeString": "int_const 412" + }, + "value": "412" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 815, + "mutability": "constant", + "name": "ERC20_APPROVE_TO_ZERO_ADDRESS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10584:61:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 813, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10584:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343133", + "id": 814, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10642:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_413_by_1", + "typeString": "int_const 413" + }, + "value": "413" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 818, + "mutability": "constant", + "name": "ERC20_TRANSFER_EXCEEDS_ALLOWANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10651:64:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 816, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10651:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343134", + "id": 817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10712:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_414_by_1", + "typeString": "int_const 414" + }, + "value": "414" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 821, + "mutability": "constant", + "name": "ERC20_DECREASED_ALLOWANCE_BELOW_ZERO", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10721:68:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 819, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10721:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343135", + "id": 820, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10786:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_415_by_1", + "typeString": "int_const 415" + }, + "value": "415" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 824, + "mutability": "constant", + "name": "ERC20_TRANSFER_EXCEEDS_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10795:62:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 822, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10795:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343136", + "id": 823, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10854:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_416_by_1", + "typeString": "int_const 416" + }, + "value": "416" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 827, + "mutability": "constant", + "name": "ERC20_BURN_EXCEEDS_ALLOWANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10863:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 825, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10863:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343137", + "id": 826, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10920:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_417_by_1", + "typeString": "int_const 417" + }, + "value": "417" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 830, + "mutability": "constant", + "name": "SAFE_ERC20_CALL_FAILED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10929:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 828, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10929:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343138", + "id": 829, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10980:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_418_by_1", + "typeString": "int_const 418" + }, + "value": "418" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 833, + "mutability": "constant", + "name": "ADDRESS_INSUFFICIENT_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "10989:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 831, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10989:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343139", + "id": 832, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11046:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_419_by_1", + "typeString": "int_const 419" + }, + "value": "419" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 836, + "mutability": "constant", + "name": "ADDRESS_CANNOT_SEND_VALUE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11055:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 834, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11055:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343230", + "id": 835, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11109:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_420_by_1", + "typeString": "int_const 420" + }, + "value": "420" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 839, + "mutability": "constant", + "name": "SAFE_CAST_VALUE_CANT_FIT_INT256", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11118:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 837, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11118:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343231", + "id": 838, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11178:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_421_by_1", + "typeString": "int_const 421" + }, + "value": "421" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 842, + "mutability": "constant", + "name": "GRANT_SENDER_NOT_ADMIN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11187:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 840, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11187:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343232", + "id": 841, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11238:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_422_by_1", + "typeString": "int_const 422" + }, + "value": "422" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 845, + "mutability": "constant", + "name": "REVOKE_SENDER_NOT_ADMIN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11247:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 843, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11247:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343233", + "id": 844, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11299:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_423_by_1", + "typeString": "int_const 423" + }, + "value": "423" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 848, + "mutability": "constant", + "name": "RENOUNCE_SENDER_NOT_ALLOWED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11308:59:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 846, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11308:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343234", + "id": 847, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11364:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_424_by_1", + "typeString": "int_const 424" + }, + "value": "424" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 851, + "mutability": "constant", + "name": "BUFFER_PERIOD_EXPIRED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11373:53:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 849, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11373:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343235", + "id": 850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11423:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_425_by_1", + "typeString": "int_const 425" + }, + "value": "425" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 854, + "mutability": "constant", + "name": "CALLER_IS_NOT_OWNER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11432:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 852, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11432:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343236", + "id": 853, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11480:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_426_by_1", + "typeString": "int_const 426" + }, + "value": "426" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 857, + "mutability": "constant", + "name": "NEW_OWNER_IS_ZERO", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11489:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 855, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11489:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343237", + "id": 856, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11535:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_427_by_1", + "typeString": "int_const 427" + }, + "value": "427" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 860, + "mutability": "constant", + "name": "CODE_DEPLOYMENT_FAILED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11544:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 858, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11544:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343238", + "id": 859, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11595:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_428_by_1", + "typeString": "int_const 428" + }, + "value": "428" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 863, + "mutability": "constant", + "name": "CALL_TO_NON_CONTRACT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11604:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 861, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11604:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343239", + "id": 862, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11653:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_429_by_1", + "typeString": "int_const 429" + }, + "value": "429" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 866, + "mutability": "constant", + "name": "LOW_LEVEL_CALL_FAILED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11662:53:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 864, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11662:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343330", + "id": 865, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11712:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_430_by_1", + "typeString": "int_const 430" + }, + "value": "430" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 869, + "mutability": "constant", + "name": "NOT_PAUSED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11721:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 867, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11721:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343331", + "id": 868, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11760:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_431_by_1", + "typeString": "int_const 431" + }, + "value": "431" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 872, + "mutability": "constant", + "name": "ADDRESS_ALREADY_ALLOWLISTED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11769:59:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 870, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11769:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343332", + "id": 871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11825:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_432_by_1", + "typeString": "int_const 432" + }, + "value": "432" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 875, + "mutability": "constant", + "name": "ADDRESS_NOT_ALLOWLISTED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11834:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 873, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11834:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343333", + "id": 874, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11886:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_433_by_1", + "typeString": "int_const 433" + }, + "value": "433" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 878, + "mutability": "constant", + "name": "ERC20_BURN_EXCEEDS_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11895:58:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11895:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343334", + "id": 877, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11950:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_434_by_1", + "typeString": "int_const 434" + }, + "value": "434" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 881, + "mutability": "constant", + "name": "INVALID_OPERATION", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "11959:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 879, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11959:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343335", + "id": 880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12005:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_435_by_1", + "typeString": "int_const 435" + }, + "value": "435" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 884, + "mutability": "constant", + "name": "CODEC_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12014:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 882, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12014:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343336", + "id": 883, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12057:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_436_by_1", + "typeString": "int_const 436" + }, + "value": "436" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 887, + "mutability": "constant", + "name": "IN_RECOVERY_MODE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12066:48:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 885, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12066:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343337", + "id": 886, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12111:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_437_by_1", + "typeString": "int_const 437" + }, + "value": "437" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 890, + "mutability": "constant", + "name": "NOT_IN_RECOVERY_MODE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12120:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 888, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12120:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343338", + "id": 889, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12169:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_438_by_1", + "typeString": "int_const 438" + }, + "value": "438" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 893, + "mutability": "constant", + "name": "INDUCED_FAILURE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12178:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 891, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12178:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343339", + "id": 892, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12222:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_439_by_1", + "typeString": "int_const 439" + }, + "value": "439" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 896, + "mutability": "constant", + "name": "EXPIRED_SIGNATURE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12231:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 894, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12231:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343430", + "id": 895, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12277:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_440_by_1", + "typeString": "int_const 440" + }, + "value": "440" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 899, + "mutability": "constant", + "name": "MALFORMED_SIGNATURE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12286:51:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 897, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12286:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343431", + "id": 898, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12334:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_441_by_1", + "typeString": "int_const 441" + }, + "value": "441" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 902, + "mutability": "constant", + "name": "SAFE_CAST_VALUE_CANT_FIT_UINT64", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12343:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 900, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12343:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343432", + "id": 901, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12403:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_442_by_1", + "typeString": "int_const 442" + }, + "value": "442" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 905, + "mutability": "constant", + "name": "UNHANDLED_FEE_TYPE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12412:50:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 903, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12412:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "343433", + "id": 904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12459:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_443_by_1", + "typeString": "int_const 443" + }, + "value": "443" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 908, + "mutability": "constant", + "name": "INVALID_POOL_ID", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12482:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 906, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12482:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353030", + "id": 907, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12526:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_500_by_1", + "typeString": "int_const 500" + }, + "value": "500" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 911, + "mutability": "constant", + "name": "CALLER_NOT_POOL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12535:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 909, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12535:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353031", + "id": 910, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12579:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_501_by_1", + "typeString": "int_const 501" + }, + "value": "501" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 914, + "mutability": "constant", + "name": "SENDER_NOT_ASSET_MANAGER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12588:56:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 912, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12588:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353032", + "id": 913, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12641:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_502_by_1", + "typeString": "int_const 502" + }, + "value": "502" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 917, + "mutability": "constant", + "name": "USER_DOESNT_ALLOW_RELAYER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12650:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 915, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12650:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353033", + "id": 916, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12704:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_503_by_1", + "typeString": "int_const 503" + }, + "value": "503" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 920, + "mutability": "constant", + "name": "INVALID_SIGNATURE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12713:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 918, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12713:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353034", + "id": 919, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12759:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_504_by_1", + "typeString": "int_const 504" + }, + "value": "504" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 923, + "mutability": "constant", + "name": "EXIT_BELOW_MIN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12768:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 921, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12768:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353035", + "id": 922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12811:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_505_by_1", + "typeString": "int_const 505" + }, + "value": "505" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 926, + "mutability": "constant", + "name": "JOIN_ABOVE_MAX", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12820:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 924, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12820:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353036", + "id": 925, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12863:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_506_by_1", + "typeString": "int_const 506" + }, + "value": "506" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 929, + "mutability": "constant", + "name": "SWAP_LIMIT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12872:42:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 927, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12872:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353037", + "id": 928, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12911:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_507_by_1", + "typeString": "int_const 507" + }, + "value": "507" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 932, + "mutability": "constant", + "name": "SWAP_DEADLINE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12920:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 930, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12920:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353038", + "id": 931, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12962:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_508_by_1", + "typeString": "int_const 508" + }, + "value": "508" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 935, + "mutability": "constant", + "name": "CANNOT_SWAP_SAME_TOKEN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "12971:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 933, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12971:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353039", + "id": 934, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13022:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_509_by_1", + "typeString": "int_const 509" + }, + "value": "509" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 938, + "mutability": "constant", + "name": "UNKNOWN_AMOUNT_IN_FIRST_SWAP", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13031:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 936, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13031:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353130", + "id": 937, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13088:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_510_by_1", + "typeString": "int_const 510" + }, + "value": "510" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 941, + "mutability": "constant", + "name": "MALCONSTRUCTED_MULTIHOP_SWAP", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13097:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 939, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13097:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353131", + "id": 940, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13154:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_511_by_1", + "typeString": "int_const 511" + }, + "value": "511" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 944, + "mutability": "constant", + "name": "INTERNAL_BALANCE_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13163:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 942, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13163:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353132", + "id": 943, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13217:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_512_by_1", + "typeString": "int_const 512" + }, + "value": "512" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 947, + "mutability": "constant", + "name": "INSUFFICIENT_INTERNAL_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13226:61:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 945, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13226:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353133", + "id": 946, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13284:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_513_by_1", + "typeString": "int_const 513" + }, + "value": "513" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 950, + "mutability": "constant", + "name": "INVALID_ETH_INTERNAL_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13293:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 948, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13293:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353134", + "id": 949, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13350:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_514_by_1", + "typeString": "int_const 514" + }, + "value": "514" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 953, + "mutability": "constant", + "name": "INVALID_POST_LOAN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13359:57:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 951, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13359:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353135", + "id": 952, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13413:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_515_by_1", + "typeString": "int_const 515" + }, + "value": "515" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 956, + "mutability": "constant", + "name": "INSUFFICIENT_ETH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13422:48:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 954, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13422:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353136", + "id": 955, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13467:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_516_by_1", + "typeString": "int_const 516" + }, + "value": "516" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 959, + "mutability": "constant", + "name": "UNALLOCATED_ETH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13476:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 957, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13476:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353137", + "id": 958, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13520:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_517_by_1", + "typeString": "int_const 517" + }, + "value": "517" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 962, + "mutability": "constant", + "name": "ETH_TRANSFER", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13529:44:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 960, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13529:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353138", + "id": 961, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13570:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_518_by_1", + "typeString": "int_const 518" + }, + "value": "518" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 965, + "mutability": "constant", + "name": "CANNOT_USE_ETH_SENTINEL", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13579:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 963, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13579:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353139", + "id": 964, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13631:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_519_by_1", + "typeString": "int_const 519" + }, + "value": "519" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 968, + "mutability": "constant", + "name": "TOKENS_MISMATCH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13640:47:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 966, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13640:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353230", + "id": 967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13684:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_520_by_1", + "typeString": "int_const 520" + }, + "value": "520" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 971, + "mutability": "constant", + "name": "TOKEN_NOT_REGISTERED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13693:52:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13693:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353231", + "id": 970, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13742:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_521_by_1", + "typeString": "int_const 521" + }, + "value": "521" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 974, + "mutability": "constant", + "name": "TOKEN_ALREADY_REGISTERED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13751:56:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 972, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13751:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353232", + "id": 973, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13804:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_522_by_1", + "typeString": "int_const 522" + }, + "value": "522" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 977, + "mutability": "constant", + "name": "TOKENS_ALREADY_SET", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13813:50:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 975, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13813:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353233", + "id": 976, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13860:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_523_by_1", + "typeString": "int_const 523" + }, + "value": "523" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 980, + "mutability": "constant", + "name": "TOKENS_LENGTH_MUST_BE_2", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13869:55:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 978, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13869:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353234", + "id": 979, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13921:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_524_by_1", + "typeString": "int_const 524" + }, + "value": "524" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 983, + "mutability": "constant", + "name": "NONZERO_TOKEN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13930:53:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 981, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13930:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353235", + "id": 982, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13980:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_525_by_1", + "typeString": "int_const 525" + }, + "value": "525" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 986, + "mutability": "constant", + "name": "BALANCE_TOTAL_OVERFLOW", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "13989:54:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 984, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13989:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353236", + "id": 985, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14040:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_526_by_1", + "typeString": "int_const 526" + }, + "value": "526" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 989, + "mutability": "constant", + "name": "POOL_NO_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14049:46:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 987, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14049:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353237", + "id": 988, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14092:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_527_by_1", + "typeString": "int_const 527" + }, + "value": "527" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 992, + "mutability": "constant", + "name": "INSUFFICIENT_FLASH_LOAN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14101:63:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 990, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14101:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "353238", + "id": 991, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14161:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_528_by_1", + "typeString": "int_const 528" + }, + "value": "528" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 995, + "mutability": "constant", + "name": "SWAP_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14183:60:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 993, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14183:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363030", + "id": 994, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14240:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_600_by_1", + "typeString": "int_const 600" + }, + "value": "600" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 998, + "mutability": "constant", + "name": "FLASH_LOAN_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14249:66:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 996, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14249:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363031", + "id": 997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14312:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_601_by_1", + "typeString": "int_const 601" + }, + "value": "601" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1001, + "mutability": "constant", + "name": "INSUFFICIENT_FLASH_LOAN_FEE_AMOUNT", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14321:66:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 999, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14321:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363032", + "id": 1000, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14384:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_602_by_1", + "typeString": "int_const 602" + }, + "value": "602" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1004, + "mutability": "constant", + "name": "AUM_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14393:59:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1002, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14393:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "363033", + "id": 1003, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14449:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_603_by_1", + "typeString": "int_const 603" + }, + "value": "603" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1007, + "mutability": "constant", + "name": "UNIMPLEMENTED", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14471:45:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1005, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14471:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "393938", + "id": 1006, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14513:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_998_by_1", + "typeString": "int_const 998" + }, + "value": "998" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1010, + "mutability": "constant", + "name": "SHOULD_NOT_HAPPEN", + "nodeType": "VariableDeclaration", + "scope": 1011, + "src": "14522:49:10", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1008, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14522:7:10", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "393939", + "id": 1009, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14568:3:10", + "typeDescriptions": { + "typeIdentifier": "t_rational_999_by_1", + "typeString": "int_const 999" + }, + "value": "999" + }, + "visibility": "internal" + } + ], + "scope": 1012, + "src": "5050:9524:10" + } + ], + "src": "688:13887:10" + }, + "id": 10 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "exportedSymbols": { + "IAuthentication": [ + 1022 + ] + }, + "id": 1023, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1013, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:11" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1022, + "linearizedBaseContracts": [ + 1022 + ], + "name": "IAuthentication", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1014, + "nodeType": "StructuredDocumentation", + "src": "745:116:11", + "text": " @dev Returns the action identifier associated with the external function described by `selector`." + }, + "functionSelector": "851c1bb3", + "id": 1021, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getActionId", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1017, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1016, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "887:15:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 1015, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "887:6:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "886:17:11" + }, + "returnParameters": { + "id": 1020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1019, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1021, + "src": "927:7:11", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1018, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "927:7:11", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "926:9:11" + }, + "scope": 1022, + "src": "866:70:11", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1023, + "src": "713:225:11" + } + ], + "src": "688:251:11" + }, + "id": 11 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol", + "exportedSymbols": { + "ISignaturesValidator": [ + 1040 + ] + }, + "id": 1041, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1024, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:12" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1025, + "nodeType": "StructuredDocumentation", + "src": "713:95:12", + "text": " @dev Interface for the SignatureValidator helper, used to support meta-transactions." + }, + "fullyImplemented": false, + "id": 1040, + "linearizedBaseContracts": [ + 1040 + ], + "name": "ISignaturesValidator", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1026, + "nodeType": "StructuredDocumentation", + "src": "846:60:12", + "text": " @dev Returns the EIP712 domain separator." + }, + "functionSelector": "ed24911d", + "id": 1031, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getDomainSeparator", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1027, + "nodeType": "ParameterList", + "parameters": [], + "src": "938:2:12" + }, + "returnParameters": { + "id": 1030, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1029, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1031, + "src": "964:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1028, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "964:7:12", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "963:9:12" + }, + "scope": 1040, + "src": "911:62:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1032, + "nodeType": "StructuredDocumentation", + "src": "979:83:12", + "text": " @dev Returns the next nonce used by an address to sign messages." + }, + "functionSelector": "90193b7c", + "id": 1039, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getNextNonce", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1035, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1034, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1039, + "src": "1089:12:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1033, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1089:7:12", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1088:14:12" + }, + "returnParameters": { + "id": 1038, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1037, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1039, + "src": "1126:7:12", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1036, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1126:7:12", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1125:9:12" + }, + "scope": 1040, + "src": "1067:68:12", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1041, + "src": "809:328:12" + } + ], + "src": "688:450:12" + }, + "id": 12 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol", + "exportedSymbols": { + "ITemporarilyPausable": [ + 1059 + ] + }, + "id": 1060, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1042, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:13" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1043, + "nodeType": "StructuredDocumentation", + "src": "713:61:13", + "text": " @dev Interface for the TemporarilyPausable helper." + }, + "fullyImplemented": false, + "id": 1059, + "linearizedBaseContracts": [ + 1059 + ], + "name": "ITemporarilyPausable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 1044, + "nodeType": "StructuredDocumentation", + "src": "812:83:13", + "text": " @dev Emitted every time the pause state changes by `_setPaused`." + }, + "id": 1048, + "name": "PausedStateChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1047, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1046, + "indexed": false, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 1048, + "src": "925:11:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1045, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "925:4:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "924:13:13" + }, + "src": "900:38:13" + }, + { + "documentation": { + "id": 1049, + "nodeType": "StructuredDocumentation", + "src": "944:57:13", + "text": " @dev Returns the current paused state." + }, + "functionSelector": "1c0de051", + "id": 1058, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPausedState", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1050, + "nodeType": "ParameterList", + "parameters": [], + "src": "1029:2:13" + }, + "returnParameters": { + "id": 1057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1052, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 1058, + "src": "1092:11:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1051, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1092:4:13", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1054, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nodeType": "VariableDeclaration", + "scope": 1058, + "src": "1117:26:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1053, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1117:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1056, + "mutability": "mutable", + "name": "bufferPeriodEndTime", + "nodeType": "VariableDeclaration", + "scope": 1058, + "src": "1157:27:13", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1157:7:13", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1078:116:13" + }, + "scope": 1059, + "src": "1006:189:13", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1060, + "src": "775:422:13" + } + ], + "src": "688:510:13" + }, + "id": 13 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol", + "exportedSymbols": { + "IWETH": [ + 1074 + ] + }, + "id": 1075, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1061, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:14" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../openzeppelin/IERC20.sol", + "id": 1062, + "nodeType": "ImportDirective", + "scope": 1075, + "sourceUnit": 1153, + "src": "713:36:14", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1064, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "921:6:14", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1065, + "nodeType": "InheritanceSpecifier", + "src": "921:6:14" + } + ], + "contractDependencies": [ + 1152 + ], + "contractKind": "interface", + "documentation": { + "id": 1063, + "nodeType": "StructuredDocumentation", + "src": "751:150:14", + "text": " @dev Interface for WETH9.\n See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol" + }, + "fullyImplemented": false, + "id": 1074, + "linearizedBaseContracts": [ + 1074, + 1152 + ], + "name": "IWETH", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "d0e30db0", + "id": 1068, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1066, + "nodeType": "ParameterList", + "parameters": [], + "src": "950:2:14" + }, + "returnParameters": { + "id": 1067, + "nodeType": "ParameterList", + "parameters": [], + "src": "969:0:14" + }, + "scope": 1074, + "src": "934:36:14", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "2e1a7d4d", + "id": 1073, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1071, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1070, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1073, + "src": "994:14:14", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1069, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "994:7:14", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "993:16:14" + }, + "returnParameters": { + "id": 1072, + "nodeType": "ParameterList", + "parameters": [], + "src": "1018:0:14" + }, + "scope": 1074, + "src": "976:43:14", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1075, + "src": "902:119:14" + } + ], + "src": "688:334:14" + }, + "id": 14 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "exportedSymbols": { + "IERC20": [ + 1152 + ] + }, + "id": 1153, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1076, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:15" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1077, + "nodeType": "StructuredDocumentation", + "src": "58:70:15", + "text": " @dev Interface of the ERC20 standard as defined in the EIP." + }, + "fullyImplemented": false, + "id": 1152, + "linearizedBaseContracts": [ + 1152 + ], + "name": "IERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1078, + "nodeType": "StructuredDocumentation", + "src": "152:66:15", + "text": " @dev Returns the amount of tokens in existence." + }, + "functionSelector": "18160ddd", + "id": 1083, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1079, + "nodeType": "ParameterList", + "parameters": [], + "src": "243:2:15" + }, + "returnParameters": { + "id": 1082, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1081, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1083, + "src": "269:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1080, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "269:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "268:9:15" + }, + "scope": 1152, + "src": "223:55:15", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1084, + "nodeType": "StructuredDocumentation", + "src": "284:72:15", + "text": " @dev Returns the amount of tokens owned by `account`." + }, + "functionSelector": "70a08231", + "id": 1091, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1087, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1086, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1091, + "src": "380:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1085, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "380:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "379:17:15" + }, + "returnParameters": { + "id": 1090, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1089, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1091, + "src": "420:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1088, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "420:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "419:9:15" + }, + "scope": 1152, + "src": "361:68:15", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1092, + "nodeType": "StructuredDocumentation", + "src": "435:209:15", + "text": " @dev Moves `amount` tokens from the caller's account to `recipient`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "a9059cbb", + "id": 1101, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1094, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1101, + "src": "667:17:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1093, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "667:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1096, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1101, + "src": "686:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1095, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "686:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "666:35:15" + }, + "returnParameters": { + "id": 1100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1099, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1101, + "src": "720:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1098, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "720:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "719:6:15" + }, + "scope": 1152, + "src": "649:77:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1102, + "nodeType": "StructuredDocumentation", + "src": "732:264:15", + "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." + }, + "functionSelector": "dd62ed3e", + "id": 1111, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1104, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "1020:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1103, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1020:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1106, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "1035:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1105, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1035:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1019:32:15" + }, + "returnParameters": { + "id": 1110, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1109, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1111, + "src": "1075:7:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1108, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1075:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1074:9:15" + }, + "scope": 1152, + "src": "1001:83:15", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1112, + "nodeType": "StructuredDocumentation", + "src": "1090:642:15", + "text": " @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." + }, + "functionSelector": "095ea7b3", + "id": 1121, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1117, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1114, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1121, + "src": "1754:15:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1113, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1754:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1116, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1121, + "src": "1771:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1115, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1771:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1753:33:15" + }, + "returnParameters": { + "id": 1120, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1119, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1121, + "src": "1805:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1118, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1805:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1804:6:15" + }, + "scope": 1152, + "src": "1737:74:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1122, + "nodeType": "StructuredDocumentation", + "src": "1817:296:15", + "text": " @dev Moves `amount` tokens from `sender` to `recipient` using the\n allowance mechanism. `amount` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." + }, + "functionSelector": "23b872dd", + "id": 1133, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1129, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1124, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "2149:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1123, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2149:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1126, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "2173:17:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1125, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2173:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1128, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "2200:14:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1127, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2200:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2139:81:15" + }, + "returnParameters": { + "id": 1132, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1131, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1133, + "src": "2239:4:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1130, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2239:4:15", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2238:6:15" + }, + "scope": 1152, + "src": "2118:127:15", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1134, + "nodeType": "StructuredDocumentation", + "src": "2251:158:15", + "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." + }, + "id": 1142, + "name": "Transfer", + "nodeType": "EventDefinition", + "parameters": { + "id": 1141, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1136, + "indexed": true, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1142, + "src": "2429:20:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1135, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2429:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1138, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1142, + "src": "2451:18:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1137, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2451:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1140, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1142, + "src": "2471:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1139, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2471:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2428:57:15" + }, + "src": "2414:72:15" + }, + { + "anonymous": false, + "documentation": { + "id": 1143, + "nodeType": "StructuredDocumentation", + "src": "2492:148:15", + "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." + }, + "id": 1151, + "name": "Approval", + "nodeType": "EventDefinition", + "parameters": { + "id": 1150, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1145, + "indexed": true, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1151, + "src": "2660:21:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1144, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2660:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1147, + "indexed": true, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1151, + "src": "2683:23:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1146, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2683:7:15", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1149, + "indexed": false, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1151, + "src": "2708:13:15", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1148, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2708:7:15", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2659:63:15" + }, + "src": "2645:78:15" + } + ], + "scope": 1153, + "src": "129:2596:15" + } + ], + "src": "33:2693:15" + }, + "id": 15 + }, + "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol", + "exportedSymbols": { + "IERC20Permit": [ + 1188 + ] + }, + "id": 1189, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1154, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:16" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1155, + "nodeType": "StructuredDocumentation", + "src": "58:482:16", + "text": " @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all." + }, + "fullyImplemented": false, + "id": 1188, + "linearizedBaseContracts": [ + 1188 + ], + "name": "IERC20Permit", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1156, + "nodeType": "StructuredDocumentation", + "src": "570:788:16", + "text": " @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,\n given `owner`'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section]." + }, + "functionSelector": "d505accf", + "id": 1173, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "permit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1171, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1158, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1388:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1157, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1388:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1160, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1411:15:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1159, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1411:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1162, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1436:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1436:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1164, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1459:16:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1163, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1459:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1166, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1485:7:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 1165, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1485:5:16", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1168, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1502:9:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1167, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1502:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1170, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 1173, + "src": "1521:9:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1169, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1521:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1378:158:16" + }, + "returnParameters": { + "id": 1172, + "nodeType": "ParameterList", + "parameters": [], + "src": "1545:0:16" + }, + "scope": 1188, + "src": "1363:183:16", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1174, + "nodeType": "StructuredDocumentation", + "src": "1552:294:16", + "text": " @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times." + }, + "functionSelector": "7ecebe00", + "id": 1181, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "nonces", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1177, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1176, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 1181, + "src": "1867:13:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1867:7:16", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1866:15:16" + }, + "returnParameters": { + "id": 1180, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1179, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1181, + "src": "1905:7:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1178, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1905:7:16", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1904:9:16" + }, + "scope": 1188, + "src": "1851:63:16", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1182, + "nodeType": "StructuredDocumentation", + "src": "1920:128:16", + "text": " @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}." + }, + "functionSelector": "3644e515", + "id": 1187, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "DOMAIN_SEPARATOR", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1183, + "nodeType": "ParameterList", + "parameters": [], + "src": "2131:2:16" + }, + "returnParameters": { + "id": 1186, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1185, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1187, + "src": "2157:7:16", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1184, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2157:7:16", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2156:9:16" + }, + "scope": 1188, + "src": "2106:60:16", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1189, + "src": "541:1627:16" + } + ], + "src": "33:2136:16" + }, + "id": 16 + }, + "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "exportedSymbols": { + "IProtocolFeePercentagesProvider": [ + 1269 + ], + "ProtocolFeeType": [ + 1282 + ] + }, + "id": 1283, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1190, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:17" + }, + { + "id": 1191, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:17" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1192, + "nodeType": "StructuredDocumentation", + "src": "747:271:17", + "text": " @dev Source of truth for all Protocol Fee percentages, that is, how much the protocol charges certain actions. Some\n of these values may also be retrievable from other places (such as the swap fee percentage), but this is the\n preferred source nonetheless." + }, + "fullyImplemented": false, + "id": 1269, + "linearizedBaseContracts": [ + 1269 + ], + "name": "IProtocolFeePercentagesProvider", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "id": 1200, + "name": "ProtocolFeeTypeRegistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 1199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1194, + "indexed": true, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1200, + "src": "1248:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1193, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1248:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1196, + "indexed": false, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 1200, + "src": "1273:11:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1195, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1273:6:17", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1198, + "indexed": false, + "mutability": "mutable", + "name": "maximumPercentage", + "nodeType": "VariableDeclaration", + "scope": 1200, + "src": "1286:25:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1286:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1247:65:17" + }, + "src": "1216:97:17" + }, + { + "anonymous": false, + "id": 1206, + "name": "ProtocolFeePercentageChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1205, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1202, + "indexed": true, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1206, + "src": "1787:23:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1201, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1787:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1204, + "indexed": false, + "mutability": "mutable", + "name": "percentage", + "nodeType": "VariableDeclaration", + "scope": 1206, + "src": "1812:18:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1203, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1812:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1786:45:17" + }, + "src": "1752:80:17" + }, + { + "documentation": { + "id": 1207, + "nodeType": "StructuredDocumentation", + "src": "1838:363:17", + "text": " @dev Registers a new fee type in the system, making it queryable via `getFeeTypePercentage` and `getFeeTypeName`,\n as well as configurable via `setFeeTypePercentage`.\n `feeType` can be any arbitrary value (that is not in use).\n It is not possible to de-register fee types, nor change their name or maximum value." + }, + "functionSelector": "7268d6ce", + "id": 1218, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerFeeType", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1209, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1218, + "src": "2240:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1208, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2240:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1211, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 1218, + "src": "2265:18:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1210, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2265:6:17", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1213, + "mutability": "mutable", + "name": "maximumValue", + "nodeType": "VariableDeclaration", + "scope": 1218, + "src": "2293:20:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2293:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1215, + "mutability": "mutable", + "name": "initialValue", + "nodeType": "VariableDeclaration", + "scope": 1218, + "src": "2323:20:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2323:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2230:119:17" + }, + "returnParameters": { + "id": 1217, + "nodeType": "ParameterList", + "parameters": [], + "src": "2358:0:17" + }, + "scope": 1269, + "src": "2206:153:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1219, + "nodeType": "StructuredDocumentation", + "src": "2365:89:17", + "text": " @dev Returns true if `feeType` has been registered and can be queried." + }, + "functionSelector": "868897a0", + "id": 1226, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isValidFeeType", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1221, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1226, + "src": "2483:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2483:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2482:17:17" + }, + "returnParameters": { + "id": 1225, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1224, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1226, + "src": "2523:4:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1223, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2523:4:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2522:6:17" + }, + "scope": 1269, + "src": "2459:70:17", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1227, + "nodeType": "StructuredDocumentation", + "src": "2535:90:17", + "text": " @dev Returns true if `value` is a valid percentage value for `feeType`." + }, + "functionSelector": "74735e0b", + "id": 1236, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "isValidFeeTypePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1232, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1229, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1236, + "src": "2664:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1228, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2664:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1231, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 1236, + "src": "2681:13:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1230, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2681:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2663:32:17" + }, + "returnParameters": { + "id": 1235, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1234, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1236, + "src": "2719:4:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1233, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2719:4:17", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2718:6:17" + }, + "scope": 1269, + "src": "2630:95:17", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1237, + "nodeType": "StructuredDocumentation", + "src": "2731:570:17", + "text": " @dev Sets the percentage value for `feeType` to `newValue`.\n IMPORTANT: it is possible for a third party to modify the SWAP and FLASH_LOAN fee type values directly in the\n ProtocolFeesCollector, without invoking this function. This will result in the `ProtocolFeePercentageChanged`\n event not being emitted despite their value changing. Such usage of the ProtocolFeesCollector is however\n discouraged: only this contract should be granted permission to call `setSwapFeePercentage` and\n `setFlashLoanFeePercentage`." + }, + "functionSelector": "4d44f0e9", + "id": 1244, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setFeeTypePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1239, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1244, + "src": "3336:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1238, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3336:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1241, + "mutability": "mutable", + "name": "newValue", + "nodeType": "VariableDeclaration", + "scope": 1244, + "src": "3353:16:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1240, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3353:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3335:35:17" + }, + "returnParameters": { + "id": 1243, + "nodeType": "ParameterList", + "parameters": [], + "src": "3379:0:17" + }, + "scope": 1269, + "src": "3306:74:17", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1245, + "nodeType": "StructuredDocumentation", + "src": "3386:224:17", + "text": " @dev Returns the current percentage value for `feeType`. This is the preferred mechanism for querying these -\n whenever possible, use this fucntion instead of e.g. querying the ProtocolFeesCollector." + }, + "functionSelector": "1a7c3263", + "id": 1252, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFeeTypePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1247, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1252, + "src": "3645:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1246, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3645:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3644:17:17" + }, + "returnParameters": { + "id": 1251, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1250, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1252, + "src": "3685:7:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1249, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3685:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3684:9:17" + }, + "scope": 1269, + "src": "3615:79:17", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1253, + "nodeType": "StructuredDocumentation", + "src": "3700:58:17", + "text": " @dev Returns `feeType`'s maximum value." + }, + "functionSelector": "5e2cae4c", + "id": 1260, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFeeTypeMaximumPercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1255, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1260, + "src": "3800:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1254, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3800:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3799:17:17" + }, + "returnParameters": { + "id": 1259, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1258, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1260, + "src": "3840:7:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1257, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3840:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3839:9:17" + }, + "scope": 1269, + "src": "3763:86:17", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1261, + "nodeType": "StructuredDocumentation", + "src": "3855:49:17", + "text": " @dev Returns `feeType`'s name." + }, + "functionSelector": "b661eda1", + "id": 1268, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFeeTypeName", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1264, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1263, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 1268, + "src": "3933:15:17", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3933:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3932:17:17" + }, + "returnParameters": { + "id": 1267, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1266, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1268, + "src": "3973:13:17", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 1265, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3973:6:17", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "3972:15:17" + }, + "scope": 1269, + "src": "3909:79:17", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1283, + "src": "1019:2971:17" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 1282, + "linearizedBaseContracts": [ + 1282 + ], + "name": "ProtocolFeeType", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 1272, + "mutability": "constant", + "name": "SWAP", + "nodeType": "VariableDeclaration", + "scope": 1282, + "src": "4326:34:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1270, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4326:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "30", + "id": 1271, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4359:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1275, + "mutability": "constant", + "name": "FLASH_LOAN", + "nodeType": "VariableDeclaration", + "scope": 1282, + "src": "4366:40:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1273, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4366:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 1274, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4405:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1278, + "mutability": "constant", + "name": "YIELD", + "nodeType": "VariableDeclaration", + "scope": 1282, + "src": "4412:35:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4412:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 1277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4446:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 1281, + "mutability": "constant", + "name": "AUM", + "nodeType": "VariableDeclaration", + "scope": 1282, + "src": "4453:33:17", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1279, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4453:7:17", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "33", + "id": 1280, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4485:1:17", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "visibility": "internal" + } + ], + "scope": 1283, + "src": "3992:551:17" + } + ], + "src": "688:3856:17" + }, + "id": 17 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol", + "exportedSymbols": { + "IAsset": [ + 1286 + ] + }, + "id": 1287, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1284, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:18" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": { + "id": 1285, + "nodeType": "StructuredDocumentation", + "src": "713:309:18", + "text": " @dev This is an empty interface used to represent either ERC20-conforming token contracts or ETH (using the zero\n address sentinel value). We're just relying on the fact that `interface` can be used to declare new address-like\n types.\n This concept is unrelated to a Pool's Asset Managers." + }, + "fullyImplemented": true, + "id": 1286, + "linearizedBaseContracts": [ + 1286 + ], + "name": "IAsset", + "nodeType": "ContractDefinition", + "nodes": [], + "scope": 1287, + "src": "1023:73:18" + } + ], + "src": "688:409:18" + }, + "id": 18 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "exportedSymbols": { + "IAuthorizer": [ + 1301 + ] + }, + "id": 1302, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1288, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:19" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1301, + "linearizedBaseContracts": [ + 1301 + ], + "name": "IAuthorizer", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1289, + "nodeType": "StructuredDocumentation", + "src": "741:121:19", + "text": " @dev Returns true if `account` can perform the action described by `actionId` in the contract `where`." + }, + "functionSelector": "9be2a884", + "id": 1300, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1291, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 1300, + "src": "896:16:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1290, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "896:7:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1293, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 1300, + "src": "922:15:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1292, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "922:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1295, + "mutability": "mutable", + "name": "where", + "nodeType": "VariableDeclaration", + "scope": 1300, + "src": "947:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1294, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "947:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "886:80:19" + }, + "returnParameters": { + "id": 1299, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1298, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1300, + "src": "990:4:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1297, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "990:4:19", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "989:6:19" + }, + "scope": 1301, + "src": "867:129:19", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1302, + "src": "713:285:19" + } + ], + "src": "688:311:19" + }, + "id": 19 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol", + "exportedSymbols": { + "IBasePool": [ + 1425 + ] + }, + "id": 1426, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1303, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:20" + }, + { + "id": 1304, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:20" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 1305, + "nodeType": "ImportDirective", + "scope": 1426, + "sourceUnit": 2022, + "src": "747:22:20", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol", + "file": "./IPoolSwapStructs.sol", + "id": 1306, + "nodeType": "ImportDirective", + "scope": 1426, + "sourceUnit": 1492, + "src": "770:32:20", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1308, + "name": "IPoolSwapStructs", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1491, + "src": "1112:16:20", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPoolSwapStructs_$1491", + "typeString": "contract IPoolSwapStructs" + } + }, + "id": 1309, + "nodeType": "InheritanceSpecifier", + "src": "1112:16:20" + } + ], + "contractDependencies": [ + 1491 + ], + "contractKind": "interface", + "documentation": { + "id": 1307, + "nodeType": "StructuredDocumentation", + "src": "804:284:20", + "text": " @dev Interface for adding and removing liquidity that all Pool contracts should implement. Note that this is not\n the complete Pool contract interface, as it is missing the swap hooks. Pool contracts should also inherit from\n either IGeneralPool or IMinimalSwapInfoPool" + }, + "fullyImplemented": false, + "id": 1425, + "linearizedBaseContracts": [ + 1425, + 1491 + ], + "name": "IBasePool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1310, + "nodeType": "StructuredDocumentation", + "src": "1135:1490:20", + "text": " @dev Called by the Vault when a user calls `IVault.joinPool` to add liquidity to this Pool. Returns how many of\n each registered token the user should provide, as well as the amount of protocol fees the Pool owes to the Vault.\n The Vault will then take tokens from `sender` and add them to the Pool's balances, as well as collect\n the reported amount in protocol fees, which the pool should calculate based on `protocolSwapFeePercentage`.\n Protocol fees are reported and charged on join events so that the Pool is free of debt whenever new users join.\n `sender` is the account performing the join (from which tokens will be withdrawn), and `recipient` is the account\n designated to receive any benefits (typically pool shares). `balances` contains the total balances\n for each token the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return.\n `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total\n balance.\n `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of\n join (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.)\n Contracts implementing this function should check that the caller is indeed the Vault before performing any\n state-changing operations, such as minting pool shares." + }, + "functionSelector": "d5c096c4", + "id": 1334, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onJoinPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1326, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1312, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2659:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1311, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2659:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1314, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2683:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1313, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2683:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1316, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2707:17:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1315, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2707:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1319, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2734:25:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1317, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2734:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1318, + "nodeType": "ArrayTypeName", + "src": "2734:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1321, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2769:23:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1320, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2769:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1323, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2802:33:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1322, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2802:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1325, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2845:21:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1324, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2845:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2649:223:20" + }, + "returnParameters": { + "id": 1333, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1329, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2891:26:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2891:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1328, + "nodeType": "ArrayTypeName", + "src": "2891:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1332, + "mutability": "mutable", + "name": "dueProtocolFeeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1334, + "src": "2919:38:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1330, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2919:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1331, + "nodeType": "ArrayTypeName", + "src": "2919:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2890:68:20" + }, + "scope": 1425, + "src": "2630:329:20", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1335, + "nodeType": "StructuredDocumentation", + "src": "2965:1490:20", + "text": " @dev Called by the Vault when a user calls `IVault.exitPool` to remove liquidity from this Pool. Returns how many\n tokens the Vault should deduct from the Pool's balances, as well as the amount of protocol fees the Pool owes\n to the Vault. The Vault will then take tokens from the Pool's balances and send them to `recipient`,\n as well as collect the reported amount in protocol fees, which the Pool should calculate based on\n `protocolSwapFeePercentage`.\n Protocol fees are charged on exit events to guarantee that users exiting the Pool have paid their share.\n `sender` is the account performing the exit (typically the pool shareholder), and `recipient` is the account\n to which the Vault will send the proceeds. `balances` contains the total token balances for each token\n the Pool registered in the Vault, in the same order that `IVault.getPoolTokens` would return.\n `lastChangeBlock` is the last block in which *any* of the Pool's registered tokens last changed its total\n balance.\n `userData` contains any pool-specific instructions needed to perform the calculations, such as the type of\n exit (e.g., proportional given an amount of pool shares, single-asset, multi-asset, etc.)\n Contracts implementing this function should check that the caller is indeed the Vault before performing any\n state-changing operations, such as burning pool shares." + }, + "functionSelector": "74f3b009", + "id": 1359, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onExitPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1351, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1337, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4489:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1336, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4489:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1339, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4513:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1338, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4513:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1341, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4537:17:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1340, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4537:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1344, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4564:25:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1342, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4564:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1343, + "nodeType": "ArrayTypeName", + "src": "4564:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1346, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4599:23:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4599:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1348, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4632:33:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1347, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4632:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1350, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4675:21:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1349, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4675:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4479:223:20" + }, + "returnParameters": { + "id": 1358, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1354, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4721:27:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1352, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4721:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1353, + "nodeType": "ArrayTypeName", + "src": "4721:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1357, + "mutability": "mutable", + "name": "dueProtocolFeeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1359, + "src": "4750:38:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1355, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4750:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1356, + "nodeType": "ArrayTypeName", + "src": "4750:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4720:69:20" + }, + "scope": 1425, + "src": "4460:330:20", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1360, + "nodeType": "StructuredDocumentation", + "src": "4796:125:20", + "text": " @dev Returns this Pool's ID, used when interacting with the Vault (to e.g. join the Pool or swap with it)." + }, + "functionSelector": "38fff2d0", + "id": 1365, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolId", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1361, + "nodeType": "ParameterList", + "parameters": [], + "src": "4944:2:20" + }, + "returnParameters": { + "id": 1364, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1363, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1365, + "src": "4970:7:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1362, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4970:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4969:9:20" + }, + "scope": 1425, + "src": "4926:53:20", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1366, + "nodeType": "StructuredDocumentation", + "src": "4985:150:20", + "text": " @dev Returns the current swap fee percentage as a 18 decimal fixed point number, so e.g. 1e17 corresponds to a\n 10% swap fee." + }, + "functionSelector": "55c67628", + "id": 1371, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1367, + "nodeType": "ParameterList", + "parameters": [], + "src": "5169:2:20" + }, + "returnParameters": { + "id": 1370, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1369, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1371, + "src": "5195:7:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5195:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5194:9:20" + }, + "scope": 1425, + "src": "5140:64:20", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1372, + "nodeType": "StructuredDocumentation", + "src": "5210:224:20", + "text": " @dev Returns the scaling factors of each of the Pool's tokens. This is an implementation detail that is typically\n not relevant for outside parties, but which might be useful for some types of Pools." + }, + "functionSelector": "1dd746ea", + "id": 1378, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getScalingFactors", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1373, + "nodeType": "ParameterList", + "parameters": [], + "src": "5465:2:20" + }, + "returnParameters": { + "id": 1377, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1376, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1378, + "src": "5491:16:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1374, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5491:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1375, + "nodeType": "ArrayTypeName", + "src": "5491:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5490:18:20" + }, + "scope": 1425, + "src": "5439:70:20", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "87ec6817", + "id": 1401, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "queryJoin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1394, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1380, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5543:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1379, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5543:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1382, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5567:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1381, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5567:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1384, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5591:17:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1383, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5591:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1387, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5618:25:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1385, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5618:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1386, + "nodeType": "ArrayTypeName", + "src": "5618:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1389, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5653:23:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5653:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1391, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5686:33:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5686:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1393, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5729:21:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1392, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5729:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5533:223:20" + }, + "returnParameters": { + "id": 1400, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1396, + "mutability": "mutable", + "name": "bptOut", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5775:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5775:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1399, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 1401, + "src": "5791:26:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1397, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5791:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1398, + "nodeType": "ArrayTypeName", + "src": "5791:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5774:44:20" + }, + "scope": 1425, + "src": "5515:304:20", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "6028bfd4", + "id": 1424, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "queryExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1417, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1403, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "5853:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1402, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5853:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1405, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "5877:14:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1404, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5877:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1407, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "5901:17:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1406, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5901:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1410, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "5928:25:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1408, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5928:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1409, + "nodeType": "ArrayTypeName", + "src": "5928:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1412, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "5963:23:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1411, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5963:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1414, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "5996:33:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1413, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5996:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1416, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "6039:21:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1415, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6039:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5843:223:20" + }, + "returnParameters": { + "id": 1423, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1419, + "mutability": "mutable", + "name": "bptIn", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "6085:13:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1418, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6085:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1422, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 1424, + "src": "6100:27:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1420, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6100:7:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1421, + "nodeType": "ArrayTypeName", + "src": "6100:9:20", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6084:44:20" + }, + "scope": 1425, + "src": "5825:304:20", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1426, + "src": "1089:5042:20" + } + ], + "src": "688:5444:20" + }, + "id": 20 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol", + "exportedSymbols": { + "IFlashLoanRecipient": [ + 1444 + ] + }, + "id": 1445, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1427, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:21" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1428, + "nodeType": "ImportDirective", + "scope": 1445, + "sourceUnit": 1153, + "src": "765:51:21", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1444, + "linearizedBaseContracts": [ + 1444 + ], + "name": "IFlashLoanRecipient", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1429, + "nodeType": "StructuredDocumentation", + "src": "854:496:21", + "text": " @dev When `flashLoan` is called on the Vault, it invokes the `receiveFlashLoan` hook on the recipient.\n At the time of the call, the Vault will have transferred `amounts` for `tokens` to the recipient. Before this\n call returns, the recipient must have transferred `amounts` plus `feeAmounts` for each token back to the\n Vault, or else the entire flash loan will revert.\n `userData` is the same value passed in the `IVault.flashLoan` call." + }, + "functionSelector": "f04f2707", + "id": 1443, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "receiveFlashLoan", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1441, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1432, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "1390:22:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1430, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1390:6:21", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1431, + "nodeType": "ArrayTypeName", + "src": "1390:8:21", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1435, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "1422:24:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1422:7:21", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1434, + "nodeType": "ArrayTypeName", + "src": "1422:9:21", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1438, + "mutability": "mutable", + "name": "feeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "1456:27:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1436, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1456:7:21", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1437, + "nodeType": "ArrayTypeName", + "src": "1456:9:21", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1440, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1443, + "src": "1493:21:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1439, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1493:5:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1380:140:21" + }, + "returnParameters": { + "id": 1442, + "nodeType": "ParameterList", + "parameters": [], + "src": "1529:0:21" + }, + "scope": 1444, + "src": "1355:175:21", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1445, + "src": "818:714:21" + } + ], + "src": "688:845:21" + }, + "id": 21 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol", + "exportedSymbols": { + "IGeneralPool": [ + 1466 + ] + }, + "id": 1467, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1446, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:22" + }, + { + "id": 1447, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:22" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol", + "file": "./IBasePool.sol", + "id": 1448, + "nodeType": "ImportDirective", + "scope": 1467, + "sourceUnit": 1426, + "src": "747:25:22", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1450, + "name": "IBasePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1425, + "src": "1407:9:22", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBasePool_$1425", + "typeString": "contract IBasePool" + } + }, + "id": 1451, + "nodeType": "InheritanceSpecifier", + "src": "1407:9:22" + } + ], + "contractDependencies": [ + 1425, + 1491 + ], + "contractKind": "interface", + "documentation": { + "id": 1449, + "nodeType": "StructuredDocumentation", + "src": "774:606:22", + "text": " @dev IPools with the General specialization setting should implement this interface.\n This is called by the Vault when a user calls `IVault.swap` or `IVault.batchSwap` to swap with this Pool.\n Returns the number of tokens the Pool will grant to the user in a 'given in' swap, or that the user will\n grant to the pool in a 'given out' swap.\n This can often be implemented by a `view` function, since many pricing algorithms don't need to track state\n changes in swaps. However, contracts implementing this in non-view functions should check that the caller is\n indeed the Vault." + }, + "fullyImplemented": false, + "id": 1466, + "linearizedBaseContracts": [ + 1466, + 1425, + 1491 + ], + "name": "IGeneralPool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "functionSelector": "01ec954a", + "id": 1465, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1461, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1453, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 1465, + "src": "1448:30:22", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 1452, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "1448:11:22", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1456, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 1465, + "src": "1488:25:22", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1454, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1488:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1455, + "nodeType": "ArrayTypeName", + "src": "1488:9:22", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1458, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 1465, + "src": "1523:15:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1457, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1523:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1460, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 1465, + "src": "1548:16:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1459, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1548:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1438:132:22" + }, + "returnParameters": { + "id": 1464, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1463, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1465, + "src": "1589:14:22", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1462, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1589:7:22", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1588:16:22" + }, + "scope": 1466, + "src": "1423:182:22", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1467, + "src": "1381:226:22" + } + ], + "src": "688:920:22" + }, + "id": 22 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IPoolSwapStructs.sol", + "exportedSymbols": { + "IPoolSwapStructs": [ + 1491 + ] + }, + "id": 1492, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1468, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:23" + }, + { + "id": 1469, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:23" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1470, + "nodeType": "ImportDirective", + "scope": 1492, + "sourceUnit": 1153, + "src": "747:51:23", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 1471, + "nodeType": "ImportDirective", + "scope": 1492, + "sourceUnit": 2022, + "src": "800:22:23", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": true, + "id": 1491, + "linearizedBaseContracts": [ + 1491 + ], + "name": "IPoolSwapStructs", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "IPoolSwapStructs.SwapRequest", + "id": 1490, + "members": [ + { + "constant": false, + "id": 1473, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2357:20:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 1472, + "name": "IVault.SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1845, + "src": "2357:15:23", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1475, + "mutability": "mutable", + "name": "tokenIn", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2387:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1474, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2387:6:23", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1477, + "mutability": "mutable", + "name": "tokenOut", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2411:15:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1476, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2411:6:23", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1479, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2436:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1478, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2436:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1481, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2481:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1480, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2481:7:23", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1483, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2505:23:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1482, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2505:7:23", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1485, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2538:12:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1484, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2538:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1487, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2560:10:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1486, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2560:7:23", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1489, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1490, + "src": "2580:14:23", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1488, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2580:5:23", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "SwapRequest", + "nodeType": "StructDefinition", + "scope": 1491, + "src": "2328:273:23", + "visibility": "public" + } + ], + "scope": 1492, + "src": "824:1779:23" + } + ], + "src": "688:1916:23" + }, + "id": 23 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol", + "exportedSymbols": { + "IProtocolFeesCollector": [ + 1556 + ] + }, + "id": 1557, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1493, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:24" + }, + { + "id": 1494, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:24" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1495, + "nodeType": "ImportDirective", + "scope": 1557, + "sourceUnit": 1153, + "src": "747:51:24", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "./IVault.sol", + "id": 1496, + "nodeType": "ImportDirective", + "scope": 1557, + "sourceUnit": 2022, + "src": "800:22:24", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 1497, + "nodeType": "ImportDirective", + "scope": 1557, + "sourceUnit": 1302, + "src": "823:27:24", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "fullyImplemented": false, + "id": 1556, + "linearizedBaseContracts": [ + 1556 + ], + "name": "IProtocolFeesCollector", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "id": 1501, + "name": "SwapFeePercentageChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1500, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1499, + "indexed": false, + "mutability": "mutable", + "name": "newSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1501, + "src": "922:28:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1498, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "922:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "921:30:24" + }, + "src": "891:61:24" + }, + { + "anonymous": false, + "id": 1505, + "name": "FlashLoanFeePercentageChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1504, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1503, + "indexed": false, + "mutability": "mutable", + "name": "newFlashLoanFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1505, + "src": "993:33:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1502, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "993:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "992:35:24" + }, + "src": "957:71:24" + }, + { + "functionSelector": "6daefab6", + "id": 1516, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "withdrawCollectedFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1514, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1508, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1516, + "src": "1074:24:24", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_calldata_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1506, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1074:6:24", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1507, + "nodeType": "ArrayTypeName", + "src": "1074:8:24", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1511, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 1516, + "src": "1108:26:24", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1509, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1108:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1510, + "nodeType": "ArrayTypeName", + "src": "1108:9:24", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1513, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1516, + "src": "1144:17:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1512, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1144:7:24", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1064:103:24" + }, + "returnParameters": { + "id": 1515, + "nodeType": "ParameterList", + "parameters": [], + "src": "1176:0:24" + }, + "scope": 1556, + "src": "1034:143:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "38e9922e", + "id": 1521, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1519, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1518, + "mutability": "mutable", + "name": "newSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1521, + "src": "1213:28:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1517, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1213:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1212:30:24" + }, + "returnParameters": { + "id": 1520, + "nodeType": "ParameterList", + "parameters": [], + "src": "1251:0:24" + }, + "scope": 1556, + "src": "1183:69:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "6b6b9f69", + "id": 1526, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setFlashLoanFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1524, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1523, + "mutability": "mutable", + "name": "newFlashLoanFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 1526, + "src": "1293:33:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1293:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1292:35:24" + }, + "returnParameters": { + "id": 1525, + "nodeType": "ParameterList", + "parameters": [], + "src": "1336:0:24" + }, + "scope": 1556, + "src": "1258:79:24", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "55c67628", + "id": 1531, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1527, + "nodeType": "ParameterList", + "parameters": [], + "src": "1372:2:24" + }, + "returnParameters": { + "id": 1530, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1529, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1531, + "src": "1398:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1528, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1398:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1397:9:24" + }, + "scope": 1556, + "src": "1343:64:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "d877845c", + "id": 1536, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getFlashLoanFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1532, + "nodeType": "ParameterList", + "parameters": [], + "src": "1447:2:24" + }, + "returnParameters": { + "id": 1535, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1534, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1536, + "src": "1473:7:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1533, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1473:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1472:9:24" + }, + "scope": 1556, + "src": "1413:69:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "e42abf35", + "id": 1545, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getCollectedFeeAmounts", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1540, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1539, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1545, + "src": "1520:22:24", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1537, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1520:6:24", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1538, + "nodeType": "ArrayTypeName", + "src": "1520:8:24", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "1519:24:24" + }, + "returnParameters": { + "id": 1544, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1543, + "mutability": "mutable", + "name": "feeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1545, + "src": "1567:27:24", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1541, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1567:7:24", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1542, + "nodeType": "ArrayTypeName", + "src": "1567:9:24", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "1566:29:24" + }, + "scope": 1556, + "src": "1488:108:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "aaabadc5", + "id": 1550, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1546, + "nodeType": "ParameterList", + "parameters": [], + "src": "1624:2:24" + }, + "returnParameters": { + "id": 1549, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1548, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1550, + "src": "1650:11:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1547, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "1650:11:24", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1649:13:24" + }, + "scope": 1556, + "src": "1602:61:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "functionSelector": "fbfa77cf", + "id": 1555, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "vault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1551, + "nodeType": "ParameterList", + "parameters": [], + "src": "1683:2:24" + }, + "returnParameters": { + "id": 1554, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1553, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1555, + "src": "1709:6:24", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 1552, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1709:6:24", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1708:8:24" + }, + "scope": 1556, + "src": "1669:48:24", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 1557, + "src": "852:867:24" + } + ], + "src": "688:1032:24" + }, + "id": 24 + }, + "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "exportedSymbols": { + "IVault": [ + 2021 + ] + }, + "id": 2022, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1558, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "688:33:25" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "../solidity-utils/openzeppelin/IERC20.sol", + "id": 1559, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1153, + "src": "723:51:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "../solidity-utils/helpers/IAuthentication.sol", + "id": 1560, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1023, + "src": "775:55:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol", + "file": "../solidity-utils/helpers/ISignaturesValidator.sol", + "id": 1561, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1041, + "src": "831:60:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol", + "file": "../solidity-utils/helpers/ITemporarilyPausable.sol", + "id": 1562, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1060, + "src": "892:60:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/misc/IWETH.sol", + "file": "../solidity-utils/misc/IWETH.sol", + "id": 1563, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1075, + "src": "953:42:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol", + "file": "./IAsset.sol", + "id": 1564, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1287, + "src": "997:22:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "file": "./IAuthorizer.sol", + "id": 1565, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1302, + "src": "1020:27:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol", + "file": "./IFlashLoanRecipient.sol", + "id": 1566, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1445, + "src": "1048:35:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IProtocolFeesCollector.sol", + "file": "./IProtocolFeesCollector.sol", + "id": 1567, + "nodeType": "ImportDirective", + "scope": 2022, + "sourceUnit": 1557, + "src": "1084:38:25", + "symbolAliases": [], + "unitAlias": "" + }, + { + "id": 1568, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "1124:23:25" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 1570, + "name": "ISignaturesValidator", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1040, + "src": "1341:20:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISignaturesValidator_$1040", + "typeString": "contract ISignaturesValidator" + } + }, + "id": 1571, + "nodeType": "InheritanceSpecifier", + "src": "1341:20:25" + }, + { + "baseName": { + "id": 1572, + "name": "ITemporarilyPausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1059, + "src": "1363:20:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITemporarilyPausable_$1059", + "typeString": "contract ITemporarilyPausable" + } + }, + "id": 1573, + "nodeType": "InheritanceSpecifier", + "src": "1363:20:25" + }, + { + "baseName": { + "id": 1574, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1022, + "src": "1385:15:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1022", + "typeString": "contract IAuthentication" + } + }, + "id": 1575, + "nodeType": "InheritanceSpecifier", + "src": "1385:15:25" + } + ], + "contractDependencies": [ + 1022, + 1040, + 1059 + ], + "contractKind": "interface", + "documentation": { + "id": 1569, + "nodeType": "StructuredDocumentation", + "src": "1149:171:25", + "text": " @dev Full external interface for the Vault core contract - no external or public methods exist in the contract that\n don't override one of these declarations." + }, + "fullyImplemented": false, + "id": 2021, + "linearizedBaseContracts": [ + 2021, + 1022, + 1059, + 1040 + ], + "name": "IVault", + "nodeType": "ContractDefinition", + "nodes": [ + { + "documentation": { + "id": 1576, + "nodeType": "StructuredDocumentation", + "src": "2898:55:25", + "text": " @dev Returns the Vault's Authorizer." + }, + "functionSelector": "aaabadc5", + "id": 1581, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1577, + "nodeType": "ParameterList", + "parameters": [], + "src": "2980:2:25" + }, + "returnParameters": { + "id": 1580, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1579, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1581, + "src": "3006:11:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1578, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "3006:11:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "3005:13:25" + }, + "scope": 2021, + "src": "2958:61:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1582, + "nodeType": "StructuredDocumentation", + "src": "3025:175:25", + "text": " @dev Sets a new Authorizer for the Vault. The caller must be allowed by the current Authorizer to do this.\n Emits an `AuthorizerChanged` event." + }, + "functionSelector": "058a628f", + "id": 1587, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1585, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1584, + "mutability": "mutable", + "name": "newAuthorizer", + "nodeType": "VariableDeclaration", + "scope": 1587, + "src": "3228:25:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1583, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "3228:11:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "3227:27:25" + }, + "returnParameters": { + "id": 1586, + "nodeType": "ParameterList", + "parameters": [], + "src": "3263:0:25" + }, + "scope": 2021, + "src": "3205:59:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1588, + "nodeType": "StructuredDocumentation", + "src": "3270:80:25", + "text": " @dev Emitted when a new authorizer is set by `setAuthorizer`." + }, + "id": 1592, + "name": "AuthorizerChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1591, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1590, + "indexed": true, + "mutability": "mutable", + "name": "newAuthorizer", + "nodeType": "VariableDeclaration", + "scope": 1592, + "src": "3379:33:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 1589, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "3379:11:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "3378:35:25" + }, + "src": "3355:59:25" + }, + { + "documentation": { + "id": 1593, + "nodeType": "StructuredDocumentation", + "src": "4510:99:25", + "text": " @dev Returns true if `user` has approved `relayer` to act as a relayer for them." + }, + "functionSelector": "fec90d72", + "id": 1602, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "hasApprovedRelayer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1598, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1595, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1602, + "src": "4642:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1594, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4642:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1597, + "mutability": "mutable", + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 1602, + "src": "4656:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1596, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4656:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4641:31:25" + }, + "returnParameters": { + "id": 1601, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1600, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1602, + "src": "4696:4:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1599, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4696:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4695:6:25" + }, + "scope": 2021, + "src": "4614:88:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1603, + "nodeType": "StructuredDocumentation", + "src": "4708:178:25", + "text": " @dev Allows `relayer` to act as a relayer for `sender` if `approved` is true, and disallows it otherwise.\n Emits a `RelayerApprovalChanged` event." + }, + "functionSelector": "fa6e671d", + "id": 1612, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setRelayerApproval", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1610, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1605, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1612, + "src": "4928:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1604, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4928:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1607, + "mutability": "mutable", + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 1612, + "src": "4952:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1606, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4952:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1609, + "mutability": "mutable", + "name": "approved", + "nodeType": "VariableDeclaration", + "scope": 1612, + "src": "4977:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1608, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4977:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4918:78:25" + }, + "returnParameters": { + "id": 1611, + "nodeType": "ParameterList", + "parameters": [], + "src": "5005:0:25" + }, + "scope": 2021, + "src": "4891:115:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1613, + "nodeType": "StructuredDocumentation", + "src": "5012:104:25", + "text": " @dev Emitted every time a relayer is approved or disapproved by `setRelayerApproval`." + }, + "id": 1621, + "name": "RelayerApprovalChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1620, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1615, + "indexed": true, + "mutability": "mutable", + "name": "relayer", + "nodeType": "VariableDeclaration", + "scope": 1621, + "src": "5150:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1614, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5150:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1617, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1621, + "src": "5175:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1616, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5175:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1619, + "indexed": false, + "mutability": "mutable", + "name": "approved", + "nodeType": "VariableDeclaration", + "scope": 1621, + "src": "5199:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1618, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5199:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5149:64:25" + }, + "src": "5121:93:25" + }, + { + "documentation": { + "id": 1622, + "nodeType": "StructuredDocumentation", + "src": "5922:78:25", + "text": " @dev Returns `user`'s Internal Balance for a set of tokens." + }, + "functionSelector": "0f5a6efa", + "id": 1633, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getInternalBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1628, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1624, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "6033:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1623, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6033:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1627, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "6047:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1625, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "6047:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1626, + "nodeType": "ArrayTypeName", + "src": "6047:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "6032:38:25" + }, + "returnParameters": { + "id": 1632, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1631, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1633, + "src": "6094:16:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6094:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1630, + "nodeType": "ArrayTypeName", + "src": "6094:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6093:18:25" + }, + "scope": 2021, + "src": "6005:107:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1634, + "nodeType": "StructuredDocumentation", + "src": "6118:416:25", + "text": " @dev Performs a set of user balance operations, which involve Internal Balance (deposit, withdraw or transfer)\n and plain ERC20 transfers using the Vault's allowance. This last feature is particularly useful for relayers, as\n it lets integrators reuse a user's Vault allowance.\n For each operation, if the caller is not `sender`, it must be an authorized relayer for them." + }, + "functionSelector": "0e8e3e84", + "id": 1640, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "manageUserBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1638, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1637, + "mutability": "mutable", + "name": "ops", + "nodeType": "VariableDeclaration", + "scope": 1640, + "src": "6566:26:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_UserBalanceOp_$1651_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.UserBalanceOp[]" + }, + "typeName": { + "baseType": { + "id": 1635, + "name": "UserBalanceOp", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1651, + "src": "6566:13:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserBalanceOp_$1651_storage_ptr", + "typeString": "struct IVault.UserBalanceOp" + } + }, + "id": 1636, + "nodeType": "ArrayTypeName", + "src": "6566:15:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_UserBalanceOp_$1651_storage_$dyn_storage_ptr", + "typeString": "struct IVault.UserBalanceOp[]" + } + }, + "visibility": "internal" + } + ], + "src": "6565:28:25" + }, + "returnParameters": { + "id": 1639, + "nodeType": "ParameterList", + "parameters": [], + "src": "6610:0:25" + }, + "scope": 2021, + "src": "6539:72:25", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.UserBalanceOp", + "id": 1651, + "members": [ + { + "constant": false, + "id": 1642, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1651, + "src": "6828:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_UserBalanceOpKind_$1656", + "typeString": "enum IVault.UserBalanceOpKind" + }, + "typeName": { + "id": 1641, + "name": "UserBalanceOpKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1656, + "src": "6828:17:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_UserBalanceOpKind_$1656", + "typeString": "enum IVault.UserBalanceOpKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1644, + "mutability": "mutable", + "name": "asset", + "nodeType": "VariableDeclaration", + "scope": 1651, + "src": "6860:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + }, + "typeName": { + "id": 1643, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "6860:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1646, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1651, + "src": "6882:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1645, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6882:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1648, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1651, + "src": "6906:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1647, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6906:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1650, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1651, + "src": "6930:25:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 1649, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6930:15:25", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "name": "UserBalanceOp", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "6797:165:25", + "visibility": "public" + }, + { + "canonicalName": "IVault.UserBalanceOpKind", + "id": 1656, + "members": [ + { + "id": 1652, + "name": "DEPOSIT_INTERNAL", + "nodeType": "EnumValue", + "src": "8600:16:25" + }, + { + "id": 1653, + "name": "WITHDRAW_INTERNAL", + "nodeType": "EnumValue", + "src": "8618:17:25" + }, + { + "id": 1654, + "name": "TRANSFER_INTERNAL", + "nodeType": "EnumValue", + "src": "8637:17:25" + }, + { + "id": 1655, + "name": "TRANSFER_EXTERNAL", + "nodeType": "EnumValue", + "src": "8656:17:25" + } + ], + "name": "UserBalanceOpKind", + "nodeType": "EnumDefinition", + "src": "8575:100:25" + }, + { + "anonymous": false, + "documentation": { + "id": 1657, + "nodeType": "StructuredDocumentation", + "src": "8681:317:25", + "text": " @dev Emitted when a user's Internal Balance changes, either from calls to `manageUserBalance`, or through\n interacting with Pools using Internal Balance.\n Because Internal Balance works exclusively with ERC20 tokens, ETH deposits and withdrawals will use the WETH\n address." + }, + "id": 1665, + "name": "InternalBalanceChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1664, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1659, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 1665, + "src": "9032:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9032:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1661, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1665, + "src": "9054:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1660, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "9054:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1663, + "indexed": false, + "mutability": "mutable", + "name": "delta", + "nodeType": "VariableDeclaration", + "scope": 1665, + "src": "9076:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1662, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "9076:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "9031:58:25" + }, + "src": "9003:87:25" + }, + { + "anonymous": false, + "documentation": { + "id": 1666, + "nodeType": "StructuredDocumentation", + "src": "9096:131:25", + "text": " @dev Emitted when a user's Vault ERC20 allowance is used by the Vault to transfer tokens to an external account." + }, + "id": 1676, + "name": "ExternalBalanceTransfer", + "nodeType": "EventDefinition", + "parameters": { + "id": 1675, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1668, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1676, + "src": "9262:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1667, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "9262:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1670, + "indexed": true, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1676, + "src": "9284:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1669, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9284:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1672, + "indexed": false, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1676, + "src": "9308:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1671, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9308:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1674, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1676, + "src": "9327:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1673, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9327:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9261:81:25" + }, + "src": "9232:111:25" + }, + { + "canonicalName": "IVault.PoolSpecialization", + "id": 1680, + "members": [ + { + "id": 1677, + "name": "GENERAL", + "nodeType": "EnumValue", + "src": "10449:7:25" + }, + { + "id": 1678, + "name": "MINIMAL_SWAP_INFO", + "nodeType": "EnumValue", + "src": "10458:17:25" + }, + { + "id": 1679, + "name": "TWO_TOKEN", + "nodeType": "EnumValue", + "src": "10477:9:25" + } + ], + "name": "PoolSpecialization", + "nodeType": "EnumDefinition", + "src": "10423:65:25" + }, + { + "documentation": { + "id": 1681, + "nodeType": "StructuredDocumentation", + "src": "10494:702:25", + "text": " @dev Registers the caller account as a Pool with a given specialization setting. Returns the Pool's ID, which\n is used in all Pool-related functions. Pools cannot be deregistered, nor can the Pool's specialization be\n changed.\n The caller is expected to be a smart contract that implements either `IGeneralPool` or `IMinimalSwapInfoPool`,\n depending on the chosen specialization setting. This contract is known as the Pool's contract.\n Note that the same contract may register itself as multiple Pools with unique Pool IDs, or in other words,\n multiple Pools may share the same contract.\n Emits a `PoolRegistered` event." + }, + "functionSelector": "09b2760f", + "id": 1688, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1684, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1683, + "mutability": "mutable", + "name": "specialization", + "nodeType": "VariableDeclaration", + "scope": 1688, + "src": "11223:33:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 1682, + "name": "PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1680, + "src": "11223:18:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + } + ], + "src": "11222:35:25" + }, + "returnParameters": { + "id": 1687, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1686, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1688, + "src": "11276:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1685, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11276:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11275:9:25" + }, + "scope": 2021, + "src": "11201:84:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1689, + "nodeType": "StructuredDocumentation", + "src": "11291:84:25", + "text": " @dev Emitted when a Pool is registered by calling `registerPool`." + }, + "id": 1697, + "name": "PoolRegistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 1696, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1691, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1697, + "src": "11401:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1690, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11401:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1693, + "indexed": true, + "mutability": "mutable", + "name": "poolAddress", + "nodeType": "VariableDeclaration", + "scope": 1697, + "src": "11425:27:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1692, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11425:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1695, + "indexed": false, + "mutability": "mutable", + "name": "specialization", + "nodeType": "VariableDeclaration", + "scope": 1697, + "src": "11454:33:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 1694, + "name": "PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1680, + "src": "11454:18:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + } + ], + "src": "11400:88:25" + }, + "src": "11380:109:25" + }, + { + "documentation": { + "id": 1698, + "nodeType": "StructuredDocumentation", + "src": "11495:85:25", + "text": " @dev Returns a Pool's contract address and specialization setting." + }, + "functionSelector": "f6c00927", + "id": 1707, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1701, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1700, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1707, + "src": "11602:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1699, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11602:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11601:16:25" + }, + "returnParameters": { + "id": 1706, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1703, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1707, + "src": "11641:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1702, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11641:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1705, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1707, + "src": "11650:18:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 1704, + "name": "PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1680, + "src": "11650:18:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + } + ], + "src": "11640:29:25" + }, + "scope": 2021, + "src": "11585:85:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1708, + "nodeType": "StructuredDocumentation", + "src": "11676:1422:25", + "text": " @dev Registers `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n Pools can only interact with tokens they have registered. Users join a Pool by transferring registered tokens,\n exit by receiving registered tokens, and can only swap registered tokens.\n Each token can only be registered once. For Pools with the Two Token specialization, `tokens` must have a length\n of two, that is, both tokens must be registered in the same `registerTokens` call, and they must be sorted in\n ascending order.\n The `tokens` and `assetManagers` arrays must have the same length, and each entry in these indicates the Asset\n Manager for the corresponding token. Asset Managers can manage a Pool's tokens via `managePoolBalance`,\n depositing and withdrawing them directly, and can even set their balance to arbitrary amounts. They are therefore\n expected to be highly secured smart contracts with sound design principles, and the decision to register an\n Asset Manager should not be made lightly.\n Pools can choose not to assign an Asset Manager to a given token by passing in the zero address. Once an Asset\n Manager is set, it cannot be changed except by deregistering the associated token and registering again with a\n different Asset Manager.\n Emits a `TokensRegistered` event." + }, + "functionSelector": "66a9c7d2", + "id": 1719, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "registerTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1717, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1710, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1719, + "src": "13136:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1709, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13136:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1713, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1719, + "src": "13160:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1711, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "13160:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1712, + "nodeType": "ArrayTypeName", + "src": "13160:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1716, + "mutability": "mutable", + "name": "assetManagers", + "nodeType": "VariableDeclaration", + "scope": 1719, + "src": "13192:30:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 1714, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13192:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1715, + "nodeType": "ArrayTypeName", + "src": "13192:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "13126:102:25" + }, + "returnParameters": { + "id": 1718, + "nodeType": "ParameterList", + "parameters": [], + "src": "13237:0:25" + }, + "scope": 2021, + "src": "13103:135:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1720, + "nodeType": "StructuredDocumentation", + "src": "13244:89:25", + "text": " @dev Emitted when a Pool registers tokens by calling `registerTokens`." + }, + "id": 1730, + "name": "TokensRegistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 1729, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1722, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1730, + "src": "13361:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1721, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13361:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1725, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1730, + "src": "13385:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1723, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "13385:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1724, + "nodeType": "ArrayTypeName", + "src": "13385:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1728, + "indexed": false, + "mutability": "mutable", + "name": "assetManagers", + "nodeType": "VariableDeclaration", + "scope": 1730, + "src": "13402:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 1726, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13402:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 1727, + "nodeType": "ArrayTypeName", + "src": "13402:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "13360:66:25" + }, + "src": "13338:89:25" + }, + { + "documentation": { + "id": 1731, + "nodeType": "StructuredDocumentation", + "src": "13433:567:25", + "text": " @dev Deregisters `tokens` for the `poolId` Pool. Must be called by the Pool's contract.\n Only registered tokens (via `registerTokens`) can be deregistered. Additionally, they must have zero total\n balance. For Pools with the Two Token specialization, `tokens` must have a length of two, that is, both tokens\n must be deregistered in the same `deregisterTokens` call.\n A deregistered token can be re-registered later on, possibly with a different Asset Manager.\n Emits a `TokensDeregistered` event." + }, + "functionSelector": "7d3aeb96", + "id": 1739, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deregisterTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1737, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1733, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1739, + "src": "14031:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1732, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14031:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1736, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1739, + "src": "14047:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1734, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "14047:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1735, + "nodeType": "ArrayTypeName", + "src": "14047:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "14030:40:25" + }, + "returnParameters": { + "id": 1738, + "nodeType": "ParameterList", + "parameters": [], + "src": "14079:0:25" + }, + "scope": 2021, + "src": "14005:75:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1740, + "nodeType": "StructuredDocumentation", + "src": "14086:93:25", + "text": " @dev Emitted when a Pool deregisters tokens by calling `deregisterTokens`." + }, + "id": 1747, + "name": "TokensDeregistered", + "nodeType": "EventDefinition", + "parameters": { + "id": 1746, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1742, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1747, + "src": "14209:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1741, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "14209:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1745, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1747, + "src": "14233:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1743, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "14233:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1744, + "nodeType": "ArrayTypeName", + "src": "14233:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "14208:41:25" + }, + "src": "14184:66:25" + }, + { + "documentation": { + "id": 1748, + "nodeType": "StructuredDocumentation", + "src": "14256:1043:25", + "text": " @dev Returns detailed information for a Pool's registered token.\n `cash` is the number of tokens the Vault currently holds for the Pool. `managed` is the number of tokens\n withdrawn and held outside the Vault by the Pool's token Asset Manager. The Pool's total balance for `token`\n equals the sum of `cash` and `managed`.\n Internally, `cash` and `managed` are stored using 112 bits. No action can ever cause a Pool's token `cash`,\n `managed` or `total` balance to be greater than 2^112 - 1.\n `lastChangeBlock` is the number of the block in which `token`'s total balance was last modified (via either a\n join, exit, swap, or Asset Manager update). This value is useful to avoid so-called 'sandwich attacks', for\n example when developing price oracles. A change of zero (e.g. caused by a swap with amount zero) is considered a\n change for this purpose, and will update `lastChangeBlock`.\n `assetManager` is the Pool's token Asset Manager." + }, + "functionSelector": "b05f8e48", + "id": 1763, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokenInfo", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1753, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1750, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1763, + "src": "15330:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1749, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "15330:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1752, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1763, + "src": "15346:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1751, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "15346:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "15329:30:25" + }, + "returnParameters": { + "id": 1762, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1755, + "mutability": "mutable", + "name": "cash", + "nodeType": "VariableDeclaration", + "scope": 1763, + "src": "15420:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1754, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15420:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1757, + "mutability": "mutable", + "name": "managed", + "nodeType": "VariableDeclaration", + "scope": 1763, + "src": "15446:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1756, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15446:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1759, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1763, + "src": "15475:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1758, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15475:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1761, + "mutability": "mutable", + "name": "assetManager", + "nodeType": "VariableDeclaration", + "scope": 1763, + "src": "15512:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1760, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15512:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "15406:136:25" + }, + "scope": 2021, + "src": "15304:239:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1764, + "nodeType": "StructuredDocumentation", + "src": "15549:828:25", + "text": " @dev Returns a Pool's registered tokens, the total balance for each, and the latest block when *any* of\n the tokens' `balances` changed.\n The order of the `tokens` array is the same order that will be used in `joinPool`, `exitPool`, as well as in all\n Pool hooks (where applicable). Calls to `registerTokens` and `deregisterTokens` may change this order.\n If a Pool only registers tokens once, and these are sorted in ascending order, they will be stored in the same\n order as passed to `registerTokens`.\n Total balances include both tokens held by the Vault and those withdrawn by the Pool's Asset Managers. These are\n the amounts used by joins, exits and swaps. For a detailed breakdown of token balances, use `getPoolTokenInfo`\n instead." + }, + "functionSelector": "f94d4668", + "id": 1777, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getPoolTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1766, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1777, + "src": "16405:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1765, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16405:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "16404:16:25" + }, + "returnParameters": { + "id": 1776, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1770, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1777, + "src": "16481:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1768, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "16481:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1769, + "nodeType": "ArrayTypeName", + "src": "16481:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1773, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 1777, + "src": "16517:25:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1771, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16517:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1772, + "nodeType": "ArrayTypeName", + "src": "16517:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1775, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 1777, + "src": "16556:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1774, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16556:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16467:122:25" + }, + "scope": 2021, + "src": "16382:208:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1778, + "nodeType": "StructuredDocumentation", + "src": "16596:2304:25", + "text": " @dev Called by users to join a Pool, which transfers tokens from `sender` into the Pool's balance. This will\n trigger custom Pool behavior, which will typically grant something in return to `recipient` - often tokenized\n Pool shares.\n If the caller is not `sender`, it must be an authorized relayer for them.\n The `assets` and `maxAmountsIn` arrays must have the same length, and each entry indicates the maximum amount\n to send for each asset. The amounts to send are decided by the Pool and not the Vault: it just enforces\n these maximums.\n If joining a Pool that holds WETH, it is possible to send ETH directly: the Vault will do the wrapping. To enable\n this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead of the\n WETH address. Note that it is not possible to combine ETH and WETH in the same join. Any excess ETH will be sent\n back to the caller (not the sender, which is important for relayers).\n `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n interacting with Pools that register and deregister tokens frequently. If sending ETH however, the array must be\n sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the final\n `assets` array might not be sorted. Pools with no registered tokens cannot be joined.\n If `fromInternalBalance` is true, the caller's Internal Balance will be preferred: ERC20 transfers will only\n be made for the difference between the requested amount and Internal Balance (if any). Note that ETH cannot be\n withdrawn from Internal Balance: attempting to do so will trigger a revert.\n This causes the Vault to call the `IBasePool.onJoinPool` hook on the Pool's contract, where Pools implement\n their own custom logic. This typically requires additional information from the user (such as the expected number\n of Pool shares). This can be encoded in the `userData` argument, which is ignored by the Vault and passed\n directly to the Pool's contract, as is `recipient`.\n Emits a `PoolBalanceChanged` event." + }, + "functionSelector": "b95cac28", + "id": 1789, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "joinPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1787, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1780, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1789, + "src": "18932:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1779, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "18932:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1782, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1789, + "src": "18956:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1781, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18956:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1784, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1789, + "src": "18980:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1783, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18980:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1786, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 1789, + "src": "19007:30:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_JoinPoolRequest_$1800_memory_ptr", + "typeString": "struct IVault.JoinPoolRequest" + }, + "typeName": { + "id": 1785, + "name": "JoinPoolRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1800, + "src": "19007:15:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_JoinPoolRequest_$1800_storage_ptr", + "typeString": "struct IVault.JoinPoolRequest" + } + }, + "visibility": "internal" + } + ], + "src": "18922:121:25" + }, + "returnParameters": { + "id": 1788, + "nodeType": "ParameterList", + "parameters": [], + "src": "19060:0:25" + }, + "scope": 2021, + "src": "18905:156:25", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.JoinPoolRequest", + "id": 1800, + "members": [ + { + "constant": false, + "id": 1792, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "19100:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 1790, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "19100:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "id": 1791, + "nodeType": "ArrayTypeName", + "src": "19100:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1795, + "mutability": "mutable", + "name": "maxAmountsIn", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "19125:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1793, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19125:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1794, + "nodeType": "ArrayTypeName", + "src": "19125:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1797, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "19157:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1796, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "19157:5:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1799, + "mutability": "mutable", + "name": "fromInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 1800, + "src": "19181:24:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1798, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19181:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "JoinPoolRequest", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "19067:145:25", + "visibility": "public" + }, + { + "documentation": { + "id": 1801, + "nodeType": "StructuredDocumentation", + "src": "19218:2489:25", + "text": " @dev Called by users to exit a Pool, which transfers tokens from the Pool's balance to `recipient`. This will\n trigger custom Pool behavior, which will typically ask for something in return from `sender` - often tokenized\n Pool shares. The amount of tokens that can be withdrawn is limited by the Pool's `cash` balance (see\n `getPoolTokenInfo`).\n If the caller is not `sender`, it must be an authorized relayer for them.\n The `tokens` and `minAmountsOut` arrays must have the same length, and each entry in these indicates the minimum\n token amount to receive for each token contract. The amounts to send are decided by the Pool and not the Vault:\n it just enforces these minimums.\n If exiting a Pool that holds WETH, it is possible to receive ETH directly: the Vault will do the unwrapping. To\n enable this mechanism, the IAsset sentinel value (the zero address) must be passed in the `assets` array instead\n of the WETH address. Note that it is not possible to combine ETH and WETH in the same exit.\n `assets` must have the same length and order as the array returned by `getPoolTokens`. This prevents issues when\n interacting with Pools that register and deregister tokens frequently. If receiving ETH however, the array must\n be sorted *before* replacing the WETH address with the ETH sentinel value (the zero address), which means the\n final `assets` array might not be sorted. Pools with no registered tokens cannot be exited.\n If `toInternalBalance` is true, the tokens will be deposited to `recipient`'s Internal Balance. Otherwise,\n an ERC20 transfer will be performed. Note that ETH cannot be deposited to Internal Balance: attempting to\n do so will trigger a revert.\n `minAmountsOut` is the minimum amount of tokens the user expects to get out of the Pool, for each token in the\n `tokens` array. This array must match the Pool's registered tokens.\n This causes the Vault to call the `IBasePool.onExitPool` hook on the Pool's contract, where Pools implement\n their own custom logic. This typically requires additional information from the user (such as the expected number\n of Pool shares to return). This can be encoded in the `userData` argument, which is ignored by the Vault and\n passed directly to the Pool's contract.\n Emits a `PoolBalanceChanged` event." + }, + "functionSelector": "8bdb3913", + "id": 1812, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "exitPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1810, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1803, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1812, + "src": "21739:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1802, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "21739:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1805, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1812, + "src": "21763:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1804, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21763:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1807, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1812, + "src": "21787:25:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 1806, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21787:15:25", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1809, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 1812, + "src": "21822:30:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ExitPoolRequest_$1823_memory_ptr", + "typeString": "struct IVault.ExitPoolRequest" + }, + "typeName": { + "id": 1808, + "name": "ExitPoolRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1823, + "src": "21822:15:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ExitPoolRequest_$1823_storage_ptr", + "typeString": "struct IVault.ExitPoolRequest" + } + }, + "visibility": "internal" + } + ], + "src": "21729:129:25" + }, + "returnParameters": { + "id": 1811, + "nodeType": "ParameterList", + "parameters": [], + "src": "21867:0:25" + }, + "scope": 2021, + "src": "21712:156:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.ExitPoolRequest", + "id": 1823, + "members": [ + { + "constant": false, + "id": 1815, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 1823, + "src": "21907:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 1813, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "21907:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "id": 1814, + "nodeType": "ArrayTypeName", + "src": "21907:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1818, + "mutability": "mutable", + "name": "minAmountsOut", + "nodeType": "VariableDeclaration", + "scope": 1823, + "src": "21932:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1816, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21932:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1817, + "nodeType": "ArrayTypeName", + "src": "21932:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1820, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1823, + "src": "21965:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1819, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "21965:5:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1822, + "mutability": "mutable", + "name": "toInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 1823, + "src": "21989:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1821, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "21989:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "ExitPoolRequest", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "21874:144:25", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 1824, + "nodeType": "StructuredDocumentation", + "src": "22024:116:25", + "text": " @dev Emitted when a user joins or exits a Pool by calling `joinPool` or `exitPool`, respectively." + }, + "id": 1839, + "name": "PoolBalanceChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 1838, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1826, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1839, + "src": "22179:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1825, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22179:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1828, + "indexed": true, + "mutability": "mutable", + "name": "liquidityProvider", + "nodeType": "VariableDeclaration", + "scope": 1839, + "src": "22211:33:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22211:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1831, + "indexed": false, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1839, + "src": "22254:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1829, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "22254:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1830, + "nodeType": "ArrayTypeName", + "src": "22254:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1834, + "indexed": false, + "mutability": "mutable", + "name": "deltas", + "nodeType": "VariableDeclaration", + "scope": 1839, + "src": "22279:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 1832, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "22279:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1833, + "nodeType": "ArrayTypeName", + "src": "22279:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1837, + "indexed": false, + "mutability": "mutable", + "name": "protocolFeeAmounts", + "nodeType": "VariableDeclaration", + "scope": 1839, + "src": "22304:28:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1835, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22304:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1836, + "nodeType": "ArrayTypeName", + "src": "22304:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "22169:169:25" + }, + "src": "22145:194:25" + }, + { + "canonicalName": "IVault.PoolBalanceChangeKind", + "id": 1842, + "members": [ + { + "id": 1840, + "name": "JOIN", + "nodeType": "EnumValue", + "src": "22374:4:25" + }, + { + "id": 1841, + "name": "EXIT", + "nodeType": "EnumValue", + "src": "22380:4:25" + } + ], + "name": "PoolBalanceChangeKind", + "nodeType": "EnumDefinition", + "src": "22345:41:25" + }, + { + "canonicalName": "IVault.SwapKind", + "id": 1845, + "members": [ + { + "id": 1843, + "name": "GIVEN_IN", + "nodeType": "EnumValue", + "src": "25987:8:25" + }, + { + "id": 1844, + "name": "GIVEN_OUT", + "nodeType": "EnumValue", + "src": "25997:9:25" + } + ], + "name": "SwapKind", + "nodeType": "EnumDefinition", + "src": "25971:37:25" + }, + { + "documentation": { + "id": 1846, + "nodeType": "StructuredDocumentation", + "src": "26014:587:25", + "text": " @dev Performs a swap with a single Pool.\n If the swap is 'given in' (the number of tokens to send to the Pool is known), it returns the amount of tokens\n taken from the Pool, which must be greater than or equal to `limit`.\n If the swap is 'given out' (the number of tokens to take from the Pool is known), it returns the amount of tokens\n sent to the Pool, which must be less than or equal to `limit`.\n Internal Balance usage and the recipient are determined by the `funds` struct.\n Emits a `Swap` event." + }, + "functionSelector": "52bbbe29", + "id": 1859, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "swap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1855, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1848, + "mutability": "mutable", + "name": "singleSwap", + "nodeType": "VariableDeclaration", + "scope": 1859, + "src": "26629:28:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SingleSwap_$1872_memory_ptr", + "typeString": "struct IVault.SingleSwap" + }, + "typeName": { + "id": 1847, + "name": "SingleSwap", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1872, + "src": "26629:10:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SingleSwap_$1872_storage_ptr", + "typeString": "struct IVault.SingleSwap" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1850, + "mutability": "mutable", + "name": "funds", + "nodeType": "VariableDeclaration", + "scope": 1859, + "src": "26667:27:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$1927_memory_ptr", + "typeString": "struct IVault.FundManagement" + }, + "typeName": { + "id": 1849, + "name": "FundManagement", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1927, + "src": "26667:14:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$1927_storage_ptr", + "typeString": "struct IVault.FundManagement" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1852, + "mutability": "mutable", + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 1859, + "src": "26704:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26704:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1854, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 1859, + "src": "26727:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1853, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26727:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26619:130:25" + }, + "returnParameters": { + "id": 1858, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1857, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1859, + "src": "26776:7:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1856, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26776:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26775:9:25" + }, + "scope": 2021, + "src": "26606:179:25", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.SingleSwap", + "id": 1872, + "members": [ + { + "constant": false, + "id": 1861, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "27369:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1860, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "27369:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1863, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "27393:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 1862, + "name": "SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1845, + "src": "27393:8:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1865, + "mutability": "mutable", + "name": "assetIn", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "27416:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + }, + "typeName": { + "id": 1864, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "27416:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1867, + "mutability": "mutable", + "name": "assetOut", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "27440:15:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + }, + "typeName": { + "id": 1866, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "27440:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1869, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "27465:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1868, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27465:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1871, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1872, + "src": "27489:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1870, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "27489:5:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "SingleSwap", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "27341:169:25", + "visibility": "public" + }, + { + "documentation": { + "id": 1873, + "nodeType": "StructuredDocumentation", + "src": "27516:1980:25", + "text": " @dev Performs a series of swaps with one or multiple Pools. In each individual swap, the caller determines either\n the amount of tokens sent to or received from the Pool, depending on the `kind` value.\n Returns an array with the net Vault asset balance deltas. Positive amounts represent tokens (or ETH) sent to the\n Vault, and negative amounts represent tokens (or ETH) sent by the Vault. Each delta corresponds to the asset at\n the same index in the `assets` array.\n Swaps are executed sequentially, in the order specified by the `swaps` array. Each array element describes a\n Pool, the token to be sent to this Pool, the token to receive from it, and an amount that is either `amountIn` or\n `amountOut` depending on the swap kind.\n Multihop swaps can be executed by passing an `amount` value of zero for a swap. This will cause the amount in/out\n of the previous swap to be used as the amount in for the current one. In a 'given in' swap, 'tokenIn' must equal\n the previous swap's `tokenOut`. For a 'given out' swap, `tokenOut` must equal the previous swap's `tokenIn`.\n The `assets` array contains the addresses of all assets involved in the swaps. These are either token addresses,\n or the IAsset sentinel value for ETH (the zero address). Each entry in the `swaps` array specifies tokens in and\n out by referencing an index in `assets`. Note that Pools never interact with ETH directly: it will be wrapped to\n or unwrapped from WETH by the Vault.\n Internal Balance usage, sender, and recipient are determined by the `funds` struct. The `limits` array specifies\n the minimum or maximum amount of each token the vault is allowed to transfer.\n `batchSwap` can be used to make a single swap, like `swap` does, but doing so requires more gas than the\n equivalent `swap` call.\n Emits `Swap` events." + }, + "functionSelector": "945bcec9", + "id": 1894, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "batchSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1889, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1875, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29529:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 1874, + "name": "SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1845, + "src": "29529:8:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1878, + "mutability": "mutable", + "name": "swaps", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29552:28:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$1905_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + }, + "typeName": { + "baseType": { + "id": 1876, + "name": "BatchSwapStep", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1905, + "src": "29552:13:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BatchSwapStep_$1905_storage_ptr", + "typeString": "struct IVault.BatchSwapStep" + } + }, + "id": 1877, + "nodeType": "ArrayTypeName", + "src": "29552:15:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$1905_storage_$dyn_storage_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1881, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29590:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_memory_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 1879, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "29590:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "id": 1880, + "nodeType": "ArrayTypeName", + "src": "29590:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1883, + "mutability": "mutable", + "name": "funds", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29622:27:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$1927_memory_ptr", + "typeString": "struct IVault.FundManagement" + }, + "typeName": { + "id": 1882, + "name": "FundManagement", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1927, + "src": "29622:14:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$1927_storage_ptr", + "typeString": "struct IVault.FundManagement" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1886, + "mutability": "mutable", + "name": "limits", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29659:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 1884, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "29659:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1885, + "nodeType": "ArrayTypeName", + "src": "29659:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1888, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29691:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1887, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29691:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "29519:194:25" + }, + "returnParameters": { + "id": 1893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1892, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 1894, + "src": "29740:15:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 1890, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "29740:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1891, + "nodeType": "ArrayTypeName", + "src": "29740:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + } + ], + "src": "29739:17:25" + }, + "scope": 2021, + "src": "29501:256:25", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.BatchSwapStep", + "id": 1905, + "members": [ + { + "constant": false, + "id": 1896, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1905, + "src": "30350:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1895, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "30350:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1898, + "mutability": "mutable", + "name": "assetInIndex", + "nodeType": "VariableDeclaration", + "scope": 1905, + "src": "30374:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1897, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30374:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1900, + "mutability": "mutable", + "name": "assetOutIndex", + "nodeType": "VariableDeclaration", + "scope": 1905, + "src": "30404:21:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1899, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30404:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1902, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1905, + "src": "30435:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1901, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30435:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1904, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1905, + "src": "30459:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1903, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "30459:5:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "BatchSwapStep", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "30319:161:25", + "visibility": "public" + }, + { + "anonymous": false, + "documentation": { + "id": 1906, + "nodeType": "StructuredDocumentation", + "src": "30486:92:25", + "text": " @dev Emitted for each individual swap performed by `swap` or `batchSwap`." + }, + "id": 1918, + "name": "Swap", + "nodeType": "EventDefinition", + "parameters": { + "id": 1917, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1908, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "30603:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1907, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "30603:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1910, + "indexed": true, + "mutability": "mutable", + "name": "tokenIn", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "30635:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1909, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "30635:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1912, + "indexed": true, + "mutability": "mutable", + "name": "tokenOut", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "30667:23:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1911, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "30667:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1914, + "indexed": false, + "mutability": "mutable", + "name": "amountIn", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "30700:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1913, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30700:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1916, + "indexed": false, + "mutability": "mutable", + "name": "amountOut", + "nodeType": "VariableDeclaration", + "scope": 1918, + "src": "30726:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1915, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30726:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "30593:156:25" + }, + "src": "30583:167:25" + }, + { + "canonicalName": "IVault.FundManagement", + "id": 1927, + "members": [ + { + "constant": false, + "id": 1920, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 1927, + "src": "31713:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1919, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31713:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1922, + "mutability": "mutable", + "name": "fromInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 1927, + "src": "31737:24:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1921, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "31737:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1924, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1927, + "src": "31771:25:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 1923, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "31771:15:25", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1926, + "mutability": "mutable", + "name": "toInternalBalance", + "nodeType": "VariableDeclaration", + "scope": 1927, + "src": "31806:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1925, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "31806:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "name": "FundManagement", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "31681:154:25", + "visibility": "public" + }, + { + "documentation": { + "id": 1928, + "nodeType": "StructuredDocumentation", + "src": "31841:1027:25", + "text": " @dev Simulates a call to `batchSwap`, returning an array of Vault asset deltas. Calls to `swap` cannot be\n simulated directly, but an equivalent `batchSwap` call can and will yield the exact same result.\n Each element in the array corresponds to the asset at the same index, and indicates the number of tokens (or ETH)\n the Vault would take from the sender (if positive) or send to the recipient (if negative). The arguments it\n receives are the same that an equivalent `batchSwap` call would receive.\n Unlike `batchSwap`, this function performs no checks on the sender or recipient field in the `funds` struct.\n This makes it suitable to be called by off-chain applications via eth_call without needing to hold tokens,\n approve them for the Vault, or even know a user's address.\n Note that this function is not 'view' (due to implementation details): the client code must explicitly execute\n eth_call instead of eth_sendTransaction." + }, + "functionSelector": "f84d066e", + "id": 1944, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "queryBatchSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1930, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1944, + "src": "32906:13:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + }, + "typeName": { + "id": 1929, + "name": "SwapKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1845, + "src": "32906:8:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1933, + "mutability": "mutable", + "name": "swaps", + "nodeType": "VariableDeclaration", + "scope": 1944, + "src": "32929:28:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$1905_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + }, + "typeName": { + "baseType": { + "id": 1931, + "name": "BatchSwapStep", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1905, + "src": "32929:13:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BatchSwapStep_$1905_storage_ptr", + "typeString": "struct IVault.BatchSwapStep" + } + }, + "id": 1932, + "nodeType": "ArrayTypeName", + "src": "32929:15:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_BatchSwapStep_$1905_storage_$dyn_storage_ptr", + "typeString": "struct IVault.BatchSwapStep[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1936, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 1944, + "src": "32967:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_memory_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 1934, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "32967:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "id": 1935, + "nodeType": "ArrayTypeName", + "src": "32967:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1938, + "mutability": "mutable", + "name": "funds", + "nodeType": "VariableDeclaration", + "scope": 1944, + "src": "32999:27:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$1927_memory_ptr", + "typeString": "struct IVault.FundManagement" + }, + "typeName": { + "id": 1937, + "name": "FundManagement", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1927, + "src": "32999:14:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FundManagement_$1927_storage_ptr", + "typeString": "struct IVault.FundManagement" + } + }, + "visibility": "internal" + } + ], + "src": "32896:136:25" + }, + "returnParameters": { + "id": 1943, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1942, + "mutability": "mutable", + "name": "assetDeltas", + "nodeType": "VariableDeclaration", + "scope": 1944, + "src": "33051:27:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_memory_ptr", + "typeString": "int256[]" + }, + "typeName": { + "baseType": { + "id": 1940, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "33051:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1941, + "nodeType": "ArrayTypeName", + "src": "33051:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_int256_$dyn_storage_ptr", + "typeString": "int256[]" + } + }, + "visibility": "internal" + } + ], + "src": "33050:29:25" + }, + "scope": 2021, + "src": "32873:207:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 1945, + "nodeType": "StructuredDocumentation", + "src": "33106:604:25", + "text": " @dev Performs a 'flash loan', sending tokens to `recipient`, executing the `receiveFlashLoan` hook on it,\n and then reverting unless the tokens plus a proportional protocol fee have been returned.\n The `tokens` and `amounts` arrays must have the same length, and each entry in these indicates the loan amount\n for each token contract. `tokens` must be sorted in ascending order.\n The 'userData' field is ignored by the Vault, and forwarded as-is to `recipient` as part of the\n `receiveFlashLoan` call.\n Emits `FlashLoan` events." + }, + "functionSelector": "5c38449e", + "id": 1958, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "flashLoan", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1956, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1947, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1958, + "src": "33743:29:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1444", + "typeString": "contract IFlashLoanRecipient" + }, + "typeName": { + "id": 1946, + "name": "IFlashLoanRecipient", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1444, + "src": "33743:19:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1444", + "typeString": "contract IFlashLoanRecipient" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1950, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 1958, + "src": "33782:22:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 1948, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "33782:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 1949, + "nodeType": "ArrayTypeName", + "src": "33782:8:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1953, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 1958, + "src": "33814:24:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1951, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33814:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1952, + "nodeType": "ArrayTypeName", + "src": "33814:9:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1955, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 1958, + "src": "33848:21:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 1954, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "33848:5:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "33733:142:25" + }, + "returnParameters": { + "id": 1957, + "nodeType": "ParameterList", + "parameters": [], + "src": "33884:0:25" + }, + "scope": 2021, + "src": "33715:170:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "anonymous": false, + "documentation": { + "id": 1959, + "nodeType": "StructuredDocumentation", + "src": "33891:88:25", + "text": " @dev Emitted for each individual flash loan performed by `flashLoan`." + }, + "id": 1969, + "name": "FlashLoan", + "nodeType": "EventDefinition", + "parameters": { + "id": 1968, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1961, + "indexed": true, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "34000:37:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1444", + "typeString": "contract IFlashLoanRecipient" + }, + "typeName": { + "id": 1960, + "name": "IFlashLoanRecipient", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1444, + "src": "34000:19:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFlashLoanRecipient_$1444", + "typeString": "contract IFlashLoanRecipient" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1963, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "34039:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1962, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "34039:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1965, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "34061:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1964, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34061:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1967, + "indexed": false, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 1969, + "src": "34077:17:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1966, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34077:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "33999:96:25" + }, + "src": "33984:112:25" + }, + { + "documentation": { + "id": 1970, + "nodeType": "StructuredDocumentation", + "src": "35092:434:25", + "text": " @dev Performs a set of Pool balance operations, which may be either withdrawals, deposits or updates.\n Pool Balance management features batching, which means a single contract call can be used to perform multiple\n operations of different kinds, with different Pools and tokens, at once.\n For each operation, the caller must be registered as the Asset Manager for `token` in `poolId`." + }, + "functionSelector": "e6c46092", + "id": 1976, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "managePoolBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 1974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1973, + "mutability": "mutable", + "name": "ops", + "nodeType": "VariableDeclaration", + "scope": 1976, + "src": "35558:26:25", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolBalanceOp_$1985_memory_ptr_$dyn_memory_ptr", + "typeString": "struct IVault.PoolBalanceOp[]" + }, + "typeName": { + "baseType": { + "id": 1971, + "name": "PoolBalanceOp", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1985, + "src": "35558:13:25", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolBalanceOp_$1985_storage_ptr", + "typeString": "struct IVault.PoolBalanceOp" + } + }, + "id": 1972, + "nodeType": "ArrayTypeName", + "src": "35558:15:25", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolBalanceOp_$1985_storage_$dyn_storage_ptr", + "typeString": "struct IVault.PoolBalanceOp[]" + } + }, + "visibility": "internal" + } + ], + "src": "35557:28:25" + }, + "returnParameters": { + "id": 1975, + "nodeType": "ParameterList", + "parameters": [], + "src": "35594:0:25" + }, + "scope": 2021, + "src": "35531:64:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "canonicalName": "IVault.PoolBalanceOp", + "id": 1985, + "members": [ + { + "constant": false, + "id": 1978, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 1985, + "src": "35632:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolBalanceOpKind_$1989", + "typeString": "enum IVault.PoolBalanceOpKind" + }, + "typeName": { + "id": 1977, + "name": "PoolBalanceOpKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1989, + "src": "35632:17:25", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolBalanceOpKind_$1989", + "typeString": "enum IVault.PoolBalanceOpKind" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1980, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 1985, + "src": "35664:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1979, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "35664:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1982, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 1985, + "src": "35688:12:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1981, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "35688:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1984, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 1985, + "src": "35710:14:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1983, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35710:7:25", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "PoolBalanceOp", + "nodeType": "StructDefinition", + "scope": 2021, + "src": "35601:130:25", + "visibility": "public" + }, + { + "canonicalName": "IVault.PoolBalanceOpKind", + "id": 1989, + "members": [ + { + "id": 1986, + "name": "WITHDRAW", + "nodeType": "EnumValue", + "src": "36253:8:25" + }, + { + "id": 1987, + "name": "DEPOSIT", + "nodeType": "EnumValue", + "src": "36263:7:25" + }, + { + "id": 1988, + "name": "UPDATE", + "nodeType": "EnumValue", + "src": "36272:6:25" + } + ], + "name": "PoolBalanceOpKind", + "nodeType": "EnumDefinition", + "src": "36228:52:25" + }, + { + "anonymous": false, + "documentation": { + "id": 1990, + "nodeType": "StructuredDocumentation", + "src": "36286:109:25", + "text": " @dev Emitted when a Pool's token Asset Manager alters its balance via `managePoolBalance`." + }, + "id": 2002, + "name": "PoolBalanceManaged", + "nodeType": "EventDefinition", + "parameters": { + "id": 2001, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1992, + "indexed": true, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2002, + "src": "36434:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 1991, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "36434:7:25", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1994, + "indexed": true, + "mutability": "mutable", + "name": "assetManager", + "nodeType": "VariableDeclaration", + "scope": 2002, + "src": "36466:28:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1993, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "36466:7:25", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1996, + "indexed": true, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2002, + "src": "36504:20:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 1995, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "36504:6:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 1998, + "indexed": false, + "mutability": "mutable", + "name": "cashDelta", + "nodeType": "VariableDeclaration", + "scope": 2002, + "src": "36534:16:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1997, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "36534:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2000, + "indexed": false, + "mutability": "mutable", + "name": "managedDelta", + "nodeType": "VariableDeclaration", + "scope": 2002, + "src": "36560:19:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1999, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "36560:6:25", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "36424:161:25" + }, + "src": "36400:186:25" + }, + { + "documentation": { + "id": 2003, + "nodeType": "StructuredDocumentation", + "src": "37463:64:25", + "text": " @dev Returns the current protocol fee module." + }, + "functionSelector": "d2946c2b", + "id": 2008, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeesCollector", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2004, + "nodeType": "ParameterList", + "parameters": [], + "src": "37565:2:25" + }, + "returnParameters": { + "id": 2007, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2006, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2008, + "src": "37591:22:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + }, + "typeName": { + "id": 2005, + "name": "IProtocolFeesCollector", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1556, + "src": "37591:22:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "visibility": "internal" + } + ], + "src": "37590:24:25" + }, + "scope": 2021, + "src": "37532:83:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2009, + "nodeType": "StructuredDocumentation", + "src": "37621:635:25", + "text": " @dev Safety mechanism to pause most Vault operations in the event of an emergency - typically detection of an\n error in some part of the system.\n The Vault can only be paused during an initial time period, after which pausing is forever disabled.\n While the contract is paused, the following features are disabled:\n - depositing and transferring internal balance\n - transferring external balance (using the Vault's allowance)\n - swaps\n - joining Pools\n - Asset Manager interactions\n Internal Balance can still be withdrawn, and Pools exited." + }, + "functionSelector": "16c38b3c", + "id": 2014, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "setPaused", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2012, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2011, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 2014, + "src": "38280:11:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2010, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "38280:4:25", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "38279:13:25" + }, + "returnParameters": { + "id": 2013, + "nodeType": "ParameterList", + "parameters": [], + "src": "38301:0:25" + }, + "scope": 2021, + "src": "38261:41:25", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 2015, + "nodeType": "StructuredDocumentation", + "src": "38308:58:25", + "text": " @dev Returns the Vault's WETH instance." + }, + "functionSelector": "ad5c4648", + "id": 2020, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "WETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2016, + "nodeType": "ParameterList", + "parameters": [], + "src": "38384:2:25" + }, + "returnParameters": { + "id": 2019, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2018, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2020, + "src": "38410:5:25", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IWETH_$1074", + "typeString": "contract IWETH" + }, + "typeName": { + "id": 2017, + "name": "IWETH", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1074, + "src": "38410:5:25", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IWETH_$1074", + "typeString": "contract IWETH" + } + }, + "visibility": "internal" + } + ], + "src": "38409:7:25" + }, + "scope": 2021, + "src": "38371:46:25", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2022, + "src": "1321:37155:25" + } + ], + "src": "688:37789:25" + }, + "id": 25 + }, + "@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol", + "exportedSymbols": { + "BalancerPoolToken": [ + 2230 + ] + }, + "id": 2231, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2023, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:26" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 2024, + "nodeType": "ImportDirective", + "scope": 2231, + "sourceUnit": 2022, + "src": "713:65:26", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol", + "id": 2025, + "nodeType": "ImportDirective", + "scope": 2231, + "sourceUnit": 9536, + "src": "780:81:26", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 2027, + "name": "ERC20Permit", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9535, + "src": "1543:11:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20Permit_$9535", + "typeString": "contract ERC20Permit" + } + }, + "id": 2028, + "nodeType": "InheritanceSpecifier", + "src": "1543:11:26" + } + ], + "contractDependencies": [ + 1040, + 1152, + 1188, + 5552, + 8935, + 9426, + 9535 + ], + "contractKind": "contract", + "documentation": { + "id": 2026, + "nodeType": "StructuredDocumentation", + "src": "863:649:26", + "text": " @title Highly opinionated token implementation\n @author Balancer Labs\n @dev\n - Includes functions to increase and decrease allowance as a workaround\n for the well-known issue with `approve`:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n - Allows for 'infinite allowance', where an allowance of 0xff..ff is not\n decreased by calls to transferFrom\n - Lets a token holder use `transferFrom` to send their own tokens,\n without first setting allowance\n - Emits 'Approval' events whenever allowance is changed by `transferFrom`\n - Assigns infinite allowance for all token holders to the Vault" + }, + "fullyImplemented": true, + "id": 2230, + "linearizedBaseContracts": [ + 2230, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152 + ], + "name": "BalancerPoolToken", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 2030, + "mutability": "immutable", + "name": "_vault", + "nodeType": "VariableDeclaration", + "scope": 2230, + "src": "1561:31:26", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2029, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1561:6:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 2050, + "nodeType": "Block", + "src": "1760:31:26", + "statements": [ + { + "expression": { + "id": 2048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2046, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2030, + "src": "1770:6:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2047, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2036, + "src": "1779:5:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "src": "1770:14:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 2049, + "nodeType": "ExpressionStatement", + "src": "1770:14:26" + } + ] + }, + "id": 2051, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 2039, + "name": "tokenName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2032, + "src": "1713:9:26", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 2040, + "name": "tokenSymbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2034, + "src": "1724:11:26", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 2041, + "modifierName": { + "id": 2038, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9426, + "src": "1707:5:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$9426_$", + "typeString": "type(contract ERC20)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1707:29:26" + }, + { + "arguments": [ + { + "id": 2043, + "name": "tokenName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2032, + "src": "1749:9:26", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 2044, + "modifierName": { + "id": 2042, + "name": "ERC20Permit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9535, + "src": "1737:11:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20Permit_$9535_$", + "typeString": "type(contract ERC20Permit)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1737:22:26" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2037, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2032, + "mutability": "mutable", + "name": "tokenName", + "nodeType": "VariableDeclaration", + "scope": 2051, + "src": "1620:23:26", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2031, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1620:6:26", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2034, + "mutability": "mutable", + "name": "tokenSymbol", + "nodeType": "VariableDeclaration", + "scope": 2051, + "src": "1653:25:26", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2033, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1653:6:26", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2036, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 2051, + "src": "1688:12:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2035, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1688:6:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1610:96:26" + }, + "returnParameters": { + "id": 2045, + "nodeType": "ParameterList", + "parameters": [], + "src": "1760:0:26" + }, + "scope": 2230, + "src": "1599:192:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2058, + "nodeType": "Block", + "src": "1846:30:26", + "statements": [ + { + "expression": { + "id": 2056, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2030, + "src": "1863:6:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "functionReturnParameters": 2055, + "id": 2057, + "nodeType": "Return", + "src": "1856:13:26" + } + ] + }, + "functionSelector": "8d928af8", + "id": 2059, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2052, + "nodeType": "ParameterList", + "parameters": [], + "src": "1814:2:26" + }, + "returnParameters": { + "id": 2055, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2054, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2059, + "src": "1838:6:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2053, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1838:6:26", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1837:8:26" + }, + "scope": 2230, + "src": "1797:79:26", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 9086 + ], + "body": { + "id": 2092, + "nodeType": "Block", + "src": "2268:164:26", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2070, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2064, + "src": "2282:7:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2073, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "2301:8:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 2074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2301:10:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + ], + "id": 2072, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2293:7:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2071, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2293:7:26", + "typeDescriptions": {} + } + }, + "id": 2075, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2293:19:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2282:30:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 2090, + "nodeType": "Block", + "src": "2363:63:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2086, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2062, + "src": "2400:5:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2087, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2064, + "src": "2407:7:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 2084, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "2384:5:26", + "typeDescriptions": { + "typeIdentifier": "t_super$_BalancerPoolToken_$2230", + "typeString": "contract super BalancerPoolToken" + } + }, + "id": 2085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "allowance", + "nodeType": "MemberAccess", + "referencedDeclaration": 9086, + "src": "2384:15:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view returns (uint256)" + } + }, + "id": 2088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2384:31:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2069, + "id": 2089, + "nodeType": "Return", + "src": "2377:38:26" + } + ] + }, + "id": 2091, + "nodeType": "IfStatement", + "src": "2278:148:26", + "trueBody": { + "id": 2083, + "nodeType": "Block", + "src": "2314:43:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2080, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "2343:2:26", + "subExpression": { + "hexValue": "31", + "id": 2079, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2344:1:26", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + ], + "id": 2078, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2335:7:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2077, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2335:7:26", + "typeDescriptions": {} + } + }, + "id": 2081, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2335:11:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2069, + "id": 2082, + "nodeType": "Return", + "src": "2328:18:26" + } + ] + } + } + ] + }, + "documentation": { + "id": 2060, + "nodeType": "StructuredDocumentation", + "src": "1900:273:26", + "text": " @dev Override to grant the Vault infinite allowance, causing for Pool Tokens to not require approval.\n This is sound as the Vault already provides authorization mechanisms when initiation token transfers, which this\n contract inherits." + }, + "functionSelector": "dd62ed3e", + "id": 2093, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2066, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2241:8:26" + }, + "parameters": { + "id": 2065, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2062, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 2093, + "src": "2197:13:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2061, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2197:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2064, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 2093, + "src": "2212:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2063, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2212:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2196:32:26" + }, + "returnParameters": { + "id": 2069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2068, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2093, + "src": "2259:7:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2067, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2259:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2258:9:26" + }, + "scope": 2230, + "src": "2178:254:26", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 9146 + ], + "body": { + "id": 2158, + "nodeType": "Block", + "src": "2709:521:26", + "statements": [ + { + "assignments": [ + 2107 + ], + "declarations": [ + { + "constant": false, + "id": 2107, + "mutability": "mutable", + "name": "currentAllowance", + "nodeType": "VariableDeclaration", + "scope": 2158, + "src": "2719:24:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2106, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2719:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2113, + "initialValue": { + "arguments": [ + { + "id": 2109, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2096, + "src": "2756:6:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 2110, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2764:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2764:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 2108, + "name": "allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 2093 + ], + "referencedDeclaration": 2093, + "src": "2746:9:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view returns (uint256)" + } + }, + "id": 2112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2746:29:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2719:56:26" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2115, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2794:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2794:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 2117, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2096, + "src": "2808:6:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2794:20:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2119, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2107, + "src": "2818:16:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2120, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2100, + "src": "2838:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2818:26:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2794:50:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2123, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2846:6:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_EXCEEDS_ALLOWANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 818, + "src": "2846:39:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2114, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2785:8:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2785:101:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2126, + "nodeType": "ExpressionStatement", + "src": "2785:101:26" + }, + { + "expression": { + "arguments": [ + { + "id": 2128, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2096, + "src": "2907:6:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2129, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2098, + "src": "2915:9:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2130, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2100, + "src": "2926:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2127, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9273, + "src": "2897:9:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2897:36:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2132, + "nodeType": "ExpressionStatement", + "src": "2897:36:26" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2133, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2948:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2948:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 2135, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2096, + "src": "2962:6:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2948:20:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2137, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2107, + "src": "2972:16:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "id": 2141, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "3000:2:26", + "subExpression": { + "hexValue": "31", + "id": 2140, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3001:1:26", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + ], + "id": 2139, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2992:7:26", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2138, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2992:7:26", + "typeDescriptions": {} + } + }, + "id": 2142, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2992:11:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2972:31:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2948:55:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2155, + "nodeType": "IfStatement", + "src": "2944:258:26", + "trueBody": { + "id": 2154, + "nodeType": "Block", + "src": "3005:197:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2146, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2096, + "src": "3145:6:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 2147, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3153:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3153:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2151, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2149, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2107, + "src": "3165:16:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 2150, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2100, + "src": "3184:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3165:25:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2145, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "3136:8:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3136:55:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2153, + "nodeType": "ExpressionStatement", + "src": "3136:55:26" + } + ] + } + }, + { + "expression": { + "hexValue": "74727565", + "id": 2156, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3219:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2105, + "id": 2157, + "nodeType": "Return", + "src": "3212:11:26" + } + ] + }, + "documentation": { + "id": 2094, + "nodeType": "StructuredDocumentation", + "src": "2438:132:26", + "text": " @dev Override to allow for 'infinite allowance' and let the token owner use `transferFrom` with no self-allowance" + }, + "functionSelector": "23b872dd", + "id": 2159, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2102, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2685:8:26" + }, + "parameters": { + "id": 2101, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2096, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 2159, + "src": "2606:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2095, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2606:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2098, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2159, + "src": "2630:17:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2097, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2630:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2100, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2159, + "src": "2657:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2099, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2657:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2596:81:26" + }, + "returnParameters": { + "id": 2105, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2104, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2159, + "src": "2703:4:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2103, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2703:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2702:6:26" + }, + "scope": 2230, + "src": "2575:655:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 9204 + ], + "body": { + "id": 2202, + "nodeType": "Block", + "src": "3447:338:26", + "statements": [ + { + "assignments": [ + 2171 + ], + "declarations": [ + { + "constant": false, + "id": 2171, + "mutability": "mutable", + "name": "currentAllowance", + "nodeType": "VariableDeclaration", + "scope": 2202, + "src": "3457:24:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3457:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2177, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 2173, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3494:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3494:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 2175, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2162, + "src": "3506:7:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2172, + "name": "allowance", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 2093 + ], + "referencedDeclaration": 2093, + "src": "3484:9:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", + "typeString": "function (address,address) view returns (uint256)" + } + }, + "id": 2176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3484:30:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3457:57:26" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2178, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2164, + "src": "3529:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2179, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2171, + "src": "3539:16:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3529:26:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 2198, + "nodeType": "Block", + "src": "3620:137:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 2190, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3699:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3699:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 2192, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2162, + "src": "3711:7:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2193, + "name": "currentAllowance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2171, + "src": "3720:16:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 2194, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2164, + "src": "3739:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3720:25:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2189, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "3690:8:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3690:56:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2197, + "nodeType": "ExpressionStatement", + "src": "3690:56:26" + } + ] + }, + "id": 2199, + "nodeType": "IfStatement", + "src": "3525:232:26", + "trueBody": { + "id": 2188, + "nodeType": "Block", + "src": "3557:57:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 2182, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3580:3:26", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3580:10:26", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 2184, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2162, + "src": "3592:7:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "30", + "id": 2185, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3601:1:26", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2181, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "3571:8:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 2186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3571:32:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2187, + "nodeType": "ExpressionStatement", + "src": "3571:32:26" + } + ] + } + }, + { + "expression": { + "hexValue": "74727565", + "id": 2200, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3774:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 2169, + "id": 2201, + "nodeType": "Return", + "src": "3767:11:26" + } + ] + }, + "documentation": { + "id": 2160, + "nodeType": "StructuredDocumentation", + "src": "3236:115:26", + "text": " @dev Override to allow decreasing allowance by more than the current amount (setting it to zero)" + }, + "functionSelector": "a457c2d7", + "id": 2203, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2166, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3423:8:26" + }, + "parameters": { + "id": 2165, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2162, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 2203, + "src": "3383:15:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2161, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3383:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2164, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2203, + "src": "3400:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2163, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3400:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3382:33:26" + }, + "returnParameters": { + "id": 2169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2168, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2203, + "src": "3441:4:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3441:4:26", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3440:6:26" + }, + "scope": 2230, + "src": "3356:429:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2215, + "nodeType": "Block", + "src": "3887:41:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2211, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2205, + "src": "3903:9:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2212, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2207, + "src": "3914:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2210, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9319, + "src": "3897:5:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 2213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3897:24:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2214, + "nodeType": "ExpressionStatement", + "src": "3897:24:26" + } + ] + }, + "id": 2216, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mintPoolTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2208, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2205, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 2216, + "src": "3843:17:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2204, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3843:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2207, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2216, + "src": "3862:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2206, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3862:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3842:35:26" + }, + "returnParameters": { + "id": 2209, + "nodeType": "ParameterList", + "parameters": [], + "src": "3887:0:26" + }, + "scope": 2230, + "src": "3818:110:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2228, + "nodeType": "Block", + "src": "4000:38:26", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2224, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2218, + "src": "4016:6:26", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 2225, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2220, + "src": "4024:6:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2223, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9378, + "src": "4010:5:26", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 2226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4010:21:26", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2227, + "nodeType": "ExpressionStatement", + "src": "4010:21:26" + } + ] + }, + "id": 2229, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burnPoolTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2221, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2218, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 2229, + "src": "3959:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2217, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3959:7:26", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2220, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 2229, + "src": "3975:14:26", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2219, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3975:7:26", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3958:32:26" + }, + "returnParameters": { + "id": 2222, + "nodeType": "ParameterList", + "parameters": [], + "src": "4000:0:26" + }, + "scope": 2230, + "src": "3934:104:26", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 2231, + "src": "1513:2527:26" + } + ], + "src": "688:3353:26" + }, + "id": 26 + }, + "@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol", + "exportedSymbols": { + "BaseGeneralPool": [ + 2468 + ] + }, + "id": 2469, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2232, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:27" + }, + { + "id": 2233, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:27" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IGeneralPool.sol", + "id": 2234, + "nodeType": "ImportDirective", + "scope": 2469, + "sourceUnit": 1467, + "src": "747:71:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePool.sol", + "file": "./BasePool.sol", + "id": 2235, + "nodeType": "ImportDirective", + "scope": 2469, + "sourceUnit": 3861, + "src": "820:24:27", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 2237, + "name": "IGeneralPool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1466, + "src": "1226:12:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IGeneralPool_$1466", + "typeString": "contract IGeneralPool" + } + }, + "id": 2238, + "nodeType": "InheritanceSpecifier", + "src": "1226:12:27" + }, + { + "baseName": { + "id": 2239, + "name": "BasePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3860, + "src": "1240:8:27", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + }, + "id": 2240, + "nodeType": "InheritanceSpecifier", + "src": "1240:8:27" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1466, + 1491, + 2230, + 3860, + 3955, + 4136, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535 + ], + "contractKind": "contract", + "documentation": { + "id": 2236, + "nodeType": "StructuredDocumentation", + "src": "846:342:27", + "text": " @dev Extension of `BasePool`, adding a handler for `IGeneralPool.onSwap`.\n Derived contracts must call `BasePool`'s constructor, and implement `_onSwapGivenIn` and `_onSwapGivenOut` along with\n `BasePool`'s virtual functions. Inheriting from this contract lets derived contracts choose the General\n specialization setting." + }, + "fullyImplemented": false, + "id": 2468, + "linearizedBaseContracts": [ + 2468, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1466, + 1425, + 1491 + ], + "name": "BaseGeneralPool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "baseFunctions": [ + 1465 + ], + "body": { + "id": 2299, + "nodeType": "Block", + "src": "1488:417:27", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2259, + "name": "_beforeSwapJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3400, + "src": "1498:19:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 2260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1498:21:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2261, + "nodeType": "ExpressionStatement", + "src": "1498:21:27" + }, + { + "expression": { + "arguments": [ + { + "id": 2263, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2247, + "src": "1547:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2264, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2249, + "src": "1556:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2265, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2654, + "src": "1566:15:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 2266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1566:17:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2262, + "name": "_validateIndexes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2467, + "src": "1530:16:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256) pure" + } + }, + "id": 2267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1530:54:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2268, + "nodeType": "ExpressionStatement", + "src": "1530:54:27" + }, + { + "assignments": [ + 2273 + ], + "declarations": [ + { + "constant": false, + "id": 2273, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 2299, + "src": "1594:31:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2271, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1594:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2272, + "nodeType": "ArrayTypeName", + "src": "1594:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 2276, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2274, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "1628:15:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 2275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1628:17:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1594:51:27" + }, + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + }, + "id": 2282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2277, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2242, + "src": "1675:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2278, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "kind", + "nodeType": "MemberAccess", + "referencedDeclaration": 1473, + "src": "1675:16:27", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 2279, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2021, + "src": "1695:6:27", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVault_$2021_$", + "typeString": "type(contract IVault)" + } + }, + "id": 2280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SwapKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 1845, + "src": "1695:15:27", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_SwapKind_$1845_$", + "typeString": "type(enum IVault.SwapKind)" + } + }, + "id": 2281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "GIVEN_IN", + "nodeType": "MemberAccess", + "src": "1695:24:27", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "src": "1675:44:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 2291, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2242, + "src": "1841:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 2292, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2245, + "src": "1854:8:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 2293, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2247, + "src": "1864:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2294, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2249, + "src": "1873:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2295, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2273, + "src": "1883:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 2290, + "name": "_swapGivenOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2417, + "src": "1827:13:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256,uint256[] memory) returns (uint256)" + } + }, + "id": 2296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1827:71:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1675:223:27", + "trueExpression": { + "arguments": [ + { + "id": 2284, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2242, + "src": "1751:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 2285, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2245, + "src": "1764:8:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 2286, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2247, + "src": "1774:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2287, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2249, + "src": "1783:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2288, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2273, + "src": "1793:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 2283, + "name": "_swapGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2360, + "src": "1738:12:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256,uint256[] memory) returns (uint256)" + } + }, + "id": 2289, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1738:70:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2258, + "id": 2298, + "nodeType": "Return", + "src": "1656:242:27" + } + ] + }, + "functionSelector": "01ec954a", + "id": 2300, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "expression": { + "id": 2253, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2242, + "src": "1450:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2254, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "poolId", + "nodeType": "MemberAccess", + "referencedDeclaration": 1481, + "src": "1450:18:27", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 2255, + "modifierName": { + "id": 2252, + "name": "onlyVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2958, + "src": "1440:9:27", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_bytes32_$", + "typeString": "modifier (bytes32)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1440:29:27" + } + ], + "name": "onSwap", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2251, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1431:8:27" + }, + "parameters": { + "id": 2250, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2242, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "1299:30:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 2241, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "1299:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2245, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "1339:25:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1339:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2244, + "nodeType": "ArrayTypeName", + "src": "1339:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2247, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "1374:15:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2246, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1374:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2249, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "1399:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2248, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1399:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1289:132:27" + }, + "returnParameters": { + "id": 2258, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2257, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2300, + "src": "1479:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2256, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1479:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1478:9:27" + }, + "scope": 2468, + "src": "1274:631:27", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 2359, + "nodeType": "Block", + "src": "2141:546:27", + "statements": [ + { + "expression": { + "id": 2324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 2317, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2302, + "src": "2259:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2319, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "2259:18:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 2321, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2302, + "src": "2303:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2322, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "2303:18:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2320, + "name": "_subtractSwapFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3455, + "src": "2280:22:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 2323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2280:42:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2259:63:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2325, + "nodeType": "ExpressionStatement", + "src": "2259:63:27" + }, + { + "expression": { + "arguments": [ + { + "id": 2327, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2305, + "src": "2347:8:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 2328, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2312, + "src": "2357:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 2326, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "2333:13:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 2329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2333:39:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2330, + "nodeType": "ExpressionStatement", + "src": "2333:39:27" + }, + { + "expression": { + "id": 2341, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 2331, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2302, + "src": "2382:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2333, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "2382:18:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 2335, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2302, + "src": "2412:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2336, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "2412:18:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 2337, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2312, + "src": "2432:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 2339, + "indexExpression": { + "id": 2338, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2307, + "src": "2447:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2432:23:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2334, + "name": "_upscale", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3547, + "src": "2403:8:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2403:53:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2382:74:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2342, + "nodeType": "ExpressionStatement", + "src": "2382:74:27" + }, + { + "assignments": [ + 2344 + ], + "declarations": [ + { + "constant": false, + "id": 2344, + "mutability": "mutable", + "name": "amountOut", + "nodeType": "VariableDeclaration", + "scope": 2359, + "src": "2467:17:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2343, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2467:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2351, + "initialValue": { + "arguments": [ + { + "id": 2346, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2302, + "src": "2502:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 2347, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2305, + "src": "2515:8:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 2348, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2307, + "src": "2525:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2349, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2309, + "src": "2534:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2345, + "name": "_onSwapGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2431, + "src": "2487:14:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256) returns (uint256)" + } + }, + "id": 2350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2487:56:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2467:76:27" + }, + { + "expression": { + "arguments": [ + { + "id": 2353, + "name": "amountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2344, + "src": "2644:9:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 2354, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2312, + "src": "2655:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 2356, + "indexExpression": { + "id": 2355, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2309, + "src": "2670:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2655:24:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2352, + "name": "_downscaleDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3614, + "src": "2629:14:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2629:51:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2316, + "id": 2358, + "nodeType": "Return", + "src": "2622:58:27" + } + ] + }, + "id": 2360, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_swapGivenIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2302, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 2360, + "src": "1942:30:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 2301, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "1942:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2305, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 2360, + "src": "1982:25:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2303, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1982:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2304, + "nodeType": "ArrayTypeName", + "src": "1982:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2307, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 2360, + "src": "2017:15:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2306, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2017:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2309, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 2360, + "src": "2042:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2042:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2312, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 2360, + "src": "2068:31:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2310, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2068:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2311, + "nodeType": "ArrayTypeName", + "src": "2068:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "1932:173:27" + }, + "returnParameters": { + "id": 2316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2315, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2360, + "src": "2132:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2314, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2132:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2131:9:27" + }, + "scope": 2468, + "src": "1911:776:27", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2416, + "nodeType": "Block", + "src": "2924:518:27", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2378, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "2948:8:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 2379, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2372, + "src": "2958:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 2377, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "2934:13:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 2380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2934:39:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2381, + "nodeType": "ExpressionStatement", + "src": "2934:39:27" + }, + { + "expression": { + "id": 2392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 2382, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2362, + "src": "2983:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2384, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "2983:18:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 2386, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2362, + "src": "3013:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 2387, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "3013:18:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 2388, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2372, + "src": "3033:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 2390, + "indexExpression": { + "id": 2389, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2369, + "src": "3048:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3033:24:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2385, + "name": "_upscale", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3547, + "src": "3004:8:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3004:54:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2983:75:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2393, + "nodeType": "ExpressionStatement", + "src": "2983:75:27" + }, + { + "assignments": [ + 2395 + ], + "declarations": [ + { + "constant": false, + "id": 2395, + "mutability": "mutable", + "name": "amountIn", + "nodeType": "VariableDeclaration", + "scope": 2416, + "src": "3069:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3069:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 2402, + "initialValue": { + "arguments": [ + { + "id": 2397, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2362, + "src": "3104:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 2398, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2365, + "src": "3117:8:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 2399, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2367, + "src": "3127:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2400, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2369, + "src": "3136:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2396, + "name": "_onSwapGivenOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2445, + "src": "3088:15:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256) returns (uint256)" + } + }, + "id": 2401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3088:57:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3069:76:27" + }, + { + "expression": { + "id": 2410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2403, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2395, + "src": "3222:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 2405, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2395, + "src": "3246:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 2406, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2372, + "src": "3256:14:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 2408, + "indexExpression": { + "id": 2407, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2367, + "src": "3271:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3256:23:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2404, + "name": "_downscaleUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3681, + "src": "3233:12:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3233:47:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3222:58:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2411, + "nodeType": "ExpressionStatement", + "src": "3222:58:27" + }, + { + "expression": { + "arguments": [ + { + "id": 2413, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2395, + "src": "3426:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2412, + "name": "_addSwapFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3433, + "src": "3408:17:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 2414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3408:27:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2376, + "id": 2415, + "nodeType": "Return", + "src": "3401:34:27" + } + ] + }, + "id": 2417, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_swapGivenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2373, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2362, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 2417, + "src": "2725:30:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 2361, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "2725:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2365, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 2417, + "src": "2765:25:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2765:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2364, + "nodeType": "ArrayTypeName", + "src": "2765:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2367, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 2417, + "src": "2800:15:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2366, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2800:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2369, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 2417, + "src": "2825:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2825:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2372, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 2417, + "src": "2851:31:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2851:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2371, + "nodeType": "ArrayTypeName", + "src": "2851:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2715:173:27" + }, + "returnParameters": { + "id": 2376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2375, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2417, + "src": "2915:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2374, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2915:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2914:9:27" + }, + "scope": 2468, + "src": "2693:749:27", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "id": 2431, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_onSwapGivenIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2427, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2419, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 2431, + "src": "3980:30:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 2418, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "3980:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2422, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 2431, + "src": "4020:25:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2420, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4020:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2421, + "nodeType": "ArrayTypeName", + "src": "4020:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2424, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 2431, + "src": "4055:15:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2423, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4055:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2426, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 2431, + "src": "4080:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2425, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4080:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3970:132:27" + }, + "returnParameters": { + "id": 2430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2429, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2431, + "src": "4129:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4129:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4128:9:27" + }, + "scope": 2468, + "src": "3947:191:27", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "id": 2445, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_onSwapGivenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2441, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2433, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 2445, + "src": "4627:30:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 2432, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "4627:11:27", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2436, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 2445, + "src": "4667:25:27", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4667:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2435, + "nodeType": "ArrayTypeName", + "src": "4667:9:27", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2438, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 2445, + "src": "4702:15:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4702:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2440, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 2445, + "src": "4727:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2439, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4727:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4617:132:27" + }, + "returnParameters": { + "id": 2444, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2443, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2445, + "src": "4776:7:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2442, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4776:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4775:9:27" + }, + "scope": 2468, + "src": "4593:192:27", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2466, + "nodeType": "Block", + "src": "4910:84:27", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2455, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2447, + "src": "4929:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 2456, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2451, + "src": "4939:5:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4929:15:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2458, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2449, + "src": "4948:8:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 2459, + "name": "limit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2451, + "src": "4959:5:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4948:16:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4929:35:27", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2462, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4966:6:27", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "4966:20:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2454, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4920:8:27", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4920:67:27", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2465, + "nodeType": "ExpressionStatement", + "src": "4920:67:27" + } + ] + }, + "id": 2467, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_validateIndexes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2452, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2447, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "4826:15:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2446, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4826:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2449, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "4851:16:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2448, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4851:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2451, + "mutability": "mutable", + "name": "limit", + "nodeType": "VariableDeclaration", + "scope": 2467, + "src": "4877:13:27", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2450, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4877:7:27", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4816:80:27" + }, + "returnParameters": { + "id": 2453, + "nodeType": "ParameterList", + "parameters": [], + "src": "4910:0:27" + }, + "scope": 2468, + "src": "4791:203:27", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 2469, + "src": "1189:3807:27" + } + ], + "src": "688:4309:27" + }, + "id": 27 + }, + "@balancer-labs/v2-pool-utils/contracts/BasePool.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePool.sol", + "exportedSymbols": { + "BasePool": [ + 3860 + ] + }, + "id": 3861, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2470, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:28" + }, + { + "id": 2471, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:28" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IAssetManager.sol", + "id": 2472, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 369, + "src": "747:77:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IControlledPool.sol", + "id": 2473, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 410, + "src": "825:79:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 2474, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 2022, + "src": "905:65:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IBasePool.sol", + "id": 2475, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 1426, + "src": "971:68:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "id": 2476, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 5995, + "src": "1041:77:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "id": 2477, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 6811, + "src": "1119:74:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol", + "id": 2478, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 6283, + "src": "1194:84:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "id": 2479, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 9427, + "src": "1279:75:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 2480, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 7233, + "src": "1355:72:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 2481, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 8843, + "src": "1428:66:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BalancerPoolToken.sol", + "file": "./BalancerPoolToken.sol", + "id": 2482, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 2231, + "src": "1496:33:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol", + "file": "./BasePoolAuthorization.sol", + "id": 2483, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 3956, + "src": "1530:37:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol", + "file": "./RecoveryMode.sol", + "id": 2484, + "nodeType": "ImportDirective", + "scope": 3861, + "sourceUnit": 4137, + "src": "1568:28:28", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 2486, + "name": "IBasePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1425, + "src": "2926:9:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBasePool_$1425", + "typeString": "contract IBasePool" + } + }, + "id": 2487, + "nodeType": "InheritanceSpecifier", + "src": "2926:9:28" + }, + { + "baseName": { + "id": 2488, + "name": "IControlledPool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 409, + "src": "2941:15:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IControlledPool_$409", + "typeString": "contract IControlledPool" + } + }, + "id": 2489, + "nodeType": "InheritanceSpecifier", + "src": "2941:15:28" + }, + { + "baseName": { + "id": 2490, + "name": "BasePoolAuthorization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3955, + "src": "2962:21:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolAuthorization_$3955", + "typeString": "contract BasePoolAuthorization" + } + }, + "id": 2491, + "nodeType": "InheritanceSpecifier", + "src": "2962:21:28" + }, + { + "baseName": { + "id": 2492, + "name": "BalancerPoolToken", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2230, + "src": "2989:17:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BalancerPoolToken_$2230", + "typeString": "contract BalancerPoolToken" + } + }, + "id": 2493, + "nodeType": "InheritanceSpecifier", + "src": "2989:17:28" + }, + { + "baseName": { + "id": 2494, + "name": "TemporarilyPausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6282, + "src": "3012:19:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_TemporarilyPausable_$6282", + "typeString": "contract TemporarilyPausable" + } + }, + "id": 2495, + "nodeType": "InheritanceSpecifier", + "src": "3012:19:28" + }, + { + "baseName": { + "id": 2496, + "name": "RecoveryMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4136, + "src": "3037:12:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RecoveryMode_$4136", + "typeString": "contract RecoveryMode" + } + }, + "id": 2497, + "nodeType": "InheritanceSpecifier", + "src": "3037:12:28" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3955, + 4136, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535 + ], + "contractKind": "contract", + "documentation": { + "id": 2485, + "nodeType": "StructuredDocumentation", + "src": "1635:1256:28", + "text": " @notice Reference implementation for the base layer of a Pool contract.\n @dev Reference implementation for the base layer of a Pool contract that manages a single Pool with optional\n Asset Managers, an admin-controlled swap fee percentage, and an emergency pause mechanism.\n This Pool pays protocol fees by minting BPT directly to the ProtocolFeeCollector instead of using the\n `dueProtocolFees` return value. This results in the underlying tokens continuing to provide liquidity\n for traders, while still keeping gas usage to a minimum since only a single token (the BPT) is transferred.\n Note that neither swap fees nor the pause mechanism are used by this contract. They are passed through so that\n derived contracts can use them via the `_addSwapFeeAmount` and `_subtractSwapFeeAmount` functions, and the\n `whenNotPaused` modifier.\n No admin permissions are checked here: instead, this contract delegates that to the Vault's own Authorizer.\n Because this contract doesn't implement the swap hooks, derived contracts should generally inherit from\n BaseGeneralPool or BaseMinimalSwapInfoPool. Otherwise, subclasses must inherit from the corresponding interfaces\n and implement the swap callbacks themselves." + }, + "fullyImplemented": false, + "id": 3860, + "linearizedBaseContracts": [ + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "BasePool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 2500, + "libraryName": { + "id": 2498, + "name": "WordCodec", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6810, + "src": "3062:9:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WordCodec_$6810", + "typeString": "library WordCodec" + } + }, + "nodeType": "UsingForDirective", + "src": "3056:28:28", + "typeName": { + "id": 2499, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3076:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "id": 2503, + "libraryName": { + "id": 2501, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "3095:10:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "3089:29:28", + "typeName": { + "id": 2502, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3110:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 2506, + "libraryName": { + "id": 2504, + "name": "BasePoolUserData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 286, + "src": "3129:16:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolUserData_$286", + "typeString": "library BasePoolUserData" + } + }, + "nodeType": "UsingForDirective", + "src": "3123:33:28", + "typeName": { + "id": 2505, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3150:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + { + "constant": true, + "id": 2509, + "mutability": "constant", + "name": "_MIN_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "3162:40:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2507, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3162:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 2508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3201:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 2512, + "mutability": "constant", + "name": "_DEFAULT_MINIMUM_BPT", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "3209:51:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2510, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3209:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "316536", + "id": 2511, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3257:3:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000_by_1", + "typeString": "int_const 1000000" + }, + "value": "1e6" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 2515, + "mutability": "constant", + "name": "_MIN_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "3313:56:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2513, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3313:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31653132", + "id": 2514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3365:4:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000_by_1", + "typeString": "int_const 1000000000000" + }, + "value": "1e12" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 2518, + "mutability": "constant", + "name": "_MAX_SWAP_FEE_PERCENTAGE", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "3386:56:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2516, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3386:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31653137", + "id": 2517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3438:4:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000_by_1", + "typeString": "int_const 100000000000000000" + }, + "value": "1e17" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 2520, + "mutability": "mutable", + "name": "_miscData", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "4239:25:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2519, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4239:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 2523, + "mutability": "constant", + "name": "_SWAP_FEE_PERCENTAGE_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "4271:58:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2521, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4271:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313932", + "id": 2522, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4326:3:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_192_by_1", + "typeString": "int_const 192" + }, + "value": "192" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 2526, + "mutability": "constant", + "name": "_RECOVERY_MODE_BIT_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "4335:56:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2524, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4335:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323535", + "id": 2525, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4388:3:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 2529, + "mutability": "constant", + "name": "_SWAP_FEE_PERCENTAGE_BIT_LENGTH", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "4502:61:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2527, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4502:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3633", + "id": 2528, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4561:2:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_63_by_1", + "typeString": "int_const 63" + }, + "value": "63" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 2531, + "mutability": "immutable", + "name": "_poolId", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "4570:33:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2530, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4570:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 2533, + "mutability": "immutable", + "name": "_protocolFeesCollector", + "nodeType": "VariableDeclaration", + "scope": 3860, + "src": "4711:63:28", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + }, + "typeName": { + "id": 2532, + "name": "IProtocolFeesCollector", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1556, + "src": "4711:22:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 2537, + "name": "SwapFeePercentageChanged", + "nodeType": "EventDefinition", + "parameters": { + "id": 2536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2535, + "indexed": false, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 2537, + "src": "4812:25:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2534, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4812:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4811:27:28" + }, + "src": "4781:58:28" + }, + { + "body": { + "id": 2638, + "nodeType": "Block", + "src": "5940:1091:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2585, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2548, + "src": "5959:6:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 2586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5959:13:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 2587, + "name": "_MIN_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2509, + "src": "5976:11:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5959:28:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2589, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "5989:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MIN_TOKENS", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "5989:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2584, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "5950:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5950:57:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2592, + "nodeType": "ExpressionStatement", + "src": "5950:57:28" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2594, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2548, + "src": "6026:6:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 2595, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6026:13:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2596, + "name": "_getMaxTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2659, + "src": "6043:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 2597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6043:15:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6026:32:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2599, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6060:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MAX_TOKENS", + "nodeType": "MemberAccess", + "referencedDeclaration": 581, + "src": "6060:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2593, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6017:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6017:61:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2602, + "nodeType": "ExpressionStatement", + "src": "6017:61:28" + }, + { + "expression": { + "arguments": [ + { + "id": 2606, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2548, + "src": "6659:6:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + ], + "expression": { + "id": 2603, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "6626:12:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 2605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureArrayIsSorted", + "nodeType": "MemberAccess", + "referencedDeclaration": 5942, + "src": "6626:32:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$returns$__$", + "typeString": "function (contract IERC20[] memory) pure" + } + }, + "id": 2607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6626:40:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2608, + "nodeType": "ExpressionStatement", + "src": "6626:40:28" + }, + { + "expression": { + "arguments": [ + { + "id": 2610, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2553, + "src": "6699:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2609, + "name": "_setSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2744, + "src": "6677:21:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 2611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6677:40:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2612, + "nodeType": "ExpressionStatement", + "src": "6677:40:28" + }, + { + "assignments": [ + 2614 + ], + "declarations": [ + { + "constant": false, + "id": 2614, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2638, + "src": "6728:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2613, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6728:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 2619, + "initialValue": { + "arguments": [ + { + "id": 2617, + "name": "specialization", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2541, + "src": "6764:14:28", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + ], + "expression": { + "id": 2615, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2539, + "src": "6745:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 2616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "registerPool", + "nodeType": "MemberAccess", + "referencedDeclaration": 1688, + "src": "6745:18:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_enum$_PoolSpecialization_$1680_$returns$_t_bytes32_$", + "typeString": "function (enum IVault.PoolSpecialization) external returns (bytes32)" + } + }, + "id": 2618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6745:34:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6728:51:28" + }, + { + "expression": { + "arguments": [ + { + "id": 2623, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2614, + "src": "6811:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2624, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2548, + "src": "6819:6:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 2625, + "name": "assetManagers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2551, + "src": "6827:13:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + ], + "expression": { + "id": 2620, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2539, + "src": "6790:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 2622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "registerTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 1719, + "src": "6790:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$", + "typeString": "function (bytes32,contract IERC20[] memory,address[] memory) external" + } + }, + "id": 2626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6790:51:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2627, + "nodeType": "ExpressionStatement", + "src": "6790:51:28" + }, + { + "expression": { + "id": 2630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2628, + "name": "_poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2531, + "src": "6941:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 2629, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2614, + "src": "6951:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "6941:16:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2631, + "nodeType": "ExpressionStatement", + "src": "6941:16:28" + }, + { + "expression": { + "id": 2636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2632, + "name": "_protocolFeesCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2533, + "src": "6967:22:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 2633, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2539, + "src": "6992:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 2634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getProtocolFeesCollector", + "nodeType": "MemberAccess", + "referencedDeclaration": 2008, + "src": "6992:30:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IProtocolFeesCollector_$1556_$", + "typeString": "function () view external returns (contract IProtocolFeesCollector)" + } + }, + "id": 2635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6992:32:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "src": "6967:57:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "id": 2637, + "nodeType": "ExpressionStatement", + "src": "6967:57:28" + } + ] + }, + "id": 2639, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 2566, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5767:3:28", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5767:10:28", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 2565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5759:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2564, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5759:7:28", + "typeDescriptions": {} + } + }, + "id": 2568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5759:19:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2563, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5751:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 2562, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5751:7:28", + "typeDescriptions": {} + } + }, + "id": 2569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5751:28:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 2570, + "modifierName": { + "id": 2561, + "name": "Authentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5117, + "src": "5736:14:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Authentication_$5117_$", + "typeString": "type(contract Authentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5736:44:28" + }, + { + "arguments": [ + { + "id": 2572, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2543, + "src": "5807:4:28", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 2573, + "name": "symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2545, + "src": "5813:6:28", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 2574, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2539, + "src": "5821:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + } + ], + "id": 2575, + "modifierName": { + "id": 2571, + "name": "BalancerPoolToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2230, + "src": "5789:17:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BalancerPoolToken_$2230_$", + "typeString": "type(contract BalancerPoolToken)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5789:38:28" + }, + { + "arguments": [ + { + "id": 2577, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2559, + "src": "5858:5:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 2578, + "modifierName": { + "id": 2576, + "name": "BasePoolAuthorization", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3955, + "src": "5836:21:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePoolAuthorization_$3955_$", + "typeString": "type(contract BasePoolAuthorization)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5836:28:28" + }, + { + "arguments": [ + { + "id": 2580, + "name": "pauseWindowDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2555, + "src": "5893:19:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2581, + "name": "bufferPeriodDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2557, + "src": "5914:20:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 2582, + "modifierName": { + "id": 2579, + "name": "TemporarilyPausable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6282, + "src": "5873:19:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_TemporarilyPausable_$6282_$", + "typeString": "type(contract TemporarilyPausable)" + } + }, + "nodeType": "ModifierInvocation", + "src": "5873:62:28" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2560, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2539, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "4866:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 2538, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "4866:6:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2541, + "mutability": "mutable", + "name": "specialization", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "4888:40:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + }, + "typeName": { + "id": 2540, + "name": "IVault.PoolSpecialization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1680, + "src": "4888:25:28", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2543, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "4938:18:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2542, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4938:6:28", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2545, + "mutability": "mutable", + "name": "symbol", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "4966:20:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2544, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4966:6:28", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2548, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "4996:22:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 2546, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "4996:6:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 2547, + "nodeType": "ArrayTypeName", + "src": "4996:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2551, + "mutability": "mutable", + "name": "assetManagers", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "5028:30:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 2549, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5028:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2550, + "nodeType": "ArrayTypeName", + "src": "5028:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2553, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "5068:25:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2552, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5068:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2555, + "mutability": "mutable", + "name": "pauseWindowDuration", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "5103:27:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2554, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5103:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2557, + "mutability": "mutable", + "name": "bufferPeriodDuration", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "5140:28:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2556, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5140:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2559, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 2639, + "src": "5178:13:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2558, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5178:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4856:341:28" + }, + "returnParameters": { + "id": 2583, + "nodeType": "ParameterList", + "parameters": [], + "src": "5940:0:28" + }, + "scope": 3860, + "src": "4845:2186:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1365 + ], + "body": { + "id": 2648, + "nodeType": "Block", + "src": "7174:31:28", + "statements": [ + { + "expression": { + "id": 2646, + "name": "_poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2531, + "src": "7191:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 2645, + "id": 2647, + "nodeType": "Return", + "src": "7184:14:28" + } + ] + }, + "documentation": { + "id": 2640, + "nodeType": "StructuredDocumentation", + "src": "7063:46:28", + "text": " @notice Return the pool id." + }, + "functionSelector": "38fff2d0", + "id": 2649, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolId", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2642, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7147:8:28" + }, + "parameters": { + "id": 2641, + "nodeType": "ParameterList", + "parameters": [], + "src": "7132:2:28" + }, + "returnParameters": { + "id": 2645, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2644, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2649, + "src": "7165:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2643, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7165:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "7164:9:28" + }, + "scope": 3860, + "src": "7114:91:28", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 2654, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_getTotalTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2650, + "nodeType": "ParameterList", + "parameters": [], + "src": "7235:2:28" + }, + "returnParameters": { + "id": 2653, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2652, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2654, + "src": "7269:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2651, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7269:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7268:9:28" + }, + "scope": 3860, + "src": "7211:67:28", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 2659, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_getMaxTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2655, + "nodeType": "ParameterList", + "parameters": [], + "src": "7306:2:28" + }, + "returnParameters": { + "id": 2658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2657, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2659, + "src": "7340:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2656, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7340:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7339:9:28" + }, + "scope": 3860, + "src": "7284:65:28", + "stateMutability": "pure", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2667, + "nodeType": "Block", + "src": "7749:44:28", + "statements": [ + { + "expression": { + "id": 2665, + "name": "_DEFAULT_MINIMUM_BPT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2512, + "src": "7766:20:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2664, + "id": 2666, + "nodeType": "Return", + "src": "7759:27:28" + } + ] + }, + "documentation": { + "id": 2660, + "nodeType": "StructuredDocumentation", + "src": "7355:323:28", + "text": " @dev Returns the minimum BPT supply. This amount is minted to the zero address during initialization, effectively\n locking it.\n This is useful to make sure Pool initialization happens only once, but derived Pools can change this value (even\n to zero) by overriding this function." + }, + "id": 2668, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getMinimumBpt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2661, + "nodeType": "ParameterList", + "parameters": [], + "src": "7706:2:28" + }, + "returnParameters": { + "id": 2664, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2663, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2668, + "src": "7740:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7740:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7739:9:28" + }, + "scope": 3860, + "src": "7683:110:28", + "stateMutability": "pure", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1371 + ], + "body": { + "id": 2681, + "nodeType": "Block", + "src": "8005:106:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2677, + "name": "_SWAP_FEE_PERCENTAGE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2523, + "src": "8043:27:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2678, + "name": "_SWAP_FEE_PERCENTAGE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2529, + "src": "8072:31:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2675, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "8022:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "8022:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 2679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8022:82:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2674, + "id": 2680, + "nodeType": "Return", + "src": "8015:89:28" + } + ] + }, + "documentation": { + "id": 2669, + "nodeType": "StructuredDocumentation", + "src": "7799:122:28", + "text": " @notice Return the current value of the swap fee percentage.\n @dev This is stored in `_miscData`." + }, + "functionSelector": "55c67628", + "id": 2682, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getSwapFeePercentage", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2671, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7978:8:28" + }, + "parameters": { + "id": 2670, + "nodeType": "ParameterList", + "parameters": [], + "src": "7955:2:28" + }, + "returnParameters": { + "id": 2674, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2673, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2682, + "src": "7996:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2672, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7996:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7995:9:28" + }, + "scope": 3860, + "src": "7926:185:28", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 2690, + "nodeType": "Block", + "src": "8386:46:28", + "statements": [ + { + "expression": { + "id": 2688, + "name": "_protocolFeesCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2533, + "src": "8403:22:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "functionReturnParameters": 2687, + "id": 2689, + "nodeType": "Return", + "src": "8396:29:28" + } + ] + }, + "documentation": { + "id": 2683, + "nodeType": "StructuredDocumentation", + "src": "8117:183:28", + "text": " @notice Return the ProtocolFeesCollector contract.\n @dev This is immutable, and retrieved from the Vault on construction. (It is also immutable in the Vault.)" + }, + "functionSelector": "d2946c2b", + "id": 2691, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeesCollector", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2684, + "nodeType": "ParameterList", + "parameters": [], + "src": "8338:2:28" + }, + "returnParameters": { + "id": 2687, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2686, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2691, + "src": "8362:22:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + }, + "typeName": { + "id": 2685, + "name": "IProtocolFeesCollector", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1556, + "src": "8362:22:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + }, + "visibility": "internal" + } + ], + "src": "8361:24:28" + }, + "scope": 3860, + "src": "8305:127:28", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 401 + ], + "body": { + "id": 2706, + "nodeType": "Block", + "src": "8831:57:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2703, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2694, + "src": "8863:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2702, + "name": "_setSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2744, + "src": "8841:21:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 2704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8841:40:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2705, + "nodeType": "ExpressionStatement", + "src": "8841:40:28" + } + ] + }, + "documentation": { + "id": 2692, + "nodeType": "StructuredDocumentation", + "src": "8438:280:28", + "text": " @notice Set the swap fee percentage.\n @dev This is a permissioned function, and disabled if the pool is paused. The swap fee must be within the\n bounds set by MIN_SWAP_FEE_PERCENTAGE/MAX_SWAP_FEE_PERCENTAGE. Emits the SwapFeePercentageChanged event." + }, + "functionSelector": "38e9922e", + "id": 2707, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 2698, + "modifierName": { + "id": 2697, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "8804:12:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8804:12:28" + }, + { + "id": 2700, + "modifierName": { + "id": 2699, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6157, + "src": "8817:13:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8817:13:28" + } + ], + "name": "setSwapFeePercentage", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2696, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8795:8:28" + }, + "parameters": { + "id": 2695, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2694, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 2707, + "src": "8753:25:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2693, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8753:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8752:27:28" + }, + "returnParameters": { + "id": 2701, + "nodeType": "ParameterList", + "parameters": [], + "src": "8831:0:28" + }, + "scope": 3860, + "src": "8723:165:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 2743, + "nodeType": "Block", + "src": "8969:434:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2713, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2709, + "src": "8988:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2714, + "name": "_getMinSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2752, + "src": "9009:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 2715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9009:26:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8988:47:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2717, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "9037:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MIN_SWAP_FEE_PERCENTAGE", + "nodeType": "MemberAccess", + "referencedDeclaration": 587, + "src": "9037:30:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2712, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "8979:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8979:89:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2720, + "nodeType": "ExpressionStatement", + "src": "8979:89:28" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2722, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2709, + "src": "9087:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2723, + "name": "_getMaxSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2760, + "src": "9108:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 2724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9108:26:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9087:47:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2726, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "9136:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MAX_SWAP_FEE_PERCENTAGE", + "nodeType": "MemberAccess", + "referencedDeclaration": 584, + "src": "9136:30:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2721, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "9078:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9078:89:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2729, + "nodeType": "ExpressionStatement", + "src": "9078:89:28" + }, + { + "expression": { + "id": 2737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2730, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "9178:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 2733, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2709, + "src": "9224:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2734, + "name": "_SWAP_FEE_PERCENTAGE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2523, + "src": "9255:27:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 2735, + "name": "_SWAP_FEE_PERCENTAGE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2529, + "src": "9296:31:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2731, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "9190:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "9190:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 2736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9190:147:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "9178:159:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2738, + "nodeType": "ExpressionStatement", + "src": "9178:159:28" + }, + { + "eventCall": { + "arguments": [ + { + "id": 2740, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2709, + "src": "9378:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2739, + "name": "SwapFeePercentageChanged", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2537, + "src": "9353:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 2741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9353:43:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2742, + "nodeType": "EmitStatement", + "src": "9348:48:28" + } + ] + }, + "id": 2744, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2710, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2709, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 2744, + "src": "8925:25:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8925:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8924:27:28" + }, + "returnParameters": { + "id": 2711, + "nodeType": "ParameterList", + "parameters": [], + "src": "8969:0:28" + }, + "scope": 3860, + "src": "8894:509:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2751, + "nodeType": "Block", + "src": "9485:48:28", + "statements": [ + { + "expression": { + "id": 2749, + "name": "_MIN_SWAP_FEE_PERCENTAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2515, + "src": "9502:24:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2748, + "id": 2750, + "nodeType": "Return", + "src": "9495:31:28" + } + ] + }, + "id": 2752, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getMinSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2745, + "nodeType": "ParameterList", + "parameters": [], + "src": "9442:2:28" + }, + "returnParameters": { + "id": 2748, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2747, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2752, + "src": "9476:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2746, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9476:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9475:9:28" + }, + "scope": 3860, + "src": "9409:124:28", + "stateMutability": "pure", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2759, + "nodeType": "Block", + "src": "9615:48:28", + "statements": [ + { + "expression": { + "id": 2757, + "name": "_MAX_SWAP_FEE_PERCENTAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2518, + "src": "9632:24:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2756, + "id": 2758, + "nodeType": "Return", + "src": "9625:31:28" + } + ] + }, + "id": 2760, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getMaxSwapFeePercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2753, + "nodeType": "ParameterList", + "parameters": [], + "src": "9572:2:28" + }, + "returnParameters": { + "id": 2756, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2755, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2760, + "src": "9606:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2754, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9606:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9605:9:28" + }, + "scope": 3860, + "src": "9539:124:28", + "stateMutability": "pure", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 4012 + ], + "body": { + "id": 2772, + "nodeType": "Block", + "src": "9808:71:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2769, + "name": "_RECOVERY_MODE_BIT_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2526, + "src": "9846:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2767, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "9825:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6602, + "src": "9825:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256) pure returns (bool)" + } + }, + "id": 2770, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9825:47:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 2766, + "id": 2771, + "nodeType": "Return", + "src": "9818:54:28" + } + ] + }, + "documentation": { + "id": 2761, + "nodeType": "StructuredDocumentation", + "src": "9669:72:28", + "text": " @notice Returns whether the pool is in Recovery Mode." + }, + "functionSelector": "b35056b8", + "id": 2773, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "inRecoveryMode", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2763, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9784:8:28" + }, + "parameters": { + "id": 2762, + "nodeType": "ParameterList", + "parameters": [], + "src": "9769:2:28" + }, + "returnParameters": { + "id": 2766, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2765, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2773, + "src": "9802:4:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2764, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9802:4:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9801:6:28" + }, + "scope": 3860, + "src": "9746:133:28", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 4018 + ], + "body": { + "id": 2798, + "nodeType": "Block", + "src": "10043:422:28", + "statements": [ + { + "expression": { + "id": 2786, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2780, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "10053:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 2783, + "name": "enabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2776, + "src": "10086:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 2784, + "name": "_RECOVERY_MODE_BIT_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2526, + "src": "10095:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 2781, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "10065:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6690, + "src": "10065:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bool,uint256) pure returns (bytes32)" + } + }, + "id": 2785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10065:56:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "10053:68:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2787, + "nodeType": "ExpressionStatement", + "src": "10053:68:28" + }, + { + "eventCall": { + "arguments": [ + { + "id": 2789, + "name": "enabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2776, + "src": "10162:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 2788, + "name": "RecoveryModeStateChanged", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 436, + "src": "10137:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 2790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10137:33:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2791, + "nodeType": "EmitStatement", + "src": "10132:38:28" + }, + { + "condition": { + "id": 2793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "10424:8:28", + "subExpression": { + "id": 2792, + "name": "enabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2776, + "src": "10425:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2797, + "nodeType": "IfStatement", + "src": "10420:38:28", + "trueBody": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2794, + "name": "_onDisableRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2804, + "src": "10434:22:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 2795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10434:24:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2796, + "nodeType": "ExpressionStatement", + "src": "10434:24:28" + } + } + ] + }, + "documentation": { + "id": 2774, + "nodeType": "StructuredDocumentation", + "src": "9885:87:28", + "text": " @dev Sets the recoveryMode state, and emits the corresponding event." + }, + "id": 2799, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setRecoveryMode", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2778, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10034:8:28" + }, + "parameters": { + "id": 2777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2776, + "mutability": "mutable", + "name": "enabled", + "nodeType": "VariableDeclaration", + "scope": 2799, + "src": "10003:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2775, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10003:4:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10002:14:28" + }, + "returnParameters": { + "id": 2779, + "nodeType": "ParameterList", + "parameters": [], + "src": "10043:0:28" + }, + "scope": 3860, + "src": "9977:488:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2803, + "nodeType": "Block", + "src": "10731:2:28", + "statements": [] + }, + "documentation": { + "id": 2800, + "nodeType": "StructuredDocumentation", + "src": "10471:204:28", + "text": " @dev Performs any necessary actions on the disabling of Recovery Mode.\n This is usually to reset any fee collection mechanisms to ensure that they operate correctly going forward." + }, + "id": 2804, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onDisableRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2801, + "nodeType": "ParameterList", + "parameters": [], + "src": "10711:2:28" + }, + "returnParameters": { + "id": 2802, + "nodeType": "ParameterList", + "parameters": [], + "src": "10731:0:28" + }, + "scope": 3860, + "src": "10680:53:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 408 + ], + "body": { + "id": 2822, + "nodeType": "Block", + "src": "11203:62:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 2818, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2807, + "src": "11240:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + { + "id": 2819, + "name": "poolConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2809, + "src": "11247:10:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 2817, + "name": "_setAssetManagerPoolConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2853, + "src": "11213:26:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$1152_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (contract IERC20,bytes memory)" + } + }, + "id": 2820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11213:45:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2821, + "nodeType": "ExpressionStatement", + "src": "11213:45:28" + } + ] + }, + "documentation": { + "id": 2805, + "nodeType": "StructuredDocumentation", + "src": "10739:290:28", + "text": " @notice Set the asset manager parameters for the given token.\n @dev This is a permissioned function, unavailable when the pool is paused.\n The details of the configuration data are set by each Asset Manager. (For an example, see\n `RewardsAssetManager`.)" + }, + "functionSelector": "50dd6ed9", + "id": 2823, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 2813, + "modifierName": { + "id": 2812, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "11164:12:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "11164:12:28" + }, + { + "id": 2815, + "modifierName": { + "id": 2814, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6157, + "src": "11185:13:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "11185:13:28" + } + ], + "name": "setAssetManagerPoolConfig", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2811, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11147:8:28" + }, + "parameters": { + "id": 2810, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2807, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2823, + "src": "11069:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2806, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "11069:6:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2809, + "mutability": "mutable", + "name": "poolConfig", + "nodeType": "VariableDeclaration", + "scope": 2823, + "src": "11083:23:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2808, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11083:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "11068:39:28" + }, + "returnParameters": { + "id": 2816, + "nodeType": "ParameterList", + "parameters": [], + "src": "11203:0:28" + }, + "scope": 3860, + "src": "11034:231:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 2852, + "nodeType": "Block", + "src": "11354:196:28", + "statements": [ + { + "assignments": [ + 2831 + ], + "declarations": [ + { + "constant": false, + "id": 2831, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2852, + "src": "11364:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2830, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11364:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 2834, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2832, + "name": "getPoolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2649, + "src": "11381:9:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 2833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11381:11:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11364:28:28" + }, + { + "assignments": [ + null, + null, + null, + 2836 + ], + "declarations": [ + null, + null, + null, + { + "constant": false, + "id": 2836, + "mutability": "mutable", + "name": "assetManager", + "nodeType": "VariableDeclaration", + "scope": 2852, + "src": "11409:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2835, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11409:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 2843, + "initialValue": { + "arguments": [ + { + "id": 2840, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2831, + "src": "11461:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2841, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2825, + "src": "11469:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2837, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "11433:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 2838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11433:10:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 2839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getPoolTokenInfo", + "nodeType": "MemberAccess", + "referencedDeclaration": 1763, + "src": "11433:27:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_contract$_IERC20_$1152_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$", + "typeString": "function (bytes32,contract IERC20) view external returns (uint256,uint256,uint256,address)" + } + }, + "id": 2842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11433:42:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,address)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11402:73:28" + }, + { + "expression": { + "arguments": [ + { + "id": 2848, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2831, + "src": "11524:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 2849, + "name": "poolConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2827, + "src": "11532:10:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 2845, + "name": "assetManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2836, + "src": "11500:12:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2844, + "name": "IAssetManager", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 368, + "src": "11486:13:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IAssetManager_$368_$", + "typeString": "type(contract IAssetManager)" + } + }, + "id": 2846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11486:27:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAssetManager_$368", + "typeString": "contract IAssetManager" + } + }, + "id": 2847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setConfig", + "nodeType": "MemberAccess", + "referencedDeclaration": 303, + "src": "11486:37:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (bytes32,bytes memory) external" + } + }, + "id": 2850, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11486:57:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2851, + "nodeType": "ExpressionStatement", + "src": "11486:57:28" + } + ] + }, + "id": 2853, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setAssetManagerPoolConfig", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2828, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2825, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "11307:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 2824, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "11307:6:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2827, + "mutability": "mutable", + "name": "poolConfig", + "nodeType": "VariableDeclaration", + "scope": 2853, + "src": "11321:23:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2826, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11321:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "11306:39:28" + }, + "returnParameters": { + "id": 2829, + "nodeType": "ParameterList", + "parameters": [], + "src": "11354:0:28" + }, + "scope": 3860, + "src": "11271:279:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 2863, + "nodeType": "Block", + "src": "11856:33:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "74727565", + "id": 2860, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11877:4:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 2859, + "name": "_setPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6224, + "src": "11866:10:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 2861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11866:16:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2862, + "nodeType": "ExpressionStatement", + "src": "11866:16:28" + } + ] + }, + "documentation": { + "id": 2854, + "nodeType": "StructuredDocumentation", + "src": "11556:256:28", + "text": " @notice Pause the pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment (see `TemporarilyPausable`)." + }, + "functionSelector": "8456cb59", + "id": 2864, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 2857, + "modifierName": { + "id": 2856, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "11843:12:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "11843:12:28" + } + ], + "name": "pause", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2855, + "nodeType": "ParameterList", + "parameters": [], + "src": "11831:2:28" + }, + "returnParameters": { + "id": 2858, + "nodeType": "ParameterList", + "parameters": [], + "src": "11856:0:28" + }, + "scope": 3860, + "src": "11817:72:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 2874, + "nodeType": "Block", + "src": "12311:34:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "66616c7365", + "id": 2871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12332:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 2870, + "name": "_setPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6224, + "src": "12321:10:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 2872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12321:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2873, + "nodeType": "ExpressionStatement", + "src": "12321:17:28" + } + ] + }, + "documentation": { + "id": 2865, + "nodeType": "StructuredDocumentation", + "src": "11895:370:28", + "text": " @notice Reverse a `pause` operation, and restore a pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused pool within the Buffer Period set during\n pool factory deployment (see `TemporarilyPausable`). Note that any paused pools will automatically unpause\n after the Buffer Period expires." + }, + "functionSelector": "3f4ba83a", + "id": 2875, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 2868, + "modifierName": { + "id": 2867, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "12298:12:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "12298:12:28" + } + ], + "name": "unpause", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2866, + "nodeType": "ParameterList", + "parameters": [], + "src": "12286:2:28" + }, + "returnParameters": { + "id": 2869, + "nodeType": "ParameterList", + "parameters": [], + "src": "12311:0:28" + }, + "scope": 3860, + "src": "12270:75:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 3949 + ], + "body": { + "id": 2906, + "nodeType": "Block", + "src": "12443:229:28", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 2889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2883, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2877, + "src": "12473:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 2885, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "12497:4:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + }, + "id": 2886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setSwapFeePercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 2707, + "src": "12497:25:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256) external" + } + }, + "id": 2887, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "12497:34:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 2884, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5107, + "src": "12485:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 2888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12485:47:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "12473:59:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2890, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12472:61:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 2897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2891, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2877, + "src": "12550:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 2893, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "12574:4:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + }, + "id": 2894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setAssetManagerPoolConfig", + "nodeType": "MemberAccess", + "referencedDeclaration": 2823, + "src": "12574:30:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$1152_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (contract IERC20,bytes memory) external" + } + }, + "id": 2895, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "12574:39:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 2892, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5107, + "src": "12562:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 2896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12562:52:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "12550:64:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2898, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12549:66:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "12472:143:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 2902, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2877, + "src": "12656:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 2900, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "12631:5:28", + "typeDescriptions": { + "typeIdentifier": "t_super$_BasePool_$3860", + "typeString": "contract super BasePool" + } + }, + "id": 2901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_isOwnerOnlyAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 3949, + "src": "12631:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 2903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12631:34:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "12472:193:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 2882, + "id": 2905, + "nodeType": "Return", + "src": "12453:212:28" + } + ] + }, + "id": 2907, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2879, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "12419:8:28" + }, + "parameters": { + "id": 2878, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2877, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 2907, + "src": "12379:16:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2876, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12379:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "12378:18:28" + }, + "returnParameters": { + "id": 2882, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2881, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2907, + "src": "12437:4:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 2880, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12437:4:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12436:6:28" + }, + "scope": 3860, + "src": "12351:321:28", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 2914, + "nodeType": "Block", + "src": "12734:33:28", + "statements": [ + { + "expression": { + "id": 2912, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "12751:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 2911, + "id": 2913, + "nodeType": "Return", + "src": "12744:16:28" + } + ] + }, + "id": 2915, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getMiscData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2908, + "nodeType": "ParameterList", + "parameters": [], + "src": "12699:2:28" + }, + "returnParameters": { + "id": 2911, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2910, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 2915, + "src": "12725:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2909, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12725:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "12724:9:28" + }, + "scope": 3860, + "src": "12678:89:28", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2929, + "nodeType": "Block", + "src": "13031:64:28", + "statements": [ + { + "expression": { + "id": 2927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 2921, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "13041:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 2924, + "name": "newData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2918, + "src": "13077:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "hexValue": "30", + "id": 2925, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13086:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "id": 2922, + "name": "_miscData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2520, + "src": "13053:9:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertBits192", + "nodeType": "MemberAccess", + "referencedDeclaration": 6646, + "src": "13053:23:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bytes32,uint256) pure returns (bytes32)" + } + }, + "id": 2926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13053:35:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "13041:47:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 2928, + "nodeType": "ExpressionStatement", + "src": "13041:47:28" + } + ] + }, + "documentation": { + "id": 2916, + "nodeType": "StructuredDocumentation", + "src": "12773:205:28", + "text": " @dev Inserts data into the least-significant 192 bits of the misc data storage slot.\n Note that the remaining 64 bits are used for the swap fee percentage and cannot be overloaded." + }, + "id": 2930, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setMiscData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 2919, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2918, + "mutability": "mutable", + "name": "newData", + "nodeType": "VariableDeclaration", + "scope": 2930, + "src": "13005:15:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2917, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13005:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "13004:17:28" + }, + "returnParameters": { + "id": 2920, + "nodeType": "ParameterList", + "parameters": [], + "src": "13031:0:28" + }, + "scope": 3860, + "src": "12983:112:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2957, + "nodeType": "Block", + "src": "13162:161:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2942, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 2935, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "13181:3:28", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "13181:10:28", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2939, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "13203:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 2940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13203:10:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + ], + "id": 2938, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13195:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2937, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13195:7:28", + "typeDescriptions": {} + } + }, + "id": 2941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13195:19:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "13181:33:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2943, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "13216:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "CALLER_NOT_VAULT", + "nodeType": "MemberAccess", + "referencedDeclaration": 593, + "src": "13216:23:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2934, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "13172:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13172:68:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2946, + "nodeType": "ExpressionStatement", + "src": "13172:68:28" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 2951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 2948, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2932, + "src": "13259:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2949, + "name": "getPoolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2649, + "src": "13269:9:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 2950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13269:11:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "13259:21:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 2952, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "13282:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 2953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_POOL_ID", + "nodeType": "MemberAccess", + "referencedDeclaration": 908, + "src": "13282:22:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2947, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "13250:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 2954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13250:55:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2955, + "nodeType": "ExpressionStatement", + "src": "13250:55:28" + }, + { + "id": 2956, + "nodeType": "PlaceholderStatement", + "src": "13315:1:28" + } + ] + }, + "id": 2958, + "name": "onlyVault", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 2933, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2932, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 2958, + "src": "13146:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2931, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13146:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "13145:16:28" + }, + "src": "13127:196:28", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1334 + ], + "body": { + "id": 3102, + "nodeType": "Block", + "src": "13857:1997:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2987, + "name": "_beforeSwapJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3400, + "src": "13867:19:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 2988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13867:21:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2989, + "nodeType": "ExpressionStatement", + "src": "13867:21:28" + }, + { + "assignments": [ + 2994 + ], + "declarations": [ + { + "constant": false, + "id": 2994, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3102, + "src": "13899:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2992, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13899:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2993, + "nodeType": "ArrayTypeName", + "src": "13899:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 2997, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2995, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "13933:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 2996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13933:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13899:51:28" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 2998, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9022, + "src": "13965:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 2999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13965:13:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 3000, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13982:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13965:18:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3100, + "nodeType": "Block", + "src": "14922:926:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3057, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2968, + "src": "14950:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3058, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2994, + "src": "14960:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3056, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "14936:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 3059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14936:39:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3060, + "nodeType": "ExpressionStatement", + "src": "14936:39:28" + }, + { + "assignments": [ + 3062, + 3065 + ], + "declarations": [ + { + "constant": false, + "id": 3062, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 3100, + "src": "14990:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3061, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14990:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3065, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 3100, + "src": "15012:26:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3063, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15012:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3064, + "nodeType": "ArrayTypeName", + "src": "15012:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 3080, + "initialValue": { + "arguments": [ + { + "id": 3067, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2961, + "src": "15071:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3068, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2963, + "src": "15095:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3069, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2965, + "src": "15119:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3070, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2968, + "src": "15146:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3071, + "name": "lastChangeBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2970, + "src": "15172:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3072, + "name": "inRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 2773 + ], + "referencedDeclaration": 2773, + "src": "15205:14:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 3073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15205:16:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 3075, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2972, + "src": "15228:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "15205:48:28", + "trueExpression": { + "hexValue": "30", + "id": 3074, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15224:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3077, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2994, + "src": "15324:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3078, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2974, + "src": "15356:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3066, + "name": "_onJoinPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "15042:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 3079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15042:336:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14989:389:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3082, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2965, + "src": "15508:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3083, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3062, + "src": "15519:12:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3081, + "name": "_mintPoolTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2216, + "src": "15492:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15492:40:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3085, + "nodeType": "ExpressionStatement", + "src": "15492:40:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3087, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3065, + "src": "15637:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3088, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2994, + "src": "15648:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3086, + "name": "_downscaleUpArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3731, + "src": "15619:17:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 3089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15619:44:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3090, + "nodeType": "ExpressionStatement", + "src": "15619:44:28" + }, + { + "expression": { + "components": [ + { + "id": 3091, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3065, + "src": "15795:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "expression": { + "id": 3095, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2968, + "src": "15820:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "15820:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3094, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "15806:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 3092, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15810:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3093, + "nodeType": "ArrayTypeName", + "src": "15810:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 3097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15806:30:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3098, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "15794:43:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256[] memory,uint256[] memory)" + } + }, + "functionReturnParameters": 2986, + "id": 3099, + "nodeType": "Return", + "src": "15787:50:28" + } + ] + }, + "id": 3101, + "nodeType": "IfStatement", + "src": "13961:1887:28", + "trueBody": { + "id": 3055, + "nodeType": "Block", + "src": "13985:931:28", + "statements": [ + { + "assignments": [ + 3003, + 3006 + ], + "declarations": [ + { + "constant": false, + "id": 3003, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 3055, + "src": "14000:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3002, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14000:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3006, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 3055, + "src": "14022:26:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3004, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14022:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3005, + "nodeType": "ArrayTypeName", + "src": "14022:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 3014, + "initialValue": { + "arguments": [ + { + "id": 3008, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2961, + "src": "14087:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3009, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2963, + "src": "14111:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3010, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2965, + "src": "14135:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3011, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2994, + "src": "14162:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3012, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2974, + "src": "14194:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3007, + "name": "_onInitializePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3338, + "src": "14052:17:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 3013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14052:164:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13999:217:28" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3016, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3003, + "src": "14524:12:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3017, + "name": "_getMinimumBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2668, + "src": "14540:14:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 3018, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14540:16:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14524:32:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 3020, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "14558:6:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 3021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MINIMUM_BPT", + "nodeType": "MemberAccess", + "referencedDeclaration": 590, + "src": "14558:18:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3015, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "14515:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 3022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14515:62:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3023, + "nodeType": "ExpressionStatement", + "src": "14515:62:28" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 3027, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14615:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 3026, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14607:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3025, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14607:7:28", + "typeDescriptions": {} + } + }, + "id": 3028, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14607:10:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3029, + "name": "_getMinimumBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2668, + "src": "14619:14:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 3030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14619:16:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3024, + "name": "_mintPoolTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2216, + "src": "14591:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14591:45:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3032, + "nodeType": "ExpressionStatement", + "src": "14591:45:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3034, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2965, + "src": "14666:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3038, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3035, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3003, + "src": "14677:12:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3036, + "name": "_getMinimumBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2668, + "src": "14692:14:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 3037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14692:16:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14677:31:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3033, + "name": "_mintPoolTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2216, + "src": "14650:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14650:59:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3040, + "nodeType": "ExpressionStatement", + "src": "14650:59:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3042, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3006, + "src": "14814:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3043, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2994, + "src": "14825:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3041, + "name": "_downscaleUpArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3731, + "src": "14796:17:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 3044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14796:44:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3045, + "nodeType": "ExpressionStatement", + "src": "14796:44:28" + }, + { + "expression": { + "components": [ + { + "id": 3046, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3006, + "src": "14863:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "expression": { + "id": 3050, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2968, + "src": "14888:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3051, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "14888:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3049, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "14874:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 3047, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14878:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3048, + "nodeType": "ArrayTypeName", + "src": "14878:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 3052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14874:30:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3053, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14862:43:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256[] memory,uint256[] memory)" + } + }, + "functionReturnParameters": 2986, + "id": 3054, + "nodeType": "Return", + "src": "14855:50:28" + } + ] + } + } + ] + }, + "documentation": { + "id": 2959, + "nodeType": "StructuredDocumentation", + "src": "13329:199:28", + "text": " @notice Vault hook for adding liquidity to a pool (including the first time, \"initializing\" the pool).\n @dev This function can only be called from the Vault, from `joinPool`." + }, + "functionSelector": "d5c096c4", + "id": 3103, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 2978, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2961, + "src": "13804:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 2979, + "modifierName": { + "id": 2977, + "name": "onlyVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2958, + "src": "13794:9:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_bytes32_$", + "typeString": "modifier (bytes32)" + } + }, + "nodeType": "ModifierInvocation", + "src": "13794:17:28" + } + ], + "name": "onJoinPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2976, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "13785:8:28" + }, + "parameters": { + "id": 2975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2961, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13562:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 2960, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "13562:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2963, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13586:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2962, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13586:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2965, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13610:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2964, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13610:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2968, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13637:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2966, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13637:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2967, + "nodeType": "ArrayTypeName", + "src": "13637:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2970, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13672:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13672:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2972, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13705:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2971, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13705:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2974, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13748:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 2973, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "13748:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "13552:223:28" + }, + "returnParameters": { + "id": 2986, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2982, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13821:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2980, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13821:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2981, + "nodeType": "ArrayTypeName", + "src": "13821:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 2985, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3103, + "src": "13839:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2983, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13839:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2984, + "nodeType": "ArrayTypeName", + "src": "13839:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "13820:36:28" + }, + "scope": 3860, + "src": "13533:2321:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1359 + ], + "body": { + "id": 3215, + "nodeType": "Block", + "src": "16340:1987:28", + "statements": [ + { + "assignments": [ + 3136 + ], + "declarations": [ + { + "constant": false, + "id": 3136, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 3215, + "src": "16350:27:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16350:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3135, + "nodeType": "ArrayTypeName", + "src": "16350:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 3137, + "nodeType": "VariableDeclarationStatement", + "src": "16350:27:28" + }, + { + "assignments": [ + 3139 + ], + "declarations": [ + { + "constant": false, + "id": 3139, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 3215, + "src": "16387:19:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3138, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16387:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3140, + "nodeType": "VariableDeclarationStatement", + "src": "16387:19:28" + }, + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 3141, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3119, + "src": "16841:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 3142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "isRecoveryModeExitKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 264, + "src": "16841:31:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (bool)" + } + }, + "id": 3143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16841:33:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3199, + "nodeType": "Block", + "src": "17251:761:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3159, + "name": "_beforeSwapJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3400, + "src": "17346:19:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 3160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17346:21:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3161, + "nodeType": "ExpressionStatement", + "src": "17346:21:28" + }, + { + "assignments": [ + 3166 + ], + "declarations": [ + { + "constant": false, + "id": 3166, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3199, + "src": "17382:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3164, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17382:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3165, + "nodeType": "ArrayTypeName", + "src": "17382:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 3169, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3167, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "17416:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 3168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17416:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17382:51:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3171, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3113, + "src": "17461:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3172, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3166, + "src": "17471:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3170, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "17447:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 3173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17447:39:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3174, + "nodeType": "ExpressionStatement", + "src": "17447:39:28" + }, + { + "expression": { + "id": 3192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 3175, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3139, + "src": "17502:11:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3176, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "17515:10:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3177, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "17501:25:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3179, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3106, + "src": "17558:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3180, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3108, + "src": "17582:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3181, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3110, + "src": "17606:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3182, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3113, + "src": "17633:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3183, + "name": "lastChangeBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3115, + "src": "17659:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3184, + "name": "inRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 2773 + ], + "referencedDeclaration": 2773, + "src": "17692:14:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 3185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17692:16:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 3187, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3117, + "src": "17715:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "17692:48:28", + "trueExpression": { + "hexValue": "30", + "id": 3186, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17711:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3189, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3166, + "src": "17811:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3190, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3119, + "src": "17843:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3178, + "name": "_onExitPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3392, + "src": "17529:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 3191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17529:336:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "src": "17501:364:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3193, + "nodeType": "ExpressionStatement", + "src": "17501:364:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3195, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "17974:10:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3196, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3166, + "src": "17986:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3194, + "name": "_downscaleDownArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3664, + "src": "17954:19:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 3197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17954:47:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3198, + "nodeType": "ExpressionStatement", + "src": "17954:47:28" + } + ] + }, + "id": 3200, + "nodeType": "IfStatement", + "src": "16837:1175:28", + "trueBody": { + "id": 3158, + "nodeType": "Block", + "src": "16876:369:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3144, + "name": "_ensureInRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4030, + "src": "16956:21:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 3145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16956:23:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3146, + "nodeType": "ExpressionStatement", + "src": "16956:23:28" + }, + { + "expression": { + "id": 3156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 3147, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3139, + "src": "17153:11:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3148, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "17166:10:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3149, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "17152:25:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 3151, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3113, + "src": "17200:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3152, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9022, + "src": "17210:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 3153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17210:13:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3154, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3119, + "src": "17225:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3150, + "name": "_doRecoveryModeExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4081, + "src": "17180:19:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 3155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17180:54:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "src": "17152:82:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3157, + "nodeType": "ExpressionStatement", + "src": "17152:82:28" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 3202, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3108, + "src": "18133:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3203, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3139, + "src": "18141:11:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3201, + "name": "_burnPoolTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2229, + "src": "18117:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18117:36:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3205, + "nodeType": "ExpressionStatement", + "src": "18117:36:28" + }, + { + "expression": { + "components": [ + { + "id": 3206, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3136, + "src": "18277:10:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "expression": { + "id": 3210, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3113, + "src": "18303:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "18303:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3209, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "18289:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 3207, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18293:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3208, + "nodeType": "ArrayTypeName", + "src": "18293:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 3212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18289:30:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3213, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18276:44:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256[] memory,uint256[] memory)" + } + }, + "functionReturnParameters": 3131, + "id": 3214, + "nodeType": "Return", + "src": "18269:51:28" + } + ] + }, + "documentation": { + "id": 3104, + "nodeType": "StructuredDocumentation", + "src": "15860:151:28", + "text": " @notice Vault hook for removing liquidity from a pool.\n @dev This function can only be called from the Vault, from `exitPool`." + }, + "functionSelector": "74f3b009", + "id": 3216, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 3123, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3106, + "src": "16287:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 3124, + "modifierName": { + "id": 3122, + "name": "onlyVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2958, + "src": "16277:9:28", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_bytes32_$", + "typeString": "modifier (bytes32)" + } + }, + "nodeType": "ModifierInvocation", + "src": "16277:17:28" + } + ], + "name": "onExitPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3121, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "16268:8:28" + }, + "parameters": { + "id": 3120, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3106, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16045:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3105, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "16045:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3108, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16069:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3107, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16069:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3110, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16093:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3109, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16093:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3113, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16120:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3111, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16120:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3112, + "nodeType": "ArrayTypeName", + "src": "16120:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3115, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16155:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16155:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3117, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16188:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3116, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16188:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3119, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16231:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3118, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "16231:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "16035:223:28" + }, + "returnParameters": { + "id": 3131, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3127, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16304:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16304:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3126, + "nodeType": "ArrayTypeName", + "src": "16304:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3130, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3216, + "src": "16322:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3128, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16322:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3129, + "nodeType": "ArrayTypeName", + "src": "16322:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "16303:36:28" + }, + "scope": 3860, + "src": "16016:2311:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1401 + ], + "body": { + "id": 3266, + "nodeType": "Block", + "src": "19332:598:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3244, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3226, + "src": "19378:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "19378:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3246, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2654, + "src": "19395:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 3247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19395:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3241, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "19342:12:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 3243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "19342:35:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 3248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19342:71:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3249, + "nodeType": "ExpressionStatement", + "src": "19342:71:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3251, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3219, + "src": "19450:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3252, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3221, + "src": "19470:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3253, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3223, + "src": "19490:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3254, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3226, + "src": "19513:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3255, + "name": "lastChangeBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3228, + "src": "19535:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3256, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3230, + "src": "19564:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3257, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3232, + "src": "19603:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 3258, + "name": "_onJoinPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3365, + "src": "19625:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + { + "id": 3259, + "name": "_downscaleUpArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3731, + "src": "19650:17:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + }, + { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + ], + "id": 3250, + "name": "_queryAction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3859, + "src": "19424:12:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$_$returns$__$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,bytes memory,function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory),function (uint256[] memory,uint256[] memory) view)" + } + }, + "id": 3260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19424:253:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3261, + "nodeType": "ExpressionStatement", + "src": "19424:253:28" + }, + { + "expression": { + "components": [ + { + "id": 3262, + "name": "bptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3236, + "src": "19905:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3263, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3239, + "src": "19913:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3264, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19904:19:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 3240, + "id": 3265, + "nodeType": "Return", + "src": "19897:26:28" + } + ] + }, + "documentation": { + "id": 3217, + "nodeType": "StructuredDocumentation", + "src": "18357:657:28", + "text": " @notice \"Dry run\" `onJoinPool`.\n @dev Returns the amount of BPT that would be granted to `recipient` if the `onJoinPool` hook were called by the\n Vault with the same arguments, along with the number of tokens `sender` would have to supply.\n This function is not meant to be called directly, but rather from a helper contract that fetches current Vault\n data, such as the protocol swap fee percentage and Pool balances.\n Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must\n explicitly use eth_call instead of eth_sendTransaction." + }, + "functionSelector": "87ec6817", + "id": 3267, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "queryJoin", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3234, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "19270:8:28" + }, + "parameters": { + "id": 3233, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3219, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19047:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3218, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "19047:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3221, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19071:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3220, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19071:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3223, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19095:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3222, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19095:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3226, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19122:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3224, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19122:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3225, + "nodeType": "ArrayTypeName", + "src": "19122:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3228, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19157:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3227, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19157:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3230, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19190:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3229, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19190:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3232, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19233:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3231, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "19233:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "19037:223:28" + }, + "returnParameters": { + "id": 3240, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3236, + "mutability": "mutable", + "name": "bptOut", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19288:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3235, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19288:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3239, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 3267, + "src": "19304:26:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3237, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19304:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3238, + "nodeType": "ArrayTypeName", + "src": "19304:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "19287:44:28" + }, + "scope": 3860, + "src": "19019:911:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 1424 + ], + "body": { + "id": 3317, + "nodeType": "Block", + "src": "20905:600:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 3295, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3277, + "src": "20951:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "20951:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3297, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2654, + "src": "20968:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 3298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20968:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3292, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "20915:12:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 3294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "20915:35:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 3299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20915:71:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3300, + "nodeType": "ExpressionStatement", + "src": "20915:71:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3302, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3270, + "src": "21023:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3303, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3272, + "src": "21043:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3304, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3274, + "src": "21063:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3305, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3277, + "src": "21086:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3306, + "name": "lastChangeBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3279, + "src": "21108:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3307, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3281, + "src": "21137:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3308, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3283, + "src": "21176:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 3309, + "name": "_onExitPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3392, + "src": "21198:11:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + { + "id": 3310, + "name": "_downscaleDownArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3664, + "src": "21223:19:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + }, + { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + ], + "id": 3301, + "name": "_queryAction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3859, + "src": "20997:12:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$_t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$_$returns$__$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,bytes memory,function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory),function (uint256[] memory,uint256[] memory) view)" + } + }, + "id": 3311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20997:255:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3312, + "nodeType": "ExpressionStatement", + "src": "20997:255:28" + }, + { + "expression": { + "components": [ + { + "id": 3313, + "name": "bptIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3287, + "src": "21480:5:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3314, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3290, + "src": "21487:10:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 3315, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21479:19:28", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 3291, + "id": 3316, + "nodeType": "Return", + "src": "21472:26:28" + } + ] + }, + "documentation": { + "id": 3268, + "nodeType": "StructuredDocumentation", + "src": "19936:651:28", + "text": " @notice \"Dry run\" `onExitPool`.\n @dev Returns the amount of BPT that would be burned from `sender` if the `onExitPool` hook were called by the\n Vault with the same arguments, along with the number of tokens `recipient` would receive.\n This function is not meant to be called directly, but rather from a helper contract that fetches current Vault\n data, such as the protocol swap fee percentage and Pool balances.\n Like `IVault.queryBatchSwap`, this function is not view due to internal implementation details: the caller must\n explicitly use eth_call instead of eth_sendTransaction." + }, + "functionSelector": "6028bfd4", + "id": 3318, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "queryExit", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3285, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "20843:8:28" + }, + "parameters": { + "id": 3284, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3270, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20620:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3269, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "20620:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3272, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20644:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3271, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20644:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3274, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20668:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3273, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20668:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3277, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20695:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20695:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3276, + "nodeType": "ArrayTypeName", + "src": "20695:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3279, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20730:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20730:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3281, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20763:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3280, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20763:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3283, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20806:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3282, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "20806:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "20610:223:28" + }, + "returnParameters": { + "id": 3291, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3287, + "mutability": "mutable", + "name": "bptIn", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20861:13:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3286, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20861:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3290, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 3318, + "src": "20876:27:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3288, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20876:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3289, + "nodeType": "ArrayTypeName", + "src": "20876:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "20860:44:28" + }, + "scope": 3860, + "src": "20592:913:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "documentation": { + "id": 3319, + "nodeType": "StructuredDocumentation", + "src": "21646:805:28", + "text": " @dev Called when the Pool is joined for the first time; that is, when the BPT total supply is zero.\n Returns the amount of BPT to mint, and the token amounts the Pool will receive in return.\n Minted BPT will be sent to `recipient`, except for _getMinimumBpt(), which will be deducted from this amount and\n sent to the zero address instead. This will cause that BPT to remain forever locked there, preventing total BTP\n from ever dropping below that value, and ensuring `_onInitializePool` can only be called once in the entire\n Pool's lifetime.\n The tokens granted to the Pool will be transferred from `sender`. These amounts are considered upscaled and will\n be downscaled (rounding up) before being returned to the Vault." + }, + "id": 3338, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_onInitializePool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3331, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3321, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22492:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3320, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22492:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3323, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22516:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3322, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22516:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3325, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22540:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3324, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22540:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3328, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22567:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3326, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22567:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3327, + "nodeType": "ArrayTypeName", + "src": "22567:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3330, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22608:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3329, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "22608:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "22482:153:28" + }, + "returnParameters": { + "id": 3337, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3333, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22662:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22662:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3336, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 3338, + "src": "22684:26:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3334, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22684:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3335, + "nodeType": "ArrayTypeName", + "src": "22684:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "22661:50:28" + }, + "scope": 3860, + "src": "22456:256:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "documentation": { + "id": 3339, + "nodeType": "StructuredDocumentation", + "src": "22718:1005:28", + "text": " @dev Called whenever the Pool is joined after the first initialization join (see `_onInitializePool`).\n Returns the amount of BPT to mint, the token amounts that the Pool will receive in return, and the number of\n tokens to pay in protocol swap fees.\n Implementations of this function might choose to mutate the `balances` array to save gas (e.g. when\n performing intermediate calculations, such as subtraction of due protocol fees). This can be done safely.\n Minted BPT will be sent to `recipient`.\n The tokens granted to the Pool will be transferred from `sender`. These amounts are considered upscaled and will\n be downscaled (rounding up) before being returned to the Vault.\n Due protocol swap fees will be taken from the Pool's balance in the Vault (see `IBasePool.onJoinPool`). These\n amounts are considered upscaled and will be downscaled (rounding down) before being returned to the Vault." + }, + "id": 3365, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_onJoinPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3358, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3341, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23758:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3340, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "23758:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3343, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23782:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3342, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23782:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3345, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23806:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3344, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23806:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3348, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23833:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3346, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23833:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3347, + "nodeType": "ArrayTypeName", + "src": "23833:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3350, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23868:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3349, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23868:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3352, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23901:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3351, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23901:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3355, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23944:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3353, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23944:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3354, + "nodeType": "ArrayTypeName", + "src": "23944:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3357, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "23985:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3356, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "23985:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "23748:264:28" + }, + "returnParameters": { + "id": 3364, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3360, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "24039:20:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3359, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24039:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3363, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 3365, + "src": "24061:26:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3361, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24061:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3362, + "nodeType": "ArrayTypeName", + "src": "24061:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "24038:50:28" + }, + "scope": 3860, + "src": "23728:361:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "documentation": { + "id": 3366, + "nodeType": "StructuredDocumentation", + "src": "24095:933:28", + "text": " @dev Called whenever the Pool is exited.\n Returns the amount of BPT to burn, the token amounts for each Pool token that the Pool will grant in return, and\n the number of tokens to pay in protocol swap fees.\n Implementations of this function might choose to mutate the `balances` array to save gas (e.g. when\n performing intermediate calculations, such as subtraction of due protocol fees). This can be done safely.\n BPT will be burnt from `sender`.\n The Pool will grant tokens to `recipient`. These amounts are considered upscaled and will be downscaled\n (rounding down) before being returned to the Vault.\n Due protocol swap fees will be taken from the Pool's balance in the Vault (see `IBasePool.onExitPool`). These\n amounts are considered upscaled and will be downscaled (rounding down) before being returned to the Vault." + }, + "id": 3392, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_onExitPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3385, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3368, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25063:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3367, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "25063:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3370, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25087:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3369, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25087:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3372, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25111:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3371, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25111:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3375, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25138:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3373, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25138:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3374, + "nodeType": "ArrayTypeName", + "src": "25138:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3377, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25173:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25173:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3379, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25206:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3378, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25206:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3382, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25249:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3380, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25249:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3381, + "nodeType": "ArrayTypeName", + "src": "25249:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3384, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25290:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3383, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "25290:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "25053:264:28" + }, + "returnParameters": { + "id": 3391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3387, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25344:19:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3386, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25344:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3390, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 3392, + "src": "25365:27:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25365:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3389, + "nodeType": "ArrayTypeName", + "src": "25365:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "25343:50:28" + }, + "scope": 3860, + "src": "25033:361:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3399, + "nodeType": "Block", + "src": "26142:116:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3396, + "name": "_ensureNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6236, + "src": "26233:16:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 3397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26233:18:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3398, + "nodeType": "ExpressionStatement", + "src": "26233:18:28" + } + ] + }, + "documentation": { + "id": 3393, + "nodeType": "StructuredDocumentation", + "src": "25400:689:28", + "text": " @dev Called at the very beginning of swaps, joins and exits, even before the scaling factors are read. Derived\n contracts can extend this implementation to perform any state-changing operations they might need (including e.g.\n updating the scaling factors),\n The only scenario in which this function is not called is during a recovery mode exit. This makes it safe to\n perform non-trivial computations or interact with external dependencies here, as recovery mode will not be\n affected.\n Since this contract does not implement swaps, derived contracts must also make sure this function is called on\n swap handlers." + }, + "id": 3400, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeSwapJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3394, + "nodeType": "ParameterList", + "parameters": [], + "src": "26122:2:28" + }, + "returnParameters": { + "id": 3395, + "nodeType": "ParameterList", + "parameters": [], + "src": "26142:0:28" + }, + "scope": 3860, + "src": "26094:164:28", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 3415, + "nodeType": "Block", + "src": "26446:80:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3409, + "name": "getProtocolFeesCollector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2691, + "src": "26480:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IProtocolFeesCollector_$1556_$", + "typeString": "function () view returns (contract IProtocolFeesCollector)" + } + }, + "id": 3410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26480:26:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeesCollector_$1556", + "typeString": "contract IProtocolFeesCollector" + } + ], + "id": 3408, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26472:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3407, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26472:7:28", + "typeDescriptions": {} + } + }, + "id": 3411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26472:35:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3412, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3403, + "src": "26509:9:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 3406, + "name": "_mintPoolTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2216, + "src": "26456:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 3413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26456:63:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3414, + "nodeType": "ExpressionStatement", + "src": "26456:63:28" + } + ] + }, + "documentation": { + "id": 3401, + "nodeType": "StructuredDocumentation", + "src": "26291:96:28", + "text": " @dev Pays protocol fees by minting `bptAmount` to the Protocol Fee Collector." + }, + "id": 3416, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_payProtocolFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3404, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3403, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 3416, + "src": "26418:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3402, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26418:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26417:19:28" + }, + "returnParameters": { + "id": 3405, + "nodeType": "ParameterList", + "parameters": [], + "src": "26446:0:28" + }, + "scope": 3860, + "src": "26392:134:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3432, + "nodeType": "Block", + "src": "26695:165:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3426, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "26817:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 3427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26817:22:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "complement", + "nodeType": "MemberAccess", + "referencedDeclaration": 7231, + "src": "26817:33:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 3429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26817:35:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3424, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3419, + "src": "26804:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "26804:12:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26804:49:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3423, + "id": 3431, + "nodeType": "Return", + "src": "26797:56:28" + } + ] + }, + "documentation": { + "id": 3417, + "nodeType": "StructuredDocumentation", + "src": "26532:83:28", + "text": " @dev Adds swap fee amount to `amount`, returning a higher value." + }, + "id": 3433, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addSwapFeeAmount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3420, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3419, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3433, + "src": "26647:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3418, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26647:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26646:16:28" + }, + "returnParameters": { + "id": 3423, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3422, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3433, + "src": "26686:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26686:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26685:9:28" + }, + "scope": 3860, + "src": "26620:240:28", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3454, + "nodeType": "Block", + "src": "27040:203:28", + "statements": [ + { + "assignments": [ + 3442 + ], + "declarations": [ + { + "constant": false, + "id": 3442, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 3454, + "src": "27142:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3441, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27142:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3448, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3445, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "27175:20:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 3446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27175:22:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3443, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3436, + "src": "27162:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3444, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "27162:12:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27162:36:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27142:56:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3451, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3442, + "src": "27226:9:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3449, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3436, + "src": "27215:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "27215:10:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27215:21:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3440, + "id": 3453, + "nodeType": "Return", + "src": "27208:28:28" + } + ] + }, + "documentation": { + "id": 3434, + "nodeType": "StructuredDocumentation", + "src": "26866:89:28", + "text": " @dev Subtracts swap fee amount from `amount`, returning a lower value." + }, + "id": 3455, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_subtractSwapFeeAmount", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3437, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3436, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3455, + "src": "26992:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26992:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26991:16:28" + }, + "returnParameters": { + "id": 3440, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3439, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3455, + "src": "27031:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3438, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27031:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27030:9:28" + }, + "scope": 3860, + "src": "26960:283:28", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3503, + "nodeType": "Block", + "src": "27504:433:28", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 3465, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3458, + "src": "27526:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 3464, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27518:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3463, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27518:7:28", + "typeDescriptions": {} + } + }, + "id": 3466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27518:14:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 3469, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "27544:4:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + ], + "id": 3468, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27536:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3467, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27536:7:28", + "typeDescriptions": {} + } + }, + "id": 3470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27536:13:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "27518:31:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3476, + "nodeType": "IfStatement", + "src": "27514:83:28", + "trueBody": { + "id": 3475, + "nodeType": "Block", + "src": "27551:46:28", + "statements": [ + { + "expression": { + "expression": { + "id": 3472, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "27572:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "27572:14:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3462, + "id": 3474, + "nodeType": "Return", + "src": "27565:21:28" + } + ] + } + }, + { + "assignments": [ + 3478 + ], + "declarations": [ + { + "constant": false, + "id": 3478, + "mutability": "mutable", + "name": "tokenDecimals", + "nodeType": "VariableDeclaration", + "scope": 3503, + "src": "27687:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3477, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27687:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3487, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 3482, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3458, + "src": "27725:5:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 3481, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27717:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3480, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27717:7:28", + "typeDescriptions": {} + } + }, + "id": 3483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27717:14:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 3479, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9426, + "src": "27711:5:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$9426_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 3484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27711:21:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$9426", + "typeString": "contract ERC20" + } + }, + "id": 3485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decimals", + "nodeType": "MemberAccess", + "referencedDeclaration": 9012, + "src": "27711:30:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$", + "typeString": "function () view external returns (uint8)" + } + }, + "id": 3486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27711:32:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27687:56:28" + }, + { + "assignments": [ + 3489 + ], + "declarations": [ + { + "constant": false, + "id": 3489, + "mutability": "mutable", + "name": "decimalsDifference", + "nodeType": "VariableDeclaration", + "scope": 3503, + "src": "27818:26:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3488, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27818:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3495, + "initialValue": { + "arguments": [ + { + "hexValue": "3138", + "id": 3492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27856:2:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + { + "id": 3493, + "name": "tokenDecimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3478, + "src": "27860:13:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3490, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "27847:4:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 3491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 8652, + "src": "27847:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27847:27:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27818:56:28" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3496, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "27891:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "27891:14:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 3498, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27908:2:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "id": 3499, + "name": "decimalsDifference", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3489, + "src": "27912:18:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27908:22:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27891:39:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3462, + "id": 3502, + "nodeType": "Return", + "src": "27884:46:28" + } + ] + }, + "documentation": { + "id": 3456, + "nodeType": "StructuredDocumentation", + "src": "27265:157:28", + "text": " @dev Returns a scaling factor that, when multiplied to a token amount for `token`, normalizes its balance as if\n it had 18 decimals." + }, + "id": 3504, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_computeScalingFactor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3459, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3458, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 3504, + "src": "27458:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 3457, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "27458:6:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "27457:14:28" + }, + "returnParameters": { + "id": 3462, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3461, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3504, + "src": "27495:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3460, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27495:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27494:9:28" + }, + "scope": 3860, + "src": "27427:510:28", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "documentation": { + "id": 3505, + "nodeType": "StructuredDocumentation", + "src": "27943:750:28", + "text": " @dev Returns the scaling factor for one of the Pool's tokens. Reverts if `token` is not a token registered by the\n Pool.\n All scaling factors are fixed-point values with 18 decimals, to allow for this function to be overridden by\n derived contracts that need to apply further scaling, making these factors potentially non-integer.\n The largest 'base' scaling factor (i.e. in tokens with less than 18 decimals) is 10**18, which in fixed-point is\n 10**36. This value can be multiplied with a 112 bit Vault balance with no overflow by a factor of ~1e7, making\n even relatively 'large' factors safe to use.\n The 1e7 figure is the result of 2**256 / (1e18 * 1e18 * 2**112)." + }, + "id": 3512, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_scalingFactor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3507, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 3512, + "src": "28722:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 3506, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "28722:6:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "28721:14:28" + }, + "returnParameters": { + "id": 3511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3510, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3512, + "src": "28767:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3509, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28767:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "28766:9:28" + }, + "scope": 3860, + "src": "28698:78:28", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "documentation": { + "id": 3513, + "nodeType": "StructuredDocumentation", + "src": "28782:212:28", + "text": " @dev Same as `_scalingFactor()`, except for all registered tokens (in the same order as registered). The Vault\n will always pass balances in this order when calling any of the Pool hooks." + }, + "id": 3519, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_scalingFactors", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3514, + "nodeType": "ParameterList", + "parameters": [], + "src": "29023:2:28" + }, + "returnParameters": { + "id": 3518, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3517, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3519, + "src": "29057:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3515, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29057:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3516, + "nodeType": "ArrayTypeName", + "src": "29057:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "29056:18:28" + }, + "scope": 3860, + "src": "28999:76:28", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1378 + ], + "body": { + "id": 3529, + "nodeType": "Block", + "src": "29160:41:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3526, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "29177:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 3527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29177:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 3525, + "id": 3528, + "nodeType": "Return", + "src": "29170:24:28" + } + ] + }, + "functionSelector": "1dd746ea", + "id": 3530, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactors", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3521, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "29124:8:28" + }, + "parameters": { + "id": 3520, + "nodeType": "ParameterList", + "parameters": [], + "src": "29107:2:28" + }, + "returnParameters": { + "id": 3525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3524, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3530, + "src": "29142:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29142:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3523, + "nodeType": "ArrayTypeName", + "src": "29142:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "29141:18:28" + }, + "scope": 3860, + "src": "29081:120:28", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 3546, + "nodeType": "Block", + "src": "29452:490:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3542, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3533, + "src": "29913:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3543, + "name": "scalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3535, + "src": "29921:13:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3540, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "29894:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "29894:18:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29894:41:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3539, + "id": 3545, + "nodeType": "Return", + "src": "29887:48:28" + } + ] + }, + "documentation": { + "id": 3531, + "nodeType": "StructuredDocumentation", + "src": "29207:151:28", + "text": " @dev Applies `scalingFactor` to `amount`, resulting in a larger or equal value depending on whether it needed\n scaling or not." + }, + "id": 3547, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_upscale", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3533, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3547, + "src": "29381:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3532, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29381:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3535, + "mutability": "mutable", + "name": "scalingFactor", + "nodeType": "VariableDeclaration", + "scope": 3547, + "src": "29397:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3534, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29397:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "29380:39:28" + }, + "returnParameters": { + "id": 3539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3538, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3547, + "src": "29443:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3537, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29443:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "29442:9:28" + }, + "scope": 3860, + "src": "29363:579:28", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3596, + "nodeType": "Block", + "src": "30207:258:28", + "statements": [ + { + "assignments": [ + 3558 + ], + "declarations": [ + { + "constant": false, + "id": 3558, + "mutability": "mutable", + "name": "length", + "nodeType": "VariableDeclaration", + "scope": 3596, + "src": "30217:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3557, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30217:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3561, + "initialValue": { + "expression": { + "id": 3559, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3551, + "src": "30234:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "30234:14:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "30217:31:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3565, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3558, + "src": "30294:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3566, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3554, + "src": "30302:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "30302:21:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3562, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "30258:12:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 3564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "30258:35:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 3568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30258:66:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3569, + "nodeType": "ExpressionStatement", + "src": "30258:66:28" + }, + { + "body": { + "id": 3594, + "nodeType": "Block", + "src": "30372:87:28", + "statements": [ + { + "expression": { + "id": 3592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3580, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3551, + "src": "30386:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3582, + "indexExpression": { + "id": 3581, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3571, + "src": "30394:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "30386:10:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 3585, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3551, + "src": "30418:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3587, + "indexExpression": { + "id": 3586, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3571, + "src": "30426:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "30418:10:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 3588, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3554, + "src": "30430:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3590, + "indexExpression": { + "id": 3589, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3571, + "src": "30445:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "30430:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3583, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "30399:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "30399:18:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30399:49:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "30386:62:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3593, + "nodeType": "ExpressionStatement", + "src": "30386:62:28" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3574, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3571, + "src": "30355:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 3575, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3558, + "src": "30359:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "30355:10:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3595, + "initializationExpression": { + "assignments": [ + 3571 + ], + "declarations": [ + { + "constant": false, + "id": 3571, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 3595, + "src": "30340:9:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3570, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30340:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3573, + "initialValue": { + "hexValue": "30", + "id": 3572, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "30352:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "30340:13:28" + }, + "loopExpression": { + "expression": { + "id": 3578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "30367:3:28", + "subExpression": { + "id": 3577, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3571, + "src": "30369:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3579, + "nodeType": "ExpressionStatement", + "src": "30367:3:28" + }, + "nodeType": "ForStatement", + "src": "30335:124:28" + } + ] + }, + "documentation": { + "id": 3548, + "nodeType": "StructuredDocumentation", + "src": "29948:158:28", + "text": " @dev Same as `_upscale`, but for an entire array. This function does not return anything, but instead *mutates*\n the `amounts` array." + }, + "id": 3597, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_upscaleArray", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3555, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3551, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 3597, + "src": "30134:24:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3549, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30134:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3550, + "nodeType": "ArrayTypeName", + "src": "30134:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3554, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3597, + "src": "30160:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3552, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30160:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3553, + "nodeType": "ArrayTypeName", + "src": "30160:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "30133:59:28" + }, + "returnParameters": { + "id": 3556, + "nodeType": "ParameterList", + "parameters": [], + "src": "30207:0:28" + }, + "scope": 3860, + "src": "30111:354:28", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3613, + "nodeType": "Block", + "src": "30764:65:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3609, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3600, + "src": "30800:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3610, + "name": "scalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3602, + "src": "30808:13:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3607, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "30781:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "30781:18:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30781:41:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3606, + "id": 3612, + "nodeType": "Return", + "src": "30774:48:28" + } + ] + }, + "documentation": { + "id": 3598, + "nodeType": "StructuredDocumentation", + "src": "30471:193:28", + "text": " @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n whether it needed scaling or not. The result is rounded down." + }, + "id": 3614, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_downscaleDown", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3603, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3600, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3614, + "src": "30693:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3599, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30693:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3602, + "mutability": "mutable", + "name": "scalingFactor", + "nodeType": "VariableDeclaration", + "scope": 3614, + "src": "30709:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3601, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30709:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "30692:39:28" + }, + "returnParameters": { + "id": 3606, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3605, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3614, + "src": "30755:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30755:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "30754:9:28" + }, + "scope": 3860, + "src": "30669:160:28", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3663, + "nodeType": "Block", + "src": "31106:258:28", + "statements": [ + { + "assignments": [ + 3625 + ], + "declarations": [ + { + "constant": false, + "id": 3625, + "mutability": "mutable", + "name": "length", + "nodeType": "VariableDeclaration", + "scope": 3663, + "src": "31116:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3624, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31116:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3628, + "initialValue": { + "expression": { + "id": 3626, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3618, + "src": "31133:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "31133:14:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "31116:31:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3632, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3625, + "src": "31193:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3633, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3621, + "src": "31201:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "31201:21:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3629, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "31157:12:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 3631, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "31157:35:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 3635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31157:66:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3636, + "nodeType": "ExpressionStatement", + "src": "31157:66:28" + }, + { + "body": { + "id": 3661, + "nodeType": "Block", + "src": "31271:87:28", + "statements": [ + { + "expression": { + "id": 3659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3647, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3618, + "src": "31285:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3649, + "indexExpression": { + "id": 3648, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "31293:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "31285:10:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 3652, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3618, + "src": "31317:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3654, + "indexExpression": { + "id": 3653, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "31325:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "31317:10:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 3655, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3621, + "src": "31329:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3657, + "indexExpression": { + "id": 3656, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "31344:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "31329:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3650, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "31298:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "31298:18:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3658, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31298:49:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "31285:62:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3660, + "nodeType": "ExpressionStatement", + "src": "31285:62:28" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3641, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "31254:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 3642, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3625, + "src": "31258:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "31254:10:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3662, + "initializationExpression": { + "assignments": [ + 3638 + ], + "declarations": [ + { + "constant": false, + "id": 3638, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 3662, + "src": "31239:9:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3637, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31239:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3640, + "initialValue": { + "hexValue": "30", + "id": 3639, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "31251:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "31239:13:28" + }, + "loopExpression": { + "expression": { + "id": 3645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "31266:3:28", + "subExpression": { + "id": 3644, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3638, + "src": "31268:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3646, + "nodeType": "ExpressionStatement", + "src": "31266:3:28" + }, + "nodeType": "ForStatement", + "src": "31234:124:28" + } + ] + }, + "documentation": { + "id": 3615, + "nodeType": "StructuredDocumentation", + "src": "30835:164:28", + "text": " @dev Same as `_downscaleDown`, but for an entire array. This function does not return anything, but instead\n *mutates* the `amounts` array." + }, + "id": 3664, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_downscaleDownArray", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3622, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3618, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 3664, + "src": "31033:24:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3616, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31033:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3617, + "nodeType": "ArrayTypeName", + "src": "31033:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3621, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3664, + "src": "31059:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3619, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31059:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3620, + "nodeType": "ArrayTypeName", + "src": "31059:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "31032:59:28" + }, + "returnParameters": { + "id": 3623, + "nodeType": "ParameterList", + "parameters": [], + "src": "31106:0:28" + }, + "scope": 3860, + "src": "31004:360:28", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3680, + "nodeType": "Block", + "src": "31659:63:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3676, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3667, + "src": "31693:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3677, + "name": "scalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3669, + "src": "31701:13:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3674, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "31676:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "31676:16:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31676:39:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 3673, + "id": 3679, + "nodeType": "Return", + "src": "31669:46:28" + } + ] + }, + "documentation": { + "id": 3665, + "nodeType": "StructuredDocumentation", + "src": "31370:191:28", + "text": " @dev Reverses the `scalingFactor` applied to `amount`, resulting in a smaller or equal value depending on\n whether it needed scaling or not. The result is rounded up." + }, + "id": 3681, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_downscaleUp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3670, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3667, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 3681, + "src": "31588:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3666, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31588:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3669, + "mutability": "mutable", + "name": "scalingFactor", + "nodeType": "VariableDeclaration", + "scope": 3681, + "src": "31604:21:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3668, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31604:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "31587:39:28" + }, + "returnParameters": { + "id": 3673, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3672, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3681, + "src": "31650:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3671, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31650:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "31649:9:28" + }, + "scope": 3860, + "src": "31566:156:28", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3730, + "nodeType": "Block", + "src": "31995:256:28", + "statements": [ + { + "assignments": [ + 3692 + ], + "declarations": [ + { + "constant": false, + "id": 3692, + "mutability": "mutable", + "name": "length", + "nodeType": "VariableDeclaration", + "scope": 3730, + "src": "32005:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3691, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32005:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3695, + "initialValue": { + "expression": { + "id": 3693, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3685, + "src": "32022:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "32022:14:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "32005:31:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3699, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3692, + "src": "32082:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 3700, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3688, + "src": "32090:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "32090:21:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3696, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "32046:12:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 3698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "32046:35:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 3702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32046:66:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3703, + "nodeType": "ExpressionStatement", + "src": "32046:66:28" + }, + { + "body": { + "id": 3728, + "nodeType": "Block", + "src": "32160:85:28", + "statements": [ + { + "expression": { + "id": 3726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 3714, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3685, + "src": "32174:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3716, + "indexExpression": { + "id": 3715, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3705, + "src": "32182:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "32174:10:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 3719, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3685, + "src": "32204:7:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3721, + "indexExpression": { + "id": 3720, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3705, + "src": "32212:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "32204:10:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 3722, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3688, + "src": "32216:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 3724, + "indexExpression": { + "id": 3723, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3705, + "src": "32231:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "32216:17:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 3717, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "32187:10:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 3718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "32187:16:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 3725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32187:47:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "32174:60:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3727, + "nodeType": "ExpressionStatement", + "src": "32174:60:28" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 3710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 3708, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3705, + "src": "32143:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 3709, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3692, + "src": "32147:6:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "32143:10:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 3729, + "initializationExpression": { + "assignments": [ + 3705 + ], + "declarations": [ + { + "constant": false, + "id": 3705, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 3729, + "src": "32128:9:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32128:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 3707, + "initialValue": { + "hexValue": "30", + "id": 3706, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "32140:1:28", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "32128:13:28" + }, + "loopExpression": { + "expression": { + "id": 3712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "32155:3:28", + "subExpression": { + "id": 3711, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3705, + "src": "32157:1:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3713, + "nodeType": "ExpressionStatement", + "src": "32155:3:28" + }, + "nodeType": "ForStatement", + "src": "32123:122:28" + } + ] + }, + "documentation": { + "id": 3682, + "nodeType": "StructuredDocumentation", + "src": "31728:162:28", + "text": " @dev Same as `_downscaleUp`, but for an entire array. This function does not return anything, but instead\n *mutates* the `amounts` array." + }, + "id": 3731, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_downscaleUpArray", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3689, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3685, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 3731, + "src": "31922:24:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3683, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31922:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3684, + "nodeType": "ArrayTypeName", + "src": "31922:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3688, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3731, + "src": "31948:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3686, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31948:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3687, + "nodeType": "ArrayTypeName", + "src": "31948:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "31921:59:28" + }, + "returnParameters": { + "id": 3690, + "nodeType": "ParameterList", + "parameters": [], + "src": "31995:0:28" + }, + "scope": 3860, + "src": "31895:356:28", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3954 + ], + "body": { + "id": 3742, + "nodeType": "Block", + "src": "32328:417:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3737, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "32712:8:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 3738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32712:10:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 3739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getAuthorizer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1581, + "src": "32712:24:28", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view external returns (contract IAuthorizer)" + } + }, + "id": 3740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32712:26:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "functionReturnParameters": 3736, + "id": 3741, + "nodeType": "Return", + "src": "32705:33:28" + } + ] + }, + "id": 3743, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getAuthorizer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3733, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "32297:8:28" + }, + "parameters": { + "id": 3732, + "nodeType": "ParameterList", + "parameters": [], + "src": "32280:2:28" + }, + "returnParameters": { + "id": 3736, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3735, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3743, + "src": "32315:11:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 3734, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "32315:11:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "32314:13:28" + }, + "scope": 3860, + "src": "32257:488:28", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3858, + "nodeType": "Block", + "src": "33278:6599:28", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3798, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "33432:3:28", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "33432:10:28", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "id": 3802, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "33454:4:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + ], + "id": 3801, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "33446:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3800, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33446:7:28", + "typeDescriptions": {} + } + }, + "id": 3803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "33446:13:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "33432:27:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3856, + "nodeType": "Block", + "src": "37577:2294:28", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3818, + "name": "_beforeSwapJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3400, + "src": "37816:19:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 3819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "37816:21:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3820, + "nodeType": "ExpressionStatement", + "src": "37816:21:28" + }, + { + "assignments": [ + 3825 + ], + "declarations": [ + { + "constant": false, + "id": 3825, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 3856, + "src": "37852:31:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3823, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37852:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3824, + "nodeType": "ArrayTypeName", + "src": "37852:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 3828, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3826, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3519, + "src": "37886:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 3827, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "37886:17:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "37852:51:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3830, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3752, + "src": "37931:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3831, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3825, + "src": "37941:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3829, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "37917:13:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 3832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "37917:39:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3833, + "nodeType": "ExpressionStatement", + "src": "37917:39:28" + }, + { + "assignments": [ + 3835, + 3838 + ], + "declarations": [ + { + "constant": false, + "id": 3835, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 3856, + "src": "37972:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3834, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37972:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3838, + "mutability": "mutable", + "name": "tokenAmounts", + "nodeType": "VariableDeclaration", + "scope": 3856, + "src": "37991:29:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3836, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37991:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3837, + "nodeType": "ArrayTypeName", + "src": "37991:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 3849, + "initialValue": { + "arguments": [ + { + "id": 3840, + "name": "poolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3745, + "src": "38049:6:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3841, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3747, + "src": "38073:6:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3842, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3749, + "src": "38097:9:28", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 3843, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3752, + "src": "38124:8:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3844, + "name": "lastChangeBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3754, + "src": "38150:15:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3845, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3756, + "src": "38183:25:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 3846, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3825, + "src": "38226:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3847, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3758, + "src": "38258:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 3839, + "name": "_action", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3785, + "src": "38024:7:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[] memory,uint256,uint256,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 3848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "38024:256:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "37971:309:28" + }, + { + "expression": { + "arguments": [ + { + "id": 3851, + "name": "tokenAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3838, + "src": "38311:12:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 3852, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3825, + "src": "38325:14:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 3850, + "name": "_downscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3795, + "src": "38295:15:28", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) view" + } + }, + "id": 3853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "38295:45:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3854, + "nodeType": "ExpressionStatement", + "src": "38295:45:28" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "38424:1437:28", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "38805:40:28", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "tokenAmounts", + "nodeType": "YulIdentifier", + "src": "38827:12:28" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38821:5:28" + }, + "nodeType": "YulFunctionCall", + "src": "38821:19:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38842:2:28", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "38817:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "38817:28:28" + }, + "variables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "38809:4:28", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39195:36:28", + "value": { + "arguments": [ + { + "name": "tokenAmounts", + "nodeType": "YulIdentifier", + "src": "39212:12:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39226:4:28", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39208:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "39208:23:28" + }, + "variables": [ + { + "name": "start", + "nodeType": "YulTypedName", + "src": "39199:5:28", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "start", + "nodeType": "YulIdentifier", + "src": "39255:5:28" + }, + { + "name": "bptAmount", + "nodeType": "YulIdentifier", + "src": "39262:9:28" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39248:6:28" + }, + "nodeType": "YulFunctionCall", + "src": "39248:24:28" + }, + "nodeType": "YulExpressionStatement", + "src": "39248:24:28" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "start", + "nodeType": "YulIdentifier", + "src": "39480:5:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39487:4:28", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39476:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "39476:16:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39494:66:28", + "type": "", + "value": "0x0000000000000000000000000000000000000000000000000000000043adbafb" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39469:6:28" + }, + "nodeType": "YulFunctionCall", + "src": "39469:92:28" + }, + "nodeType": "YulExpressionStatement", + "src": "39469:92:28" + }, + { + "nodeType": "YulAssignment", + "src": "39578:25:28", + "value": { + "arguments": [ + { + "name": "start", + "nodeType": "YulIdentifier", + "src": "39591:5:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39598:4:28", + "type": "", + "value": "0x04" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39587:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "39587:16:28" + }, + "variableNames": [ + { + "name": "start", + "nodeType": "YulIdentifier", + "src": "39578:5:28" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "start", + "nodeType": "YulIdentifier", + "src": "39826:5:28" + }, + { + "arguments": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "39837:4:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39843:2:28", + "type": "", + "value": "68" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39833:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "39833:13:28" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "39819:6:28" + }, + "nodeType": "YulFunctionCall", + "src": "39819:28:28" + }, + "nodeType": "YulExpressionStatement", + "src": "39819:28:28" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3835, + "isOffset": false, + "isSlot": false, + "src": "39262:9:28", + "valueSize": 1 + }, + { + "declaration": 3838, + "isOffset": false, + "isSlot": false, + "src": "38827:12:28", + "valueSize": 1 + }, + { + "declaration": 3838, + "isOffset": false, + "isSlot": false, + "src": "39212:12:28", + "valueSize": 1 + } + ], + "id": 3855, + "nodeType": "InlineAssembly", + "src": "38415:1446:28" + } + ] + }, + "id": 3857, + "nodeType": "IfStatement", + "src": "33428:6443:28", + "trueBody": { + "id": 3817, + "nodeType": "Block", + "src": "33461:4110:28", + "statements": [ + { + "assignments": [ + 3806, + null + ], + "declarations": [ + { + "constant": false, + "id": 3806, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 3817, + "src": "33728:12:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3805, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "33728:4:28", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 3815, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 3812, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "33765:3:28", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "src": "33765:8:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_calldata_ptr", + "typeString": "bytes calldata" + } + ], + "expression": { + "arguments": [ + { + "id": 3809, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "33754:4:28", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + ], + "id": 3808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "33746:7:28", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3807, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33746:7:28", + "typeDescriptions": {} + } + }, + "id": 3810, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "33746:13:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 3811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "33746:18:28", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 3814, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "33746:28:28", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "33727:47:28" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "33858:3703:28", + "statements": [ + { + "cases": [ + { + "body": { + "nodeType": "YulBlock", + "src": "34027:3329:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34490:1:28", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34493:1:28", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34496:4:28", + "type": "", + "value": "0x04" + } + ], + "functionName": { + "name": "returndatacopy", + "nodeType": "YulIdentifier", + "src": "34475:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "34475:26:28" + }, + "nodeType": "YulExpressionStatement", + "src": "34475:26:28" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34526:94:28", + "value": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34549:1:28", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34543:5:28" + }, + "nodeType": "YulFunctionCall", + "src": "34543:8:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34553:66:28", + "type": "", + "value": "0xffffffff00000000000000000000000000000000000000000000000000000000" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "34539:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "34539:81:28" + }, + "variables": [ + { + "name": "error", + "nodeType": "YulTypedName", + "src": "34530:5:28", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "34853:150:28", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34898:1:28", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34901:1:28", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "34904:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "34904:16:28" + } + ], + "functionName": { + "name": "returndatacopy", + "nodeType": "YulIdentifier", + "src": "34883:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "34883:38:28" + }, + "nodeType": "YulExpressionStatement", + "src": "34883:38:28" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34957:1:28", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "34960:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "34960:16:28" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "34950:6:28" + }, + "nodeType": "YulFunctionCall", + "src": "34950:27:28" + }, + "nodeType": "YulExpressionStatement", + "src": "34950:27:28" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "error", + "nodeType": "YulIdentifier", + "src": "34774:5:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34781:66:28", + "type": "", + "value": "0x43adbafb00000000000000000000000000000000000000000000000000000000" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "34771:2:28" + }, + "nodeType": "YulFunctionCall", + "src": "34771:77:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34850:1:28", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "34768:2:28" + }, + "nodeType": "YulFunctionCall", + "src": "34768:84:28" + }, + "nodeType": "YulIf", + "src": "34765:2:28" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36362:1:28", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36365:4:28", + "type": "", + "value": "0x04" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36371:2:28", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "returndatacopy", + "nodeType": "YulIdentifier", + "src": "36347:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "36347:27:28" + }, + "nodeType": "YulExpressionStatement", + "src": "36347:27:28" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36562:4:28", + "type": "", + "value": "0x20" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36568:2:28", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36555:6:28" + }, + "nodeType": "YulFunctionCall", + "src": "36555:16:28" + }, + "nodeType": "YulExpressionStatement", + "src": "36555:16:28" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36958:4:28", + "type": "", + "value": "0x40" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36964:4:28", + "type": "", + "value": "0x24" + }, + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "36974:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "36974:16:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36992:2:28", + "type": "", + "value": "36" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "36970:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "36970:25:28" + } + ], + "functionName": { + "name": "returndatacopy", + "nodeType": "YulIdentifier", + "src": "36943:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "36943:53:28" + }, + "nodeType": "YulExpressionStatement", + "src": "36943:53:28" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37305:1:28", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "37312:14:28" + }, + "nodeType": "YulFunctionCall", + "src": "37312:16:28" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37330:2:28", + "type": "", + "value": "28" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37308:3:28" + }, + "nodeType": "YulFunctionCall", + "src": "37308:25:28" + } + ], + "functionName": { + "name": "return", + "nodeType": "YulIdentifier", + "src": "37298:6:28" + }, + "nodeType": "YulFunctionCall", + "src": "37298:36:28" + }, + "nodeType": "YulExpressionStatement", + "src": "37298:36:28" + } + ] + }, + "nodeType": "YulCase", + "src": "34020:3336:28", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34025:1:28", + "type": "", + "value": "0" + } + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37385:162:28", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "37516:7:28" + }, + "nodeType": "YulFunctionCall", + "src": "37516:9:28" + }, + "nodeType": "YulExpressionStatement", + "src": "37516:9:28" + } + ] + }, + "nodeType": "YulCase", + "src": "37377:170:28", + "value": "default" + } + ], + "expression": { + "name": "success", + "nodeType": "YulIdentifier", + "src": "33992:7:28" + }, + "nodeType": "YulSwitch", + "src": "33985:3562:28" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 3806, + "isOffset": false, + "isSlot": false, + "src": "33992:7:28", + "valueSize": 1 + } + ], + "id": 3816, + "nodeType": "InlineAssembly", + "src": "33849:3712:28" + } + ] + } + } + ] + }, + "id": 3859, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_queryAction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3796, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3745, + "mutability": "mutable", + "name": "poolId", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32782:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3744, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "32782:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3747, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32806:14:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3746, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "32806:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3749, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32830:17:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3748, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "32830:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3752, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32857:25:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32857:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3751, + "nodeType": "ArrayTypeName", + "src": "32857:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3754, + "mutability": "mutable", + "name": "lastChangeBlock", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32892:23:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32892:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3756, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32925:33:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3755, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32925:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3758, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32968:21:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3757, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "32968:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3785, + "mutability": "mutable", + "name": "_action", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "32999:180:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[],uint256,uint256,uint256[],bytes) returns (uint256,uint256[])" + }, + "typeName": { + "id": 3784, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3760, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33008:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3759, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "33008:7:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3762, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33017:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3761, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33017:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3764, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33026:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3763, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "33026:7:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3767, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33035:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3765, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33035:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3766, + "nodeType": "ArrayTypeName", + "src": "33035:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3769, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33053:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3768, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33053:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3771, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33062:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3770, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33062:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3774, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33071:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3772, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33071:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3773, + "nodeType": "ArrayTypeName", + "src": "33071:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3776, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33089:12:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 3775, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "33089:5:28", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "33007:95:28" + }, + "returnParameterTypes": { + "id": 3783, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3779, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33145:7:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 3778, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33145:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3782, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3784, + "src": "33154:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3780, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33154:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3781, + "nodeType": "ArrayTypeName", + "src": "33154:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "33144:27:28" + }, + "src": "32999:180:28", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes32,address,address,uint256[],uint256,uint256,uint256[],bytes) returns (uint256,uint256[])" + }, + "visibility": "internal" + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3795, + "mutability": "mutable", + "name": "_downscaleArray", + "nodeType": "VariableDeclaration", + "scope": 3859, + "src": "33189:74:28", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[],uint256[]) view" + }, + "typeName": { + "id": 3794, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 3792, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3788, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3794, + "src": "33198:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3786, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33198:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3787, + "nodeType": "ArrayTypeName", + "src": "33198:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3791, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3794, + "src": "33216:16:28", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 3789, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33216:7:28", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 3790, + "nodeType": "ArrayTypeName", + "src": "33216:9:28", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "33197:36:28" + }, + "returnParameterTypes": { + "id": 3793, + "nodeType": "ParameterList", + "parameters": [], + "src": "33248:0:28" + }, + "src": "33189:74:28", + "stateMutability": "view", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[],uint256[]) view" + }, + "visibility": "internal" + }, + "visibility": "internal" + } + ], + "src": "32772:497:28" + }, + "returnParameters": { + "id": 3797, + "nodeType": "ParameterList", + "parameters": [], + "src": "33278:0:28" + }, + "scope": 3860, + "src": "32751:7126:28", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 3861, + "src": "2892:36987:28" + } + ], + "src": "688:39192:28" + }, + "id": 28 + }, + "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol", + "exportedSymbols": { + "BasePoolAuthorization": [ + 3955 + ] + }, + "id": 3956, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3862, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:29" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IAuthorizer.sol", + "id": 3863, + "nodeType": "ImportDirective", + "scope": 3956, + "sourceUnit": 1302, + "src": "713:70:29", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "id": 3864, + "nodeType": "ImportDirective", + "scope": 3956, + "sourceUnit": 5118, + "src": "785:79:29", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 3866, + "name": "Authentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5117, + "src": "1535:14:29", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Authentication_$5117", + "typeString": "contract Authentication" + } + }, + "id": 3867, + "nodeType": "InheritanceSpecifier", + "src": "1535:14:29" + } + ], + "contractDependencies": [ + 1022, + 5117 + ], + "contractKind": "contract", + "documentation": { + "id": 3865, + "nodeType": "StructuredDocumentation", + "src": "866:625:29", + "text": " @dev Base authorization layer implementation for Pools.\n The owner account can call some of the permissioned functions - access control of the rest is delegated to the\n Authorizer. Note that this owner is immutable: more sophisticated permission schemes, such as multiple ownership,\n granular roles, etc., could be built on top of this by making the owner a smart contract.\n Access control of all other permissioned functions is delegated to an Authorizer. It is also possible to delegate\n control of *all* permissioned functions to the Authorizer by setting the owner address to `_DELEGATE_OWNER`." + }, + "fullyImplemented": false, + "id": 3955, + "linearizedBaseContracts": [ + 3955, + 5117, + 1022 + ], + "name": "BasePoolAuthorization", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 3869, + "mutability": "immutable", + "name": "_owner", + "nodeType": "VariableDeclaration", + "scope": 3955, + "src": "1556:32:29", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3868, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1556:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 3872, + "mutability": "constant", + "name": "_DELEGATE_OWNER", + "nodeType": "VariableDeclaration", + "scope": 3955, + "src": "1595:85:29", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3870, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1595:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": { + "hexValue": "307842413142413162613142413162413162413142613142413162613142413162413162613162613142", + "id": 3871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1638:42:29", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "value": "0xBA1BA1ba1BA1bA1bA1Ba1BA1ba1BA1bA1ba1ba1B" + }, + "visibility": "private" + }, + { + "body": { + "id": 3881, + "nodeType": "Block", + "src": "1714:31:29", + "statements": [ + { + "expression": { + "id": 3879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 3877, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3869, + "src": "1724:6:29", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 3878, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3874, + "src": "1733:5:29", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1724:14:29", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 3880, + "nodeType": "ExpressionStatement", + "src": "1724:14:29" + } + ] + }, + "id": 3882, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3875, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3874, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 3882, + "src": "1699:13:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3873, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1699:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1698:15:29" + }, + "returnParameters": { + "id": 3876, + "nodeType": "ParameterList", + "parameters": [], + "src": "1714:0:29" + }, + "scope": 3955, + "src": "1687:58:29", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3889, + "nodeType": "Block", + "src": "1801:30:29", + "statements": [ + { + "expression": { + "id": 3887, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3869, + "src": "1818:6:29", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 3886, + "id": 3888, + "nodeType": "Return", + "src": "1811:13:29" + } + ] + }, + "functionSelector": "893d20e8", + "id": 3890, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getOwner", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3883, + "nodeType": "ParameterList", + "parameters": [], + "src": "1768:2:29" + }, + "returnParameters": { + "id": 3886, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3885, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3890, + "src": "1792:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3884, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1792:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1791:9:29" + }, + "scope": 3955, + "src": "1751:80:29", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 3898, + "nodeType": "Block", + "src": "1898:40:29", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3895, + "name": "_getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3954, + "src": "1915:14:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 3896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1915:16:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "functionReturnParameters": 3894, + "id": 3897, + "nodeType": "Return", + "src": "1908:23:29" + } + ] + }, + "functionSelector": "aaabadc5", + "id": 3899, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3891, + "nodeType": "ParameterList", + "parameters": [], + "src": "1859:2:29" + }, + "returnParameters": { + "id": 3894, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3893, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3899, + "src": "1885:11:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 3892, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "1885:11:29", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1884:13:29" + }, + "scope": 3955, + "src": "1837:101:29", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 5116 + ], + "body": { + "id": 3938, + "nodeType": "Block", + "src": "2038:450:29", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 3917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3912, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3909, + "name": "getOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3890, + "src": "2053:8:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 3910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2053:10:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 3911, + "name": "_DELEGATE_OWNER", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3872, + "src": "2067:15:29", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2053:29:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 3913, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2052:31:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "arguments": [ + { + "id": 3915, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3901, + "src": "2106:8:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 3914, + "name": "_isOwnerOnlyAction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3949, + "src": "2087:18:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 3916, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2087:28:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2052:63:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 3936, + "nodeType": "Block", + "src": "2274:208:29", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 3928, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3901, + "src": "2438:8:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 3929, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3903, + "src": "2448:7:29", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 3932, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2465:4:29", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolAuthorization_$3955", + "typeString": "contract BasePoolAuthorization" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_BasePoolAuthorization_$3955", + "typeString": "contract BasePoolAuthorization" + } + ], + "id": 3931, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2457:7:29", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 3930, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2457:7:29", + "typeDescriptions": {} + } + }, + "id": 3933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2457:13:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3925, + "name": "_getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3954, + "src": "2410:14:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 3926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2410:16:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "id": 3927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "canPerform", + "nodeType": "MemberAccess", + "referencedDeclaration": 1300, + "src": "2410:27:29", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view external returns (bool)" + } + }, + "id": 3934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2410:61:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 3908, + "id": 3935, + "nodeType": "Return", + "src": "2403:68:29" + } + ] + }, + "id": 3937, + "nodeType": "IfStatement", + "src": "2048:434:29", + "trueBody": { + "id": 3924, + "nodeType": "Block", + "src": "2117:151:29", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 3922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 3918, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2233:3:29", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 3919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2233:10:29", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3920, + "name": "getOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3890, + "src": "2247:8:29", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 3921, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2247:10:29", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2233:24:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 3908, + "id": 3923, + "nodeType": "Return", + "src": "2226:31:29" + } + ] + } + } + ] + }, + "id": 3939, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3905, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2014:8:29" + }, + "parameters": { + "id": 3904, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3901, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 3939, + "src": "1965:16:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3900, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1965:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 3903, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 3939, + "src": "1983:15:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3902, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1983:7:29", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1964:35:29" + }, + "returnParameters": { + "id": 3908, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3907, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3939, + "src": "2032:4:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3906, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2032:4:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2031:6:29" + }, + "scope": 3955, + "src": "1944:544:29", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 3948, + "nodeType": "Block", + "src": "2568:29:29", + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 3946, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2585:5:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 3945, + "id": 3947, + "nodeType": "Return", + "src": "2578:12:29" + } + ] + }, + "id": 3949, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3942, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3941, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3949, + "src": "2522:7:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 3940, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2522:7:29", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2521:9:29" + }, + "returnParameters": { + "id": 3945, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3944, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3949, + "src": "2562:4:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 3943, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2562:4:29", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2561:6:29" + }, + "scope": 3955, + "src": "2494:103:29", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 3954, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 3950, + "nodeType": "ParameterList", + "parameters": [], + "src": "2626:2:29" + }, + "returnParameters": { + "id": 3953, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3952, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 3954, + "src": "2660:11:29", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 3951, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "2660:11:29", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "2659:13:29" + }, + "scope": 3955, + "src": "2603:70:29", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 3956, + "src": "1492:1183:29" + } + ], + "src": "688:1988:29" + }, + "id": 29 + }, + "@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol", + "exportedSymbols": { + "RecoveryMode": [ + 4136 + ] + }, + "id": 4137, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 3957, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:30" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 3958, + "nodeType": "ImportDirective", + "scope": 4137, + "sourceUnit": 1012, + "src": "713:90:30", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/BasePoolUserData.sol", + "id": 3959, + "nodeType": "ImportDirective", + "scope": 4137, + "sourceUnit": 287, + "src": "804:80:30", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRecoveryMode.sol", + "id": 3960, + "nodeType": "ImportDirective", + "scope": 4137, + "sourceUnit": 452, + "src": "885:77:30", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 3961, + "nodeType": "ImportDirective", + "scope": 4137, + "sourceUnit": 7233, + "src": "964:72:30", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol", + "file": "./BasePoolAuthorization.sol", + "id": 3962, + "nodeType": "ImportDirective", + "scope": 4137, + "sourceUnit": 3956, + "src": "1038:37:30", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 3964, + "name": "IRecoveryMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 451, + "src": "2624:13:30", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRecoveryMode_$451", + "typeString": "contract IRecoveryMode" + } + }, + "id": 3965, + "nodeType": "InheritanceSpecifier", + "src": "2624:13:30" + }, + { + "baseName": { + "id": 3966, + "name": "BasePoolAuthorization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3955, + "src": "2639:21:30", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolAuthorization_$3955", + "typeString": "contract BasePoolAuthorization" + } + }, + "id": 3967, + "nodeType": "InheritanceSpecifier", + "src": "2639:21:30" + } + ], + "contractDependencies": [ + 451, + 1022, + 3955, + 5117 + ], + "contractKind": "contract", + "documentation": { + "id": 3963, + "nodeType": "StructuredDocumentation", + "src": "1077:1512:30", + "text": " @notice Handle storage and state changes for pools that support \"Recovery Mode\".\n @dev This is intended to provide a safe way to exit any pool during some kind of emergency, to avoid locking funds\n in the event the pool enters a non-functional state (i.e., some code that normally runs during exits is causing\n them to revert).\n Recovery Mode is *not* the same as pausing the pool. The pause function is only available during a short window\n after factory deployment. Pausing can only be intentionally reversed during a buffer period, and the contract\n will permanently unpause itself thereafter. Paused pools are completely disabled, in a kind of suspended animation,\n until they are voluntarily or involuntarily unpaused.\n By contrast, a privileged account - typically a governance multisig - can place a pool in Recovery Mode at any\n time, and it is always reversible. The pool is *not* disabled while in this mode: though of course whatever\n condition prompted the transition to Recovery Mode has likely effectively disabled some functions. Rather,\n a special \"clean\" exit is enabled, which runs the absolute minimum code necessary to exit proportionally.\n In particular, stable pools do not attempt to compute the invariant (which is a complex, iterative calculation\n that can fail in extreme circumstances), and no protocol fees are collected.\n It is critical to ensure that turning on Recovery Mode would do no harm, if activated maliciously or in error." + }, + "fullyImplemented": false, + "id": 4136, + "linearizedBaseContracts": [ + 4136, + 3955, + 5117, + 1022, + 451 + ], + "name": "RecoveryMode", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 3970, + "libraryName": { + "id": 3968, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "2673:10:30", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "2667:29:30", + "typeName": { + "id": 3969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2688:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 3973, + "libraryName": { + "id": 3971, + "name": "BasePoolUserData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 286, + "src": "2707:16:30", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolUserData_$286", + "typeString": "library BasePoolUserData" + } + }, + "nodeType": "UsingForDirective", + "src": "2701:33:30", + "typeName": { + "id": 3972, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2728:5:30", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + { + "body": { + "id": 3980, + "nodeType": "Block", + "src": "2846:54:30", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 3976, + "name": "_ensureNotInRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4043, + "src": "2856:24:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 3977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2856:26:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3978, + "nodeType": "ExpressionStatement", + "src": "2856:26:30" + }, + { + "id": 3979, + "nodeType": "PlaceholderStatement", + "src": "2892:1:30" + } + ] + }, + "documentation": { + "id": 3974, + "nodeType": "StructuredDocumentation", + "src": "2740:68:30", + "text": " @dev Reverts if the contract is in Recovery Mode." + }, + "id": 3981, + "name": "whenNotInRecoveryMode", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 3975, + "nodeType": "ParameterList", + "parameters": [], + "src": "2843:2:30" + }, + "src": "2813:87:30", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 440 + ], + "body": { + "id": 3992, + "nodeType": "Block", + "src": "3493:39:30", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "74727565", + "id": 3989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3520:4:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 3988, + "name": "_setRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4018, + "src": "3503:16:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 3990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3503:22:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 3991, + "nodeType": "ExpressionStatement", + "src": "3503:22:30" + } + ] + }, + "documentation": { + "id": 3982, + "nodeType": "StructuredDocumentation", + "src": "2906:521:30", + "text": " @notice Enable recovery mode, which enables a special safe exit path for LPs.\n @dev Does not otherwise affect pool operations (beyond deferring payment of protocol fees), though some pools may\n perform certain operations in a \"safer\" manner that is less likely to fail, in an attempt to keep the pool\n running, even in a pathological state. Unlike the Pause operation, which is only available during a short window\n after factory deployment, Recovery Mode can always be enabled." + }, + "functionSelector": "54a844ba", + "id": 3993, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 3986, + "modifierName": { + "id": 3985, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "3480:12:30", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3480:12:30" + } + ], + "name": "enableRecoveryMode", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3984, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3471:8:30" + }, + "parameters": { + "id": 3983, + "nodeType": "ParameterList", + "parameters": [], + "src": "3459:2:30" + }, + "returnParameters": { + "id": 3987, + "nodeType": "ParameterList", + "parameters": [], + "src": "3493:0:30" + }, + "scope": 4136, + "src": "3432:100:30", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 444 + ], + "body": { + "id": 4004, + "nodeType": "Block", + "src": "3842:40:30", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "66616c7365", + "id": 4001, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3869:5:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 4000, + "name": "_setRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4018, + "src": "3852:16:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 4002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3852:23:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4003, + "nodeType": "ExpressionStatement", + "src": "3852:23:30" + } + ] + }, + "documentation": { + "id": 3994, + "nodeType": "StructuredDocumentation", + "src": "3538:237:30", + "text": " @notice Disable recovery mode, which disables the special safe exit path for LPs.\n @dev Protocol fees are not paid while in Recovery Mode, so it should only remain active for as long as strictly\n necessary." + }, + "functionSelector": "b7b814fc", + "id": 4005, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 3998, + "modifierName": { + "id": 3997, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "3829:12:30", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3829:12:30" + } + ], + "name": "disableRecoveryMode", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 3996, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3820:8:30" + }, + "parameters": { + "id": 3995, + "nodeType": "ParameterList", + "parameters": [], + "src": "3808:2:30" + }, + "returnParameters": { + "id": 3999, + "nodeType": "ParameterList", + "parameters": [], + "src": "3842:0:30" + }, + "scope": 4136, + "src": "3780:102:30", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 450 + ], + "documentation": { + "id": 4006, + "nodeType": "StructuredDocumentation", + "src": "3952:100:30", + "text": " @notice Override to check storage and return whether the pool is in Recovery Mode" + }, + "functionSelector": "b35056b8", + "id": 4012, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "inRecoveryMode", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4008, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4103:8:30" + }, + "parameters": { + "id": 4007, + "nodeType": "ParameterList", + "parameters": [], + "src": "4080:2:30" + }, + "returnParameters": { + "id": 4011, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4010, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4012, + "src": "4121:4:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4009, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4121:4:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4120:6:30" + }, + "scope": 4136, + "src": "4057:70:30", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "documentation": { + "id": 4013, + "nodeType": "StructuredDocumentation", + "src": "4133:253:30", + "text": " @dev Override to update storage and emit the event\n No complex code or external calls that could fail should be placed in the implementations,\n which could jeopardize the ability to enable and disable Recovery Mode." + }, + "id": 4018, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_setRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4016, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4015, + "mutability": "mutable", + "name": "enabled", + "nodeType": "VariableDeclaration", + "scope": 4018, + "src": "4417:12:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4014, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4417:4:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4416:14:30" + }, + "returnParameters": { + "id": 4017, + "nodeType": "ParameterList", + "parameters": [], + "src": "4447:0:30" + }, + "scope": 4136, + "src": "4391:57:30", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 4029, + "nodeType": "Block", + "src": "4578:72:30", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4023, + "name": "inRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4012, + "src": "4597:14:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 4024, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4597:16:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4025, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4615:6:30", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "NOT_IN_RECOVERY_MODE", + "nodeType": "MemberAccess", + "referencedDeclaration": 890, + "src": "4615:27:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4022, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4588:8:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4588:55:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4028, + "nodeType": "ExpressionStatement", + "src": "4588:55:30" + } + ] + }, + "documentation": { + "id": 4019, + "nodeType": "StructuredDocumentation", + "src": "4454:72:30", + "text": " @dev Reverts if the contract is not in Recovery Mode." + }, + "id": 4030, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureInRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4020, + "nodeType": "ParameterList", + "parameters": [], + "src": "4561:2:30" + }, + "returnParameters": { + "id": 4021, + "nodeType": "ParameterList", + "parameters": [], + "src": "4578:0:30" + }, + "scope": 4136, + "src": "4531:119:30", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4042, + "nodeType": "Block", + "src": "4779:69:30", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4798:17:30", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4035, + "name": "inRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4012, + "src": "4799:14:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 4036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4799:16:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4038, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4817:6:30", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "IN_RECOVERY_MODE", + "nodeType": "MemberAccess", + "referencedDeclaration": 887, + "src": "4817:23:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4034, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4789:8:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4789:52:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4041, + "nodeType": "ExpressionStatement", + "src": "4789:52:30" + } + ] + }, + "documentation": { + "id": 4031, + "nodeType": "StructuredDocumentation", + "src": "4656:68:30", + "text": " @dev Reverts if the contract is in Recovery Mode." + }, + "id": 4043, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureNotInRecoveryMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4032, + "nodeType": "ParameterList", + "parameters": [], + "src": "4762:2:30" + }, + "returnParameters": { + "id": 4033, + "nodeType": "ParameterList", + "parameters": [], + "src": "4779:0:30" + }, + "scope": 4136, + "src": "4729:119:30", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4080, + "nodeType": "Block", + "src": "5451:216:30", + "statements": [ + { + "assignments": [ + 4060 + ], + "declarations": [ + { + "constant": false, + "id": 4060, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 4080, + "src": "5461:19:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4059, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5461:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4064, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 4061, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4051, + "src": "5483:8:30", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "recoveryModeExit", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "5483:25:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256)" + } + }, + "id": 4063, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5483:27:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5461:49:30" + }, + { + "assignments": [ + 4069 + ], + "declarations": [ + { + "constant": false, + "id": 4069, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 4080, + "src": "5521:27:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4067, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5521:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4068, + "nodeType": "ArrayTypeName", + "src": "5521:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 4075, + "initialValue": { + "arguments": [ + { + "id": 4071, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4047, + "src": "5582:8:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 4072, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4049, + "src": "5592:11:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4073, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4060, + "src": "5605:11:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4070, + "name": "_computeProportionalAmountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4135, + "src": "5551:30:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)" + } + }, + "id": 4074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5551:66:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5521:96:30" + }, + { + "expression": { + "components": [ + { + "id": 4076, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4060, + "src": "5636:11:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4077, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4069, + "src": "5649:10:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 4078, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5635:25:30", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 4058, + "id": 4079, + "nodeType": "Return", + "src": "5628:32:30" + } + ] + }, + "documentation": { + "id": 4044, + "nodeType": "StructuredDocumentation", + "src": "4854:409:30", + "text": " @dev A minimal proportional exit, suitable as is for most pools: though not for pools with preminted BPT\n or other special considerations. Designed to be overridden if a pool needs to do extra processing,\n such as scaling a stored invariant, or caching the new total supply.\n No complex code or external calls should be made in derived contracts that override this!" + }, + "id": 4081, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_doRecoveryModeExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4052, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4047, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "5306:25:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4045, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5306:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4046, + "nodeType": "ArrayTypeName", + "src": "5306:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4049, + "mutability": "mutable", + "name": "totalSupply", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "5341:19:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4048, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5341:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4051, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "5370:21:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4050, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5370:5:30", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5296:101:30" + }, + "returnParameters": { + "id": 4058, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4054, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "5424:7:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4053, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5424:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4057, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4081, + "src": "5433:16:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5433:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4056, + "nodeType": "ArrayTypeName", + "src": "5433:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5423:27:30" + }, + "scope": 4136, + "src": "5268:399:30", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 4134, + "nodeType": "Block", + "src": "5864:1229:30", + "statements": [ + { + "assignments": [ + 4095 + ], + "declarations": [ + { + "constant": false, + "id": 4095, + "mutability": "mutable", + "name": "bptRatio", + "nodeType": "VariableDeclaration", + "scope": 4134, + "src": "6856:16:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4094, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6856:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4100, + "initialValue": { + "arguments": [ + { + "id": 4098, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4086, + "src": "6895:11:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4096, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4088, + "src": "6875:11:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4097, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "6875:19:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6875:32:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6856:51:30" + }, + { + "expression": { + "id": 4108, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4101, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4092, + "src": "6918:10:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 4105, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4084, + "src": "6945:8:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 4106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6945:15:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4104, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "6931:13:30", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 4102, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6935:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4103, + "nodeType": "ArrayTypeName", + "src": "6935:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 4107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6931:30:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "src": "6918:43:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 4109, + "nodeType": "ExpressionStatement", + "src": "6918:43:30" + }, + { + "body": { + "id": 4132, + "nodeType": "Block", + "src": "7017:70:30", + "statements": [ + { + "expression": { + "id": 4130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 4121, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4092, + "src": "7031:10:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 4123, + "indexExpression": { + "id": 4122, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4111, + "src": "7042:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7031:13:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4128, + "name": "bptRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4095, + "src": "7067:8:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 4124, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4084, + "src": "7047:8:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 4126, + "indexExpression": { + "id": 4125, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4111, + "src": "7056:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7047:11:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "7047:19:30", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7047:29:30", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7031:45:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4131, + "nodeType": "ExpressionStatement", + "src": "7031:45:30" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4114, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4111, + "src": "6991:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 4115, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4084, + "src": "6995:8:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 4116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6995:15:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6991:19:30", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4133, + "initializationExpression": { + "assignments": [ + 4111 + ], + "declarations": [ + { + "constant": false, + "id": 4111, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 4133, + "src": "6976:9:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4110, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6976:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4113, + "initialValue": { + "hexValue": "30", + "id": 4112, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6988:1:30", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6976:13:30" + }, + "loopExpression": { + "expression": { + "id": 4119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "7012:3:30", + "subExpression": { + "id": 4118, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4111, + "src": "7012:1:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4120, + "nodeType": "ExpressionStatement", + "src": "7012:3:30" + }, + "nodeType": "ForStatement", + "src": "6971:116:30" + } + ] + }, + "id": 4135, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_computeProportionalAmountsOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4089, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4084, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 4135, + "src": "5722:25:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4082, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5722:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4083, + "nodeType": "ArrayTypeName", + "src": "5722:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4086, + "mutability": "mutable", + "name": "totalSupply", + "nodeType": "VariableDeclaration", + "scope": 4135, + "src": "5757:19:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4085, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5757:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4088, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 4135, + "src": "5786:19:30", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4087, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5786:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5712:99:30" + }, + "returnParameters": { + "id": 4093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4092, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 4135, + "src": "5835:27:30", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 4090, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5835:7:30", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4091, + "nodeType": "ArrayTypeName", + "src": "5835:9:30", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5834:29:30" + }, + "scope": 4136, + "src": "5673:1420:30", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4137, + "src": "2590:4505:30" + } + ], + "src": "688:6408:30" + }, + "id": 30 + }, + "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol", + "exportedSymbols": { + "BasePoolFactory": [ + 4276 + ] + }, + "id": 4277, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4138, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:31" + }, + { + "id": 4139, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:31" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 4140, + "nodeType": "ImportDirective", + "scope": 4277, + "sourceUnit": 2022, + "src": "747:65:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "file": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "id": 4141, + "nodeType": "ImportDirective", + "scope": 4277, + "sourceUnit": 1283, + "src": "813:101:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IBasePoolFactory.sol", + "id": 4142, + "nodeType": "ImportDirective", + "scope": 4277, + "sourceUnit": 394, + "src": "915:80:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol", + "id": 4143, + "nodeType": "ImportDirective", + "scope": 4277, + "sourceUnit": 5340, + "src": "996:85:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "id": 4144, + "nodeType": "ImportDirective", + "scope": 4277, + "sourceUnit": 6090, + "src": "1082:88:31", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 4146, + "name": "IBasePoolFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 393, + "src": "1989:16:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBasePoolFactory_$393", + "typeString": "contract IBasePoolFactory" + } + }, + "id": 4147, + "nodeType": "InheritanceSpecifier", + "src": "1989:16:31" + }, + { + "baseName": { + "id": 4148, + "name": "BaseSplitCodeFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5339, + "src": "2007:20:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BaseSplitCodeFactory_$5339", + "typeString": "contract BaseSplitCodeFactory" + } + }, + "id": 4149, + "nodeType": "InheritanceSpecifier", + "src": "2007:20:31" + }, + { + "baseName": { + "id": 4150, + "name": "SingletonAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6089, + "src": "2029:23:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$6089", + "typeString": "contract SingletonAuthentication" + } + }, + "id": 4151, + "nodeType": "InheritanceSpecifier", + "src": "2029:23:31" + } + ], + "contractDependencies": [ + 393, + 1022, + 5117, + 5339, + 6089 + ], + "contractKind": "contract", + "documentation": { + "id": 4145, + "nodeType": "StructuredDocumentation", + "src": "1172:779:31", + "text": " @notice Base contract for Pool factories.\n Pools are deployed from factories to allow third parties to reason about them. Unknown Pools may have arbitrary\n logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts created by\n the factory) is very powerful.\n @dev By using the split code mechanism, we can deploy Pools with creation code so large that a regular factory\n contract would not be able to store it.\n Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will\n become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently\n prevent the creation of any future pools from the factory." + }, + "fullyImplemented": true, + "id": 4276, + "linearizedBaseContracts": [ + 4276, + 6089, + 5117, + 5339, + 393, + 1022 + ], + "name": "BasePoolFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 4153, + "mutability": "immutable", + "name": "_protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 4276, + "src": "2059:70:31", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 4152, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "2059:31:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4157, + "mutability": "mutable", + "name": "_isPoolFromFactory", + "nodeType": "VariableDeclaration", + "scope": 4276, + "src": "2136:51:31", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "typeName": { + "id": 4156, + "keyType": { + "id": 4154, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2144:7:31", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2136:24:31", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueType": { + "id": 4155, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2155:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4159, + "mutability": "mutable", + "name": "_disabled", + "nodeType": "VariableDeclaration", + "scope": 4276, + "src": "2193:22:31", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4158, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2193:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 4163, + "name": "PoolCreated", + "nodeType": "EventDefinition", + "parameters": { + "id": 4162, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4161, + "indexed": true, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 4163, + "src": "2240:20:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4160, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2240:7:31", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2239:22:31" + }, + "src": "2222:40:31" + }, + { + "anonymous": false, + "id": 4165, + "name": "FactoryDisabled", + "nodeType": "EventDefinition", + "parameters": { + "id": 4164, + "nodeType": "ParameterList", + "parameters": [], + "src": "2288:2:31" + }, + "src": "2267:24:31" + }, + { + "body": { + "id": 4184, + "nodeType": "Block", + "src": "2499:59:31", + "statements": [ + { + "expression": { + "id": 4182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4180, + "name": "_protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4153, + "src": "2509:20:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4181, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4169, + "src": "2532:19:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "src": "2509:42:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "id": 4183, + "nodeType": "ExpressionStatement", + "src": "2509:42:31" + } + ] + }, + "id": 4185, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 4174, + "name": "creationCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4171, + "src": "2454:12:31", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "id": 4175, + "modifierName": { + "id": 4173, + "name": "BaseSplitCodeFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5339, + "src": "2433:20:31", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BaseSplitCodeFactory_$5339_$", + "typeString": "type(contract BaseSplitCodeFactory)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2433:34:31" + }, + { + "arguments": [ + { + "id": 4177, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4167, + "src": "2492:5:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + } + ], + "id": 4178, + "modifierName": { + "id": 4176, + "name": "SingletonAuthentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6089, + "src": "2468:23:31", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_SingletonAuthentication_$6089_$", + "typeString": "type(contract SingletonAuthentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2468:30:31" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4172, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4167, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 4185, + "src": "2318:12:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 4166, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "2318:6:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4169, + "mutability": "mutable", + "name": "protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 4185, + "src": "2340:51:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 4168, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "2340:31:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4171, + "mutability": "mutable", + "name": "creationCode", + "nodeType": "VariableDeclaration", + "scope": 4185, + "src": "2401:25:31", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4170, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2401:5:31", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2308:124:31" + }, + "returnParameters": { + "id": 4179, + "nodeType": "ParameterList", + "parameters": [], + "src": "2499:0:31" + }, + "scope": 4276, + "src": "2297:261:31", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 382 + ], + "body": { + "id": 4197, + "nodeType": "Block", + "src": "2643:48:31", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 4193, + "name": "_isPoolFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4157, + "src": "2660:18:31", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4195, + "indexExpression": { + "id": 4194, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4187, + "src": "2679:4:31", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2660:24:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4192, + "id": 4196, + "nodeType": "Return", + "src": "2653:31:31" + } + ] + }, + "functionSelector": "6634b753", + "id": 4198, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isPoolFromFactory", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4189, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2619:8:31" + }, + "parameters": { + "id": 4188, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4187, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 4198, + "src": "2591:12:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4186, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2591:7:31", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2590:14:31" + }, + "returnParameters": { + "id": 4192, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4191, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4198, + "src": "2637:4:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4190, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2637:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2636:6:31" + }, + "scope": 4276, + "src": "2564:127:31", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 388 + ], + "body": { + "id": 4206, + "nodeType": "Block", + "src": "2755:33:31", + "statements": [ + { + "expression": { + "id": 4204, + "name": "_disabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4159, + "src": "2772:9:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4203, + "id": 4205, + "nodeType": "Return", + "src": "2765:16:31" + } + ] + }, + "functionSelector": "6c57f5a9", + "id": 4207, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isDisabled", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4200, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2731:8:31" + }, + "parameters": { + "id": 4199, + "nodeType": "ParameterList", + "parameters": [], + "src": "2716:2:31" + }, + "returnParameters": { + "id": 4203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4202, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4207, + "src": "2749:4:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4201, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2749:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2748:6:31" + }, + "scope": 4276, + "src": "2697:91:31", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 392 + ], + "body": { + "id": 4223, + "nodeType": "Block", + "src": "2844:93:31", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4213, + "name": "_ensureEnabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4236, + "src": "2854:14:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 4214, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2854:16:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4215, + "nodeType": "ExpressionStatement", + "src": "2854:16:31" + }, + { + "expression": { + "id": 4218, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4216, + "name": "_disabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4159, + "src": "2881:9:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 4217, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2893:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "2881:16:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4219, + "nodeType": "ExpressionStatement", + "src": "2881:16:31" + }, + { + "eventCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4220, + "name": "FactoryDisabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4165, + "src": "2913:15:31", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 4221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2913:17:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4222, + "nodeType": "EmitStatement", + "src": "2908:22:31" + } + ] + }, + "functionSelector": "2f2770db", + "id": 4224, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 4211, + "modifierName": { + "id": 4210, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "2831:12:31", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2831:12:31" + } + ], + "name": "disable", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4209, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2822:8:31" + }, + "parameters": { + "id": 4208, + "nodeType": "ParameterList", + "parameters": [], + "src": "2810:2:31" + }, + "returnParameters": { + "id": 4212, + "nodeType": "ParameterList", + "parameters": [], + "src": "2844:0:31" + }, + "scope": 4276, + "src": "2794:143:31", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4235, + "nodeType": "Block", + "src": "2983:57:31", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4230, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "3002:13:31", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4228, + "name": "isDisabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4207, + "src": "3003:10:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 4229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3003:12:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4231, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "3017:6:31", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "DISABLED", + "nodeType": "MemberAccess", + "referencedDeclaration": 611, + "src": "3017:15:31", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4227, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2993:8:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2993:40:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4234, + "nodeType": "ExpressionStatement", + "src": "2993:40:31" + } + ] + }, + "id": 4236, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureEnabled", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4225, + "nodeType": "ParameterList", + "parameters": [], + "src": "2966:2:31" + }, + "returnParameters": { + "id": 4226, + "nodeType": "ParameterList", + "parameters": [], + "src": "2983:0:31" + }, + "scope": 4276, + "src": "2943:97:31", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4243, + "nodeType": "Block", + "src": "3145:44:31", + "statements": [ + { + "expression": { + "id": 4241, + "name": "_protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4153, + "src": "3162:20:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "functionReturnParameters": 4240, + "id": 4242, + "nodeType": "Return", + "src": "3155:27:31" + } + ] + }, + "functionSelector": "739238d6", + "id": 4244, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeePercentagesProvider", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4237, + "nodeType": "ParameterList", + "parameters": [], + "src": "3088:2:31" + }, + "returnParameters": { + "id": 4240, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4239, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4244, + "src": "3112:31:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 4238, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "3112:31:31", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + } + ], + "src": "3111:33:31" + }, + "scope": 4276, + "src": "3046:143:31", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 5298 + ], + "body": { + "id": 4274, + "nodeType": "Block", + "src": "3286:186:31", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4252, + "name": "_ensureEnabled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4236, + "src": "3296:14:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 4253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3296:16:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4254, + "nodeType": "ExpressionStatement", + "src": "3296:16:31" + }, + { + "assignments": [ + 4256 + ], + "declarations": [ + { + "constant": false, + "id": 4256, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "scope": 4274, + "src": "3323:12:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4255, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3323:7:31", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4261, + "initialValue": { + "arguments": [ + { + "id": 4259, + "name": "constructorArgs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4246, + "src": "3352:15:31", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4257, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "3338:5:31", + "typeDescriptions": { + "typeIdentifier": "t_super$_BasePoolFactory_$4276", + "typeString": "contract super BasePoolFactory" + } + }, + "id": 4258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_create", + "nodeType": "MemberAccess", + "referencedDeclaration": 5298, + "src": "3338:13:31", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) returns (address)" + } + }, + "id": 4260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3338:30:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3323:45:31" + }, + { + "expression": { + "id": 4266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 4262, + "name": "_isPoolFromFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4157, + "src": "3379:18:31", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 4264, + "indexExpression": { + "id": 4263, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4256, + "src": "3398:4:31", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3379:24:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 4265, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3406:4:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "3379:31:31", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4267, + "nodeType": "ExpressionStatement", + "src": "3379:31:31" + }, + { + "eventCall": { + "arguments": [ + { + "id": 4269, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4256, + "src": "3438:4:31", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4268, + "name": "PoolCreated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4163, + "src": "3426:11:31", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 4270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3426:17:31", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4271, + "nodeType": "EmitStatement", + "src": "3421:22:31" + }, + { + "expression": { + "id": 4272, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4256, + "src": "3461:4:31", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4251, + "id": 4273, + "nodeType": "Return", + "src": "3454:11:31" + } + ] + }, + "id": 4275, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_create", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4248, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3259:8:31" + }, + "parameters": { + "id": 4247, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4246, + "mutability": "mutable", + "name": "constructorArgs", + "nodeType": "VariableDeclaration", + "scope": 4275, + "src": "3212:28:31", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4245, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3212:5:31", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3211:30:31" + }, + "returnParameters": { + "id": 4251, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4250, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4275, + "src": "3277:7:31", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4249, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3277:7:31", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3276:9:31" + }, + "scope": 4276, + "src": "3195:277:31", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 4277, + "src": "1952:1522:31" + } + ], + "src": "688:2787:31" + }, + "id": 31 + }, + "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol", + "exportedSymbols": { + "FactoryWidePauseWindow": [ + 4338 + ] + }, + "id": 4339, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4278, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:32" + }, + { + "id": 4279, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:32" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 4280, + "nodeType": "StructuredDocumentation", + "src": "747:337:32", + "text": " @dev Utility to create Pool factories for Pools that use the `TemporarilyPausable` contract.\n By calling `TemporarilyPausable`'s constructor with the result of `getPauseConfiguration`, all Pools created by this\n factory will share the same Pause Window end time, after which both old and new Pools will not be pausable." + }, + "fullyImplemented": true, + "id": 4338, + "linearizedBaseContracts": [ + 4338 + ], + "name": "FactoryWidePauseWindow", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 4283, + "mutability": "constant", + "name": "_INITIAL_PAUSE_WINDOW_DURATION", + "nodeType": "VariableDeclaration", + "scope": 4338, + "src": "1279:65:32", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4281, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1279:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3930", + "id": 4282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1337:7:32", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_7776000_by_1", + "typeString": "int_const 7776000" + }, + "value": "90" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4286, + "mutability": "constant", + "name": "_BUFFER_PERIOD_DURATION", + "nodeType": "VariableDeclaration", + "scope": 4338, + "src": "1350:58:32", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4284, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1350:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3330", + "id": 4285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1401:7:32", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_2592000_by_1", + "typeString": "int_const 2592000" + }, + "value": "30" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4288, + "mutability": "immutable", + "name": "_poolsPauseWindowEndTime", + "nodeType": "VariableDeclaration", + "scope": 4338, + "src": "1544:50:32", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4287, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1544:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 4298, + "nodeType": "Block", + "src": "1615:92:32", + "statements": [ + { + "expression": { + "id": 4296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4291, + "name": "_poolsPauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4288, + "src": "1625:24:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4292, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "1652:5:32", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 4293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "1652:15:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 4294, + "name": "_INITIAL_PAUSE_WINDOW_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4283, + "src": "1670:30:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1652:48:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1625:75:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4297, + "nodeType": "ExpressionStatement", + "src": "1625:75:32" + } + ] + }, + "id": 4299, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4289, + "nodeType": "ParameterList", + "parameters": [], + "src": "1612:2:32" + }, + "returnParameters": { + "id": 4290, + "nodeType": "ParameterList", + "parameters": [], + "src": "1615:0:32" + }, + "scope": 4338, + "src": "1601:106:32", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4336, + "nodeType": "Block", + "src": "2179:774:32", + "statements": [ + { + "assignments": [ + 4308 + ], + "declarations": [ + { + "constant": false, + "id": 4308, + "mutability": "mutable", + "name": "currentTime", + "nodeType": "VariableDeclaration", + "scope": 4336, + "src": "2189:19:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4307, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2189:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4311, + "initialValue": { + "expression": { + "id": 4309, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2211:5:32", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 4310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2211:15:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2189:37:32" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4312, + "name": "currentTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4308, + "src": "2240:11:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 4313, + "name": "_poolsPauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4288, + "src": "2254:24:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2240:38:32", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4334, + "nodeType": "Block", + "src": "2700:247:32", + "statements": [ + { + "expression": { + "id": 4328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4326, + "name": "pauseWindowDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4303, + "src": "2875:19:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 4327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2897:1:32", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2875:23:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4329, + "nodeType": "ExpressionStatement", + "src": "2875:23:32" + }, + { + "expression": { + "id": 4332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4330, + "name": "bufferPeriodDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4305, + "src": "2912:20:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "30", + "id": 4331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2935:1:32", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2912:24:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4333, + "nodeType": "ExpressionStatement", + "src": "2912:24:32" + } + ] + }, + "id": 4335, + "nodeType": "IfStatement", + "src": "2236:711:32", + "trueBody": { + "id": 4325, + "nodeType": "Block", + "src": "2280:414:32", + "statements": [ + { + "expression": { + "id": 4319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4315, + "name": "pauseWindowDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4303, + "src": "2528:19:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4316, + "name": "_poolsPauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4288, + "src": "2550:24:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 4317, + "name": "currentTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4308, + "src": "2577:11:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2550:38:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2528:60:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4320, + "nodeType": "ExpressionStatement", + "src": "2528:60:32" + }, + { + "expression": { + "id": 4323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4321, + "name": "bufferPeriodDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4305, + "src": "2637:20:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4322, + "name": "_BUFFER_PERIOD_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4286, + "src": "2660:23:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2637:46:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4324, + "nodeType": "ExpressionStatement", + "src": "2637:46:32" + } + ] + } + } + ] + }, + "documentation": { + "id": 4300, + "nodeType": "StructuredDocumentation", + "src": "1713:348:32", + "text": " @dev Returns the current `TemporarilyPausable` configuration that will be applied to Pools created by this\n factory.\n `pauseWindowDuration` will decrease over time until it reaches zero, at which point both it and\n `bufferPeriodDuration` will be zero forever, meaning deployed Pools will not be pausable." + }, + "functionSelector": "2da47c40", + "id": 4337, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPauseConfiguration", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4301, + "nodeType": "ParameterList", + "parameters": [], + "src": "2096:2:32" + }, + "returnParameters": { + "id": 4306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4303, + "mutability": "mutable", + "name": "pauseWindowDuration", + "nodeType": "VariableDeclaration", + "scope": 4337, + "src": "2120:27:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2120:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4305, + "mutability": "mutable", + "name": "bufferPeriodDuration", + "nodeType": "VariableDeclaration", + "scope": 4337, + "src": "2149:28:32", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4304, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2149:7:32", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2119:59:32" + }, + "scope": 4338, + "src": "2066:887:32", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + } + ], + "scope": 4339, + "src": "1085:1870:32" + } + ], + "src": "688:2268:32" + }, + "id": 32 + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol", + "exportedSymbols": { + "InvariantGrowthProtocolSwapFees": [ + 4417 + ] + }, + "id": 4418, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4340, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:33" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 4341, + "nodeType": "ImportDirective", + "scope": 4418, + "sourceUnit": 7233, + "src": "713:72:33", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 4342, + "nodeType": "ImportDirective", + "scope": 4418, + "sourceUnit": 8843, + "src": "786:66:33", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol", + "file": "./ProtocolFees.sol", + "id": 4343, + "nodeType": "ImportDirective", + "scope": 4418, + "sourceUnit": 4723, + "src": "853:28:33", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 4417, + "linearizedBaseContracts": [ + 4417 + ], + "name": "InvariantGrowthProtocolSwapFees", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4346, + "libraryName": { + "id": 4344, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "935:10:33", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "929:29:33", + "typeName": { + "id": 4345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "950:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "body": { + "id": 4384, + "nodeType": "Block", + "src": "1158:3646:33", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 4365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4359, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4357, + "name": "supplyGrowthRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4350, + "src": "2568:17:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 4358, + "name": "invariantGrowthRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4348, + "src": "2589:20:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2568:41:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 4360, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2567:43:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4361, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4352, + "src": "2615:25:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4362, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2644:1:33", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2615:30:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 4364, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2614:32:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2567:79:33", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4368, + "nodeType": "IfStatement", + "src": "2563:93:33", + "trueBody": { + "expression": { + "hexValue": "30", + "id": 4366, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2655:1:33", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 4356, + "id": 4367, + "nodeType": "Return", + "src": "2648:8:33" + } + }, + { + "assignments": [ + 4370 + ], + "declarations": [ + { + "constant": false, + "id": 4370, + "mutability": "mutable", + "name": "swapFeesPercentage", + "nodeType": "VariableDeclaration", + "scope": 4384, + "src": "4465:26:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4369, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4465:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4378, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4371, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "4494:10:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 4372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "4494:14:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "arguments": [ + { + "id": 4375, + "name": "invariantGrowthRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4348, + "src": "4537:20:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4373, + "name": "supplyGrowthRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4350, + "src": "4511:17:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "4511:25:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4511:47:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4494:64:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4465:93:33" + }, + { + "expression": { + "arguments": [ + { + "id": 4381, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4352, + "src": "4771:25:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4379, + "name": "swapFeesPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4370, + "src": "4744:18:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "4744:26:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4744:53:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4356, + "id": 4383, + "nodeType": "Return", + "src": "4737:60:33" + } + ] + }, + "id": 4385, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProtocolOwnershipPercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4353, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4348, + "mutability": "mutable", + "name": "invariantGrowthRatio", + "nodeType": "VariableDeclaration", + "scope": 4385, + "src": "1013:28:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4347, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1013:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4350, + "mutability": "mutable", + "name": "supplyGrowthRatio", + "nodeType": "VariableDeclaration", + "scope": 4385, + "src": "1051:25:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4349, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1051:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4352, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 4385, + "src": "1086:33:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4351, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1086:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1003:122:33" + }, + "returnParameters": { + "id": 4356, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4355, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4385, + "src": "1149:7:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4354, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1149:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1148:9:33" + }, + "scope": 4417, + "src": "964:3840:33", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4415, + "nodeType": "Block", + "src": "5021:323:33", + "statements": [ + { + "assignments": [ + 4399 + ], + "declarations": [ + { + "constant": false, + "id": 4399, + "mutability": "mutable", + "name": "protocolOwnershipPercentage", + "nodeType": "VariableDeclaration", + "scope": 4415, + "src": "5031:35:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4398, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5031:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4408, + "initialValue": { + "arguments": [ + { + "id": 4401, + "name": "invariantGrowthRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4387, + "src": "5113:20:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 4404, + "name": "previousSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4389, + "src": "5169:14:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4402, + "name": "currentSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4391, + "src": "5147:13:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "5147:21:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5147:37:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4406, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4393, + "src": "5198:25:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4400, + "name": "getProtocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4385, + "src": "5069:30:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 4407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5069:164:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5031:202:33" + }, + { + "expression": { + "arguments": [ + { + "id": 4411, + "name": "currentSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4391, + "src": "5294:13:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4412, + "name": "protocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4399, + "src": "5309:27:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4409, + "name": "ProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4722, + "src": "5251:12:33", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFees_$4722_$", + "typeString": "type(library ProtocolFees)" + } + }, + "id": 4410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bptForPoolOwnershipPercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 4721, + "src": "5251:42:33", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5251:86:33", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4397, + "id": 4414, + "nodeType": "Return", + "src": "5244:93:33" + } + ] + }, + "id": 4416, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "calcDueProtocolFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4394, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4387, + "mutability": "mutable", + "name": "invariantGrowthRatio", + "nodeType": "VariableDeclaration", + "scope": 4416, + "src": "4848:28:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4386, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4848:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4389, + "mutability": "mutable", + "name": "previousSupply", + "nodeType": "VariableDeclaration", + "scope": 4416, + "src": "4886:22:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4388, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4886:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4391, + "mutability": "mutable", + "name": "currentSupply", + "nodeType": "VariableDeclaration", + "scope": 4416, + "src": "4918:21:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4918:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4393, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 4416, + "src": "4949:33:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4949:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4838:150:33" + }, + "returnParameters": { + "id": 4397, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4396, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4416, + "src": "5012:7:33", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5012:7:33", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5011:9:33" + }, + "scope": 4417, + "src": "4810:534:33", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4418, + "src": "883:4463:33" + } + ], + "src": "688:4659:33" + }, + "id": 33 + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol", + "exportedSymbols": { + "ProtocolFeeCache": [ + 4691 + ] + }, + "id": 4692, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4419, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:34" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 4420, + "nodeType": "ImportDirective", + "scope": 4692, + "sourceUnit": 1012, + "src": "713:90:34", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "file": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "id": 4421, + "nodeType": "ImportDirective", + "scope": 4692, + "sourceUnit": 1283, + "src": "804:101:34", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol", + "id": 4422, + "nodeType": "ImportDirective", + "scope": 4692, + "sourceUnit": 9591, + "src": "907:78:34", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/RecoveryMode.sol", + "file": "../RecoveryMode.sol", + "id": 4423, + "nodeType": "ImportDirective", + "scope": 4692, + "sourceUnit": 4137, + "src": "987:29:34", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 4425, + "name": "RecoveryMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4136, + "src": "2188:12:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RecoveryMode_$4136", + "typeString": "contract RecoveryMode" + } + }, + "id": 4426, + "nodeType": "InheritanceSpecifier", + "src": "2188:12:34" + } + ], + "contractDependencies": [ + 451, + 1022, + 3955, + 4136, + 5117 + ], + "contractKind": "contract", + "documentation": { + "id": 4424, + "nodeType": "StructuredDocumentation", + "src": "1018:1131:34", + "text": " @dev The Vault does not provide the protocol swap fee percentage in swap hooks (as swaps don't typically need this\n value), so for swaps that need this value, we would have to to fetch it ourselves from the\n ProtocolFeePercentagesProvider. Additionally, other protocol fee types (such as Yield or AUM) can only be obtained\n by making said call.\n However, these values change so rarely that it doesn't make sense to perform the required calls to get the current\n values in every single user interaction. Instead, we keep a local copy that can be permissionlessly updated by anyone\n with the real value. We also pack these values together, performing a single storage read to get them all.\n When initialized with a special sentinel value, the swap fee is delegated, meaning the mutable protocol swap fee\n cache is set to the current value stored in the ProtocolFeePercentagesProvider, and can be updated by anyone with a\n call to `updateProtocolFeePercentageCache`. Any other value means the protocol swap fee is fixed, so it is instead\n stored in the immutable `_fixedProtocolSwapFeePercentage`." + }, + "fullyImplemented": false, + "id": 4691, + "linearizedBaseContracts": [ + 4691, + 4136, + 3955, + 5117, + 1022, + 451 + ], + "name": "ProtocolFeeCache", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4429, + "libraryName": { + "id": 4427, + "name": "SafeCast", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9590, + "src": "2213:8:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeCast_$9590", + "typeString": "library SafeCast" + } + }, + "nodeType": "UsingForDirective", + "src": "2207:27:34", + "typeName": { + "id": 4428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2226:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 4431, + "mutability": "immutable", + "name": "_protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 4691, + "src": "2240:70:34", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 4430, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "2240:31:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "private" + }, + { + "canonicalName": "ProtocolFeeCache.FeeTypeCache", + "id": 4438, + "members": [ + { + "constant": false, + "id": 4433, + "mutability": "mutable", + "name": "swapFee", + "nodeType": "VariableDeclaration", + "scope": 4438, + "src": "2489:14:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4432, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2489:6:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4435, + "mutability": "mutable", + "name": "yieldFee", + "nodeType": "VariableDeclaration", + "scope": 4438, + "src": "2513:15:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4434, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2513:6:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4437, + "mutability": "mutable", + "name": "aumFee", + "nodeType": "VariableDeclaration", + "scope": 4438, + "src": "2538:13:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 4436, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2538:6:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "name": "FeeTypeCache", + "nodeType": "StructDefinition", + "scope": 4691, + "src": "2459:99:34", + "visibility": "public" + }, + { + "constant": false, + "id": 4440, + "mutability": "mutable", + "name": "_cache", + "nodeType": "VariableDeclaration", + "scope": 4691, + "src": "2564:27:34", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache" + }, + "typeName": { + "id": 4439, + "name": "FeeTypeCache", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4438, + "src": "2564:12:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage_ptr", + "typeString": "struct ProtocolFeeCache.FeeTypeCache" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 4446, + "name": "ProtocolFeePercentageCacheUpdated", + "nodeType": "EventDefinition", + "parameters": { + "id": 4445, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4442, + "indexed": true, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 4446, + "src": "2638:23:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4441, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2638:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4444, + "indexed": false, + "mutability": "mutable", + "name": "protocolFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 4446, + "src": "2663:29:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4443, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2663:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2637:56:34" + }, + "src": "2598:96:34" + }, + { + "constant": true, + "functionSelector": "ddf4627b", + "id": 4453, + "mutability": "constant", + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "nodeType": "VariableDeclaration", + "scope": 4691, + "src": "2859:80:34", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4447, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2859:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 4450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2927:7:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 4449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2927:7:34", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 4448, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "2922:4:34", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4451, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2922:13:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 4452, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "2922:17:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "constant": false, + "id": 4455, + "mutability": "immutable", + "name": "_delegatedProtocolSwapFees", + "nodeType": "VariableDeclaration", + "scope": 4691, + "src": "2946:49:34", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4454, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2946:4:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4457, + "mutability": "immutable", + "name": "_fixedProtocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 4691, + "src": "3063:57:34", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4456, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3063:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 4525, + "nodeType": "Block", + "src": "3227:1542:34", + "statements": [ + { + "assignments": [ + 4465 + ], + "declarations": [ + { + "constant": false, + "id": 4465, + "mutability": "mutable", + "name": "delegatedProtocolSwapFees", + "nodeType": "VariableDeclaration", + "scope": 4525, + "src": "3385:30:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4464, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3385:4:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 4469, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4466, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4461, + "src": "3418:25:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 4467, + "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4453, + "src": "3447:36:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3418:65:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3385:98:34" + }, + { + "expression": { + "id": 4472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4470, + "name": "_delegatedProtocolSwapFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4455, + "src": "3494:26:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4471, + "name": "delegatedProtocolSwapFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4465, + "src": "3523:25:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3494:54:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4473, + "nodeType": "ExpressionStatement", + "src": "3494:54:34" + }, + { + "expression": { + "id": 4476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4474, + "name": "_protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4431, + "src": "3558:20:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4475, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4459, + "src": "3581:19:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "src": "3558:42:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "id": 4477, + "nodeType": "ExpressionStatement", + "src": "3558:42:34" + }, + { + "expression": { + "arguments": [ + { + "id": 4479, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4459, + "src": "3635:19:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 4480, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "3656:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "YIELD", + "nodeType": "MemberAccess", + "referencedDeclaration": 1278, + "src": "3656:21:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4478, + "name": "_updateProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4690, + "src": "3611:23:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IProtocolFeePercentagesProvider_$1269_$_t_uint256_$returns$__$", + "typeString": "function (contract IProtocolFeePercentagesProvider,uint256)" + } + }, + "id": 4482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3611:67:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4483, + "nodeType": "ExpressionStatement", + "src": "3611:67:34" + }, + { + "expression": { + "arguments": [ + { + "id": 4485, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4459, + "src": "3712:19:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 4486, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "3733:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AUM", + "nodeType": "MemberAccess", + "referencedDeclaration": 1281, + "src": "3733:19:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4484, + "name": "_updateProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4690, + "src": "3688:23:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IProtocolFeePercentagesProvider_$1269_$_t_uint256_$returns$__$", + "typeString": "function (contract IProtocolFeePercentagesProvider,uint256)" + } + }, + "id": 4488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3688:65:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4489, + "nodeType": "ExpressionStatement", + "src": "3688:65:34" + }, + { + "condition": { + "id": 4490, + "name": "delegatedProtocolSwapFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4465, + "src": "3768:25:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4516, + "nodeType": "Block", + "src": "3892:648:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4499, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4461, + "src": "3932:25:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [ + { + "expression": { + "id": 4502, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "4009:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "4009:20:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4500, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4459, + "src": "3961:19:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "id": 4501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeTypeMaximumPercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1260, + "src": "3961:47:34", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view external returns (uint256)" + } + }, + "id": 4504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3961:69:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3932:98:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4506, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4048:6:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP_FEE_PERCENTAGE_TOO_HIGH", + "nodeType": "MemberAccess", + "referencedDeclaration": 995, + "src": "4048:35:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4498, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "3906:8:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3906:191:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4509, + "nodeType": "ExpressionStatement", + "src": "3906:191:34" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 4511, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "4481:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "4481:20:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4513, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4461, + "src": "4503:25:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4510, + "name": "ProtocolFeePercentageCacheUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4446, + "src": "4447:33:34", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 4514, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4447:82:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4515, + "nodeType": "EmitStatement", + "src": "4442:87:34" + } + ] + }, + "id": 4517, + "nodeType": "IfStatement", + "src": "3764:776:34", + "trueBody": { + "id": 4497, + "nodeType": "Block", + "src": "3795:91:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4492, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4459, + "src": "3833:19:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 4493, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "3854:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "3854:20:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4491, + "name": "_updateProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4690, + "src": "3809:23:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IProtocolFeePercentagesProvider_$1269_$_t_uint256_$returns$__$", + "typeString": "function (contract IProtocolFeePercentagesProvider,uint256)" + } + }, + "id": 4495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3809:66:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4496, + "nodeType": "ExpressionStatement", + "src": "3809:66:34" + } + ] + } + }, + { + "expression": { + "id": 4523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4518, + "name": "_fixedProtocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4457, + "src": "4671:31:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "id": 4519, + "name": "delegatedProtocolSwapFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4465, + "src": "4705:25:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 4521, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4461, + "src": "4737:25:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "4705:57:34", + "trueExpression": { + "hexValue": "30", + "id": 4520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4733:1:34", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4671:91:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4524, + "nodeType": "ExpressionStatement", + "src": "4671:91:34" + } + ] + }, + "id": 4526, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4462, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4459, + "mutability": "mutable", + "name": "protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 4526, + "src": "3139:51:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 4458, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "3139:31:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4461, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 4526, + "src": "3192:33:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4460, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3192:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3138:88:34" + }, + "returnParameters": { + "id": 4463, + "nodeType": "ParameterList", + "parameters": [], + "src": "3227:0:34" + }, + "scope": 4691, + "src": "3127:1642:34", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4577, + "nodeType": "Block", + "src": "5137:474:34", + "statements": [ + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4534, + "name": "inRecoveryMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4012, + "src": "5151:14:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 4535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5151:16:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4539, + "nodeType": "IfStatement", + "src": "5147:55:34", + "trueBody": { + "id": 4538, + "nodeType": "Block", + "src": "5169:33:34", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 4536, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5190:1:34", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 4533, + "id": 4537, + "nodeType": "Return", + "src": "5183:8:34" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4540, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4529, + "src": "5216:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 4541, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "5227:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "5227:20:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5216:31:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4552, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4529, + "src": "5372:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 4553, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "5383:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "YIELD", + "nodeType": "MemberAccess", + "referencedDeclaration": 1278, + "src": "5383:21:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5372:32:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4560, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4529, + "src": "5463:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 4561, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "5474:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AUM", + "nodeType": "MemberAccess", + "referencedDeclaration": 1281, + "src": "5474:19:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5463:30:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4573, + "nodeType": "Block", + "src": "5546:59:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 4569, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "5568:6:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNHANDLED_FEE_TYPE", + "nodeType": "MemberAccess", + "referencedDeclaration": 905, + "src": "5568:25:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4568, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "5560:7:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 4571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5560:34:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4572, + "nodeType": "ExpressionStatement", + "src": "5560:34:34" + } + ] + }, + "id": 4574, + "nodeType": "IfStatement", + "src": "5459:146:34", + "trueBody": { + "id": 4567, + "nodeType": "Block", + "src": "5495:45:34", + "statements": [ + { + "expression": { + "expression": { + "id": 4564, + "name": "_cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4440, + "src": "5516:6:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache storage ref" + } + }, + "id": 4565, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "aumFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 4437, + "src": "5516:13:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 4533, + "id": 4566, + "nodeType": "Return", + "src": "5509:20:34" + } + ] + } + }, + "id": 4575, + "nodeType": "IfStatement", + "src": "5368:237:34", + "trueBody": { + "id": 4559, + "nodeType": "Block", + "src": "5406:47:34", + "statements": [ + { + "expression": { + "expression": { + "id": 4556, + "name": "_cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4440, + "src": "5427:6:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache storage ref" + } + }, + "id": 4557, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "yieldFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 4435, + "src": "5427:15:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 4533, + "id": 4558, + "nodeType": "Return", + "src": "5420:22:34" + } + ] + } + }, + "id": 4576, + "nodeType": "IfStatement", + "src": "5212:393:34", + "trueBody": { + "id": 4551, + "nodeType": "Block", + "src": "5249:113:34", + "statements": [ + { + "expression": { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4544, + "name": "getProtocolSwapFeeDelegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4622, + "src": "5270:28:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 4545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5270:30:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 4548, + "name": "_fixedProtocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4457, + "src": "5320:31:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5270:81:34", + "trueExpression": { + "expression": { + "id": 4546, + "name": "_cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4440, + "src": "5303:6:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache storage ref" + } + }, + "id": 4547, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "swapFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 4433, + "src": "5303:14:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4533, + "id": 4550, + "nodeType": "Return", + "src": "5263:88:34" + } + ] + } + } + ] + }, + "documentation": { + "id": 4527, + "nodeType": "StructuredDocumentation", + "src": "4775:271:34", + "text": " @dev Returns the cached protocol fee percentage. If `getProtocolSwapFeeDelegation()` is false, this value is\n immutable for swap fee queries. Alternatively, it will track the global fee percentage set in the\n ProtocolFeePercentagesProvider." + }, + "functionSelector": "70464016", + "id": 4578, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProtocolFeePercentageCache", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4530, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4529, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 4578, + "src": "5090:15:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4528, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5090:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5089:17:34" + }, + "returnParameters": { + "id": 4533, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4532, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4578, + "src": "5128:7:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4531, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5128:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5127:9:34" + }, + "scope": 4691, + "src": "5051:560:34", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4607, + "nodeType": "Block", + "src": "5866:341:34", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4582, + "name": "_beforeProtocolFeeCacheUpdate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4613, + "src": "5876:29:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 4583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5876:31:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4584, + "nodeType": "ExpressionStatement", + "src": "5876:31:34" + }, + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4585, + "name": "getProtocolSwapFeeDelegation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4622, + "src": "5922:28:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 4586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5922:30:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4594, + "nodeType": "IfStatement", + "src": "5918:128:34", + "trueBody": { + "id": 4593, + "nodeType": "Block", + "src": "5954:92:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4588, + "name": "_protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4431, + "src": "5992:20:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 4589, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "6014:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "6014:20:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4587, + "name": "_updateProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4690, + "src": "5968:23:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IProtocolFeePercentagesProvider_$1269_$_t_uint256_$returns$__$", + "typeString": "function (contract IProtocolFeePercentagesProvider,uint256)" + } + }, + "id": 4591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5968:67:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4592, + "nodeType": "ExpressionStatement", + "src": "5968:67:34" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 4596, + "name": "_protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4431, + "src": "6080:20:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 4597, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "6102:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "YIELD", + "nodeType": "MemberAccess", + "referencedDeclaration": 1278, + "src": "6102:21:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4595, + "name": "_updateProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4690, + "src": "6056:23:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IProtocolFeePercentagesProvider_$1269_$_t_uint256_$returns$__$", + "typeString": "function (contract IProtocolFeePercentagesProvider,uint256)" + } + }, + "id": 4599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6056:68:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4600, + "nodeType": "ExpressionStatement", + "src": "6056:68:34" + }, + { + "expression": { + "arguments": [ + { + "id": 4602, + "name": "_protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4431, + "src": "6158:20:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 4603, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "6180:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AUM", + "nodeType": "MemberAccess", + "referencedDeclaration": 1281, + "src": "6180:19:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4601, + "name": "_updateProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4690, + "src": "6134:23:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IProtocolFeePercentagesProvider_$1269_$_t_uint256_$returns$__$", + "typeString": "function (contract IProtocolFeePercentagesProvider,uint256)" + } + }, + "id": 4605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6134:66:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4606, + "nodeType": "ExpressionStatement", + "src": "6134:66:34" + } + ] + }, + "documentation": { + "id": 4579, + "nodeType": "StructuredDocumentation", + "src": "5617:191:34", + "text": " @dev Can be called by anyone to update the cached fee percentages (swap fee is only updated when delegated).\n Updates the cache to the latest value set by governance." + }, + "functionSelector": "0da0669c", + "id": 4608, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateProtocolFeePercentageCache", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4580, + "nodeType": "ParameterList", + "parameters": [], + "src": "5854:2:34" + }, + "returnParameters": { + "id": 4581, + "nodeType": "ParameterList", + "parameters": [], + "src": "5866:0:34" + }, + "scope": 4691, + "src": "5813:394:34", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4612, + "nodeType": "Block", + "src": "6586:2:34", + "statements": [] + }, + "documentation": { + "id": 4609, + "nodeType": "StructuredDocumentation", + "src": "6213:310:34", + "text": " @dev Override in derived contracts to perform some action before the cache is updated. This is typically relevant\n to Pools that incur protocol debt between operations. To avoid altering the amount due retroactively, this debt\n needs to be paid before the fee percentages change." + }, + "id": 4613, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeProtocolFeeCacheUpdate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4610, + "nodeType": "ParameterList", + "parameters": [], + "src": "6566:2:34" + }, + "returnParameters": { + "id": 4611, + "nodeType": "ParameterList", + "parameters": [], + "src": "6586:0:34" + }, + "scope": 4691, + "src": "6528:60:34", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 4621, + "nodeType": "Block", + "src": "6788:50:34", + "statements": [ + { + "expression": { + "id": 4619, + "name": "_delegatedProtocolSwapFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4455, + "src": "6805:26:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4618, + "id": 4620, + "nodeType": "Return", + "src": "6798:33:34" + } + ] + }, + "documentation": { + "id": 4614, + "nodeType": "StructuredDocumentation", + "src": "6594:122:34", + "text": " @dev Returns whether this Pool tracks protocol swap fee changes in the IProtocolFeePercentagesProvider." + }, + "functionSelector": "15b0015b", + "id": 4622, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProtocolSwapFeeDelegation", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4615, + "nodeType": "ParameterList", + "parameters": [], + "src": "6758:2:34" + }, + "returnParameters": { + "id": 4618, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4617, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4622, + "src": "6782:4:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4616, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6782:4:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6781:6:34" + }, + "scope": 4691, + "src": "6721:117:34", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4689, + "nodeType": "Block", + "src": "6955:554:34", + "statements": [ + { + "assignments": [ + 4630 + ], + "declarations": [ + { + "constant": false, + "id": 4630, + "mutability": "mutable", + "name": "currentValue", + "nodeType": "VariableDeclaration", + "scope": 4689, + "src": "6965:20:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6965:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 4635, + "initialValue": { + "arguments": [ + { + "id": 4633, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4626, + "src": "7029:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4631, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4624, + "src": "6988:19:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "id": 4632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getFeeTypePercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 1252, + "src": "6988:40:34", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view external returns (uint256)" + } + }, + "id": 4634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6988:49:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6965:72:34" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4636, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4626, + "src": "7052:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 4637, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "7063:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "7063:20:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7052:31:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4649, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4626, + "src": "7160:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 4650, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "7171:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "YIELD", + "nodeType": "MemberAccess", + "referencedDeclaration": 1278, + "src": "7171:21:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7160:32:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4662, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4626, + "src": "7270:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 4663, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "7281:15:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 4664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AUM", + "nodeType": "MemberAccess", + "referencedDeclaration": 1281, + "src": "7281:19:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7270:30:34", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4680, + "nodeType": "Block", + "src": "7372:59:34", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 4676, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7394:6:34", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNHANDLED_FEE_TYPE", + "nodeType": "MemberAccess", + "referencedDeclaration": 905, + "src": "7394:25:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4675, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "7386:7:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 4678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7386:34:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4679, + "nodeType": "ExpressionStatement", + "src": "7386:34:34" + } + ] + }, + "id": 4681, + "nodeType": "IfStatement", + "src": "7266:165:34", + "trueBody": { + "id": 4674, + "nodeType": "Block", + "src": "7302:64:34", + "statements": [ + { + "expression": { + "id": 4672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4666, + "name": "_cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4440, + "src": "7316:6:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache storage ref" + } + }, + "id": 4668, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "aumFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 4437, + "src": "7316:13:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 4669, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "7332:12:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUint64", + "nodeType": "MemberAccess", + "referencedDeclaration": 9589, + "src": "7332:21:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 4671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7332:23:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7316:39:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 4673, + "nodeType": "ExpressionStatement", + "src": "7316:39:34" + } + ] + } + }, + "id": 4682, + "nodeType": "IfStatement", + "src": "7156:275:34", + "trueBody": { + "id": 4661, + "nodeType": "Block", + "src": "7194:66:34", + "statements": [ + { + "expression": { + "id": 4659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4653, + "name": "_cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4440, + "src": "7208:6:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache storage ref" + } + }, + "id": 4655, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "yieldFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 4435, + "src": "7208:15:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 4656, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "7226:12:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4657, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUint64", + "nodeType": "MemberAccess", + "referencedDeclaration": 9589, + "src": "7226:21:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 4658, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7226:23:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7208:41:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 4660, + "nodeType": "ExpressionStatement", + "src": "7208:41:34" + } + ] + } + }, + "id": 4683, + "nodeType": "IfStatement", + "src": "7048:383:34", + "trueBody": { + "id": 4648, + "nodeType": "Block", + "src": "7085:65:34", + "statements": [ + { + "expression": { + "id": 4646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 4640, + "name": "_cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4440, + "src": "7099:6:34", + "typeDescriptions": { + "typeIdentifier": "t_struct$_FeeTypeCache_$4438_storage", + "typeString": "struct ProtocolFeeCache.FeeTypeCache storage ref" + } + }, + "id": 4642, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "swapFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 4433, + "src": "7099:14:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 4643, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "7116:12:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUint64", + "nodeType": "MemberAccess", + "referencedDeclaration": 9589, + "src": "7116:21:34", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 4645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7116:23:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7099:40:34", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 4647, + "nodeType": "ExpressionStatement", + "src": "7099:40:34" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 4685, + "name": "feeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4626, + "src": "7480:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4686, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4630, + "src": "7489:12:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4684, + "name": "ProtocolFeePercentageCacheUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4446, + "src": "7446:33:34", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 4687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7446:56:34", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4688, + "nodeType": "EmitStatement", + "src": "7441:61:34" + } + ] + }, + "id": 4690, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateProtocolFeeCache", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4627, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4624, + "mutability": "mutable", + "name": "protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 4690, + "src": "6877:51:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 4623, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "6877:31:34", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4626, + "mutability": "mutable", + "name": "feeType", + "nodeType": "VariableDeclaration", + "scope": 4690, + "src": "6930:15:34", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6930:7:34", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6876:70:34" + }, + "returnParameters": { + "id": 4628, + "nodeType": "ParameterList", + "parameters": [], + "src": "6955:0:34" + }, + "scope": 4691, + "src": "6844:665:34", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + } + ], + "scope": 4692, + "src": "2150:5361:34" + } + ], + "src": "688:6824:34" + }, + "id": 34 + }, + "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFees.sol", + "exportedSymbols": { + "ProtocolFees": [ + 4722 + ] + }, + "id": 4723, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4693, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:35" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 4694, + "nodeType": "ImportDirective", + "scope": 4723, + "sourceUnit": 7233, + "src": "713:72:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 4695, + "nodeType": "ImportDirective", + "scope": 4723, + "sourceUnit": 8843, + "src": "786:66:35", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 4722, + "linearizedBaseContracts": [ + 4722 + ], + "name": "ProtocolFees", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4698, + "libraryName": { + "id": 4696, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "887:10:35", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "881:29:35", + "typeName": { + "id": 4697, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "902:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "body": { + "id": 4720, + "nodeType": "Block", + "src": "1623:466:35", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4712, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4701, + "src": "2006:11:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4713, + "name": "poolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4703, + "src": "2019:23:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4710, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "1997:4:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 4711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "1997:8:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1997:46:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 4715, + "name": "poolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4703, + "src": "2045:23:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "complement", + "nodeType": "MemberAccess", + "referencedDeclaration": 7231, + "src": "2045:34:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 4717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2045:36:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4708, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "1984:4:35", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 4709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "1984:12:35", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 4718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1984:98:35", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4707, + "id": 4719, + "nodeType": "Return", + "src": "1977:105:35" + } + ] + }, + "documentation": { + "id": 4699, + "nodeType": "StructuredDocumentation", + "src": "916:549:35", + "text": " @dev Calculates the amount of BPT necessary to give ownership of a given percentage of the Pool.\n Note that this function reverts if `poolPercentage` >= 100%, it's expected that the caller will enforce this.\n @param totalSupply - The total supply of the pool prior to minting BPT.\n @param poolOwnershipPercentage - The desired ownership percentage of the pool to have as a result of minting BPT.\n @return bptAmount - The amount of BPT to mint such that it is `poolPercentage` of the resultant total supply." + }, + "id": 4721, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "bptForPoolOwnershipPercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4704, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4701, + "mutability": "mutable", + "name": "totalSupply", + "nodeType": "VariableDeclaration", + "scope": 4721, + "src": "1509:19:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1509:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4703, + "mutability": "mutable", + "name": "poolOwnershipPercentage", + "nodeType": "VariableDeclaration", + "scope": 4721, + "src": "1530:31:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4702, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1530:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1508:54:35" + }, + "returnParameters": { + "id": 4707, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4706, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4721, + "src": "1610:7:35", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4705, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1610:7:35", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1609:9:35" + }, + "scope": 4722, + "src": "1470:619:35", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4723, + "src": "854:1237:35" + } + ], + "src": "688:1404:35" + }, + "id": 35 + }, + "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol", + "exportedSymbols": { + "PriceRateCache": [ + 4961 + ] + }, + "id": 4962, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4724, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:36" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 4725, + "nodeType": "ImportDirective", + "scope": 4962, + "sourceUnit": 1012, + "src": "713:90:36", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "id": 4726, + "nodeType": "ImportDirective", + "scope": 4962, + "sourceUnit": 6811, + "src": "805:74:36", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 4727, + "nodeType": "StructuredDocumentation", + "src": "881:647:36", + "text": " Price rate caches are used to avoid querying the price rate for a token every time we need to work with it. It is\n useful for slow changing rates, such as those that arise from interest-bearing tokens (e.g. waDAI into DAI).\n The cache data is packed into a single bytes32 value with the following structure:\n [ 32 bits | 32 bits | 96 bits | 96 bits ]\n [ expires | duration | old rate | current rate ]\n |MSB LSB|\n 'rate' is an 18 decimal fixed point number, supporting rates of up to ~3e10. 'expires' is a Unix timestamp, and\n 'duration' is expressed in seconds." + }, + "fullyImplemented": true, + "id": 4961, + "linearizedBaseContracts": [ + 4961 + ], + "name": "PriceRateCache", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 4730, + "libraryName": { + "id": 4728, + "name": "WordCodec", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6810, + "src": "1564:9:36", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WordCodec_$6810", + "typeString": "library WordCodec" + } + }, + "nodeType": "UsingForDirective", + "src": "1558:28:36", + "typeName": { + "id": 4729, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1578:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "constant": true, + "id": 4733, + "mutability": "constant", + "name": "_CURRENT_PRICE_RATE_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 4961, + "src": "1592:55:36", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4731, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1592:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "30", + "id": 4732, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1646:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4736, + "mutability": "constant", + "name": "_OLD_PRICE_RATE_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 4961, + "src": "1653:52:36", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1653:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3936", + "id": 4735, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1703:2:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_96_by_1", + "typeString": "int_const 96" + }, + "value": "96" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4739, + "mutability": "constant", + "name": "_PRICE_RATE_CACHE_DURATION_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 4961, + "src": "1711:64:36", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4737, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1711:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313932", + "id": 4738, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1772:3:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_192_by_1", + "typeString": "int_const 192" + }, + "value": "192" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4742, + "mutability": "constant", + "name": "_PRICE_RATE_CACHE_EXPIRES_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 4961, + "src": "1781:63:36", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4740, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1781:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323234", + "id": 4741, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1841:3:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_224_by_1", + "typeString": "int_const 224" + }, + "value": "224" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4745, + "mutability": "constant", + "name": "_RATE_BIT_LENGTH", + "nodeType": "VariableDeclaration", + "scope": 4961, + "src": "1851:46:36", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1851:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3936", + "id": 4744, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1895:2:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_96_by_1", + "typeString": "int_const 96" + }, + "value": "96" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 4748, + "mutability": "constant", + "name": "_DURATION_BIT_LENGTH", + "nodeType": "VariableDeclaration", + "scope": 4961, + "src": "1903:50:36", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4746, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1903:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3332", + "id": 4747, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1951:2:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "visibility": "private" + }, + { + "body": { + "id": 4762, + "nodeType": "Block", + "src": "2109:86:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4758, + "name": "_CURRENT_PRICE_RATE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4733, + "src": "2143:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4759, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "2171:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4756, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4751, + "src": "2126:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "2126:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 4760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2126:62:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4755, + "id": 4761, + "nodeType": "Return", + "src": "2119:69:36" + } + ] + }, + "documentation": { + "id": 4749, + "nodeType": "StructuredDocumentation", + "src": "1960:73:36", + "text": " @dev Returns the current rate in the price rate cache." + }, + "id": 4763, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCurrentRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4752, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4751, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4763, + "src": "2062:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4750, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2062:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2061:15:36" + }, + "returnParameters": { + "id": 4755, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4754, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4763, + "src": "2100:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2100:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2099:9:36" + }, + "scope": 4961, + "src": "2038:157:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4777, + "nodeType": "Block", + "src": "2342:82:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4773, + "name": "_OLD_PRICE_RATE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4736, + "src": "2376:22:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4774, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "2400:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4771, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4766, + "src": "2359:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "2359:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 4775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2359:58:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4770, + "id": 4776, + "nodeType": "Return", + "src": "2352:65:36" + } + ] + }, + "documentation": { + "id": 4764, + "nodeType": "StructuredDocumentation", + "src": "2201:69:36", + "text": " @dev Returns the old rate in the price rate cache." + }, + "id": 4778, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getOldRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4767, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4766, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4778, + "src": "2295:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4765, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2295:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2294:15:36" + }, + "returnParameters": { + "id": 4770, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4769, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4778, + "src": "2333:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4768, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2333:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2332:9:36" + }, + "scope": 4961, + "src": "2275:149:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4795, + "nodeType": "Block", + "src": "2569:105:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4789, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4781, + "src": "2618:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4788, + "name": "getCurrentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "2603:14:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 4790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2603:21:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4791, + "name": "_OLD_PRICE_RATE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4736, + "src": "2626:22:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4792, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "2650:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4786, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4781, + "src": "2586:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "2586:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2586:81:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4785, + "id": 4794, + "nodeType": "Return", + "src": "2579:88:36" + } + ] + }, + "documentation": { + "id": 4779, + "nodeType": "StructuredDocumentation", + "src": "2430:64:36", + "text": " @dev Copies the current rate to the old rate." + }, + "id": 4796, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateOldRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4782, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4781, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4796, + "src": "2522:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4780, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2522:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2521:15:36" + }, + "returnParameters": { + "id": 4785, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4784, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4796, + "src": "2560:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4783, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2560:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2559:9:36" + }, + "scope": 4961, + "src": "2499:175:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4810, + "nodeType": "Block", + "src": "2820:97:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4806, + "name": "_PRICE_RATE_CACHE_DURATION_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4739, + "src": "2854:33:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4807, + "name": "_DURATION_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4748, + "src": "2889:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4804, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4799, + "src": "2837:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "2837:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 4808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2837:73:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 4803, + "id": 4809, + "nodeType": "Return", + "src": "2830:80:36" + } + ] + }, + "documentation": { + "id": 4797, + "nodeType": "StructuredDocumentation", + "src": "2680:67:36", + "text": " @dev Returns the duration of a price rate cache." + }, + "id": 4811, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDuration", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4800, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4799, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4811, + "src": "2773:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4798, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2773:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2772:15:36" + }, + "returnParameters": { + "id": 4803, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4802, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4811, + "src": "2811:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4801, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2811:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2810:9:36" + }, + "scope": 4961, + "src": "2752:165:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4835, + "nodeType": "Block", + "src": "3111:138:36", + "statements": [ + { + "expression": { + "id": 4825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4821, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4817, + "src": "3121:8:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4823, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4814, + "src": "3144:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4822, + "name": "getDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4811, + "src": "3132:11:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 4824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3132:18:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3121:29:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4826, + "nodeType": "ExpressionStatement", + "src": "3121:29:36" + }, + { + "expression": { + "id": 4833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4827, + "name": "expires", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4819, + "src": "3160:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4830, + "name": "_PRICE_RATE_CACHE_EXPIRES_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4742, + "src": "3187:32:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4831, + "name": "_DURATION_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4748, + "src": "3221:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4828, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4814, + "src": "3170:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "3170:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 4832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3170:72:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3160:82:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4834, + "nodeType": "ExpressionStatement", + "src": "3160:82:36" + } + ] + }, + "documentation": { + "id": 4812, + "nodeType": "StructuredDocumentation", + "src": "2923:87:36", + "text": " @dev Returns the duration and expiration time of a price rate cache." + }, + "id": 4836, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTimestamps", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4815, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4814, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4836, + "src": "3038:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4813, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3038:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3037:15:36" + }, + "returnParameters": { + "id": 4820, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4817, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 4836, + "src": "3076:16:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4816, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3076:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4819, + "mutability": "mutable", + "name": "expires", + "nodeType": "VariableDeclaration", + "scope": 4836, + "src": "3094:15:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4818, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3094:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3075:35:36" + }, + "scope": 4961, + "src": "3015:234:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4878, + "nodeType": "Block", + "src": "3560:450:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4849, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4841, + "src": "3579:4:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "id": 4850, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "3587:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3579:24:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4852, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3607:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3579:29:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4854, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "3610:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PRICE_RATE_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 701, + "src": "3610:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4848, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "3570:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4856, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3570:67:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4857, + "nodeType": "ExpressionStatement", + "src": "3570:67:36" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4870, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3920:5:36", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 4871, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3920:15:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 4872, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4843, + "src": "3938:8:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3920:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4874, + "name": "_PRICE_RATE_CACHE_EXPIRES_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4742, + "src": "3948:32:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4875, + "name": "_DURATION_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4748, + "src": "3982:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 4865, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4843, + "src": "3825:8:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4866, + "name": "_PRICE_RATE_CACHE_DURATION_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4739, + "src": "3835:33:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4867, + "name": "_DURATION_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4748, + "src": "3870:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 4860, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4841, + "src": "3745:4:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4861, + "name": "_CURRENT_PRICE_RATE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4733, + "src": "3751:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4862, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "3779:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4858, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4839, + "src": "3711:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "3711:33:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3711:85:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "3711:113:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3711:180:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "3711:208:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3711:292:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4847, + "id": 4877, + "nodeType": "Return", + "src": "3692:311:36" + } + ] + }, + "documentation": { + "id": 4837, + "nodeType": "StructuredDocumentation", + "src": "3255:160:36", + "text": " @dev Encodes rate and duration into a price rate cache. The expiration time is computed automatically, counting\n from the current time." + }, + "id": 4879, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateRateAndDuration", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4844, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4839, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4879, + "src": "3460:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4838, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3460:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4841, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 4879, + "src": "3483:12:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4840, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3483:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4843, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 4879, + "src": "3505:16:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4842, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3505:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3450:77:36" + }, + "returnParameters": { + "id": 4847, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4846, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4879, + "src": "3551:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4845, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3551:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3550:9:36" + }, + "scope": 4961, + "src": "3420:590:36", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4906, + "nodeType": "Block", + "src": "4179:170:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4892, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4890, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4884, + "src": "4198:4:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "id": 4891, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "4206:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4198:24:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4893, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4226:1:36", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4198:29:36", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 4895, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4229:6:36", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 4896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PRICE_RATE_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 701, + "src": "4229:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4889, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4189:8:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 4897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4189:67:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4898, + "nodeType": "ExpressionStatement", + "src": "4189:67:36" + }, + { + "expression": { + "arguments": [ + { + "id": 4901, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4884, + "src": "4291:4:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4902, + "name": "_CURRENT_PRICE_RATE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4733, + "src": "4297:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4903, + "name": "_RATE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4745, + "src": "4325:16:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4899, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4882, + "src": "4274:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4900, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "4274:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4274:68:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4888, + "id": 4905, + "nodeType": "Return", + "src": "4267:75:36" + } + ] + }, + "documentation": { + "id": 4880, + "nodeType": "StructuredDocumentation", + "src": "4016:70:36", + "text": " @dev Update the current rate in a price rate cache." + }, + "id": 4907, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateCurrentRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4885, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4882, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4907, + "src": "4118:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4881, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4118:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4884, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 4907, + "src": "4133:12:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4883, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4133:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4117:29:36" + }, + "returnParameters": { + "id": 4888, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4887, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4907, + "src": "4170:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4886, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4170:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4169:9:36" + }, + "scope": 4961, + "src": "4091:258:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4932, + "nodeType": "Block", + "src": "4532:276:36", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4924, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4673:5:36", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 4925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4673:15:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 4926, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4912, + "src": "4691:8:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4673:26:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4928, + "name": "_PRICE_RATE_CACHE_EXPIRES_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4742, + "src": "4717:32:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4929, + "name": "_DURATION_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4748, + "src": "4767:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 4919, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4912, + "src": "4578:8:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4920, + "name": "_PRICE_RATE_CACHE_DURATION_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4739, + "src": "4588:33:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4921, + "name": "_DURATION_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4748, + "src": "4623:20:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 4917, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4910, + "src": "4561:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "4561:16:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4561:83:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 4923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6358, + "src": "4561:94:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 4930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4561:240:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 4916, + "id": 4931, + "nodeType": "Return", + "src": "4542:259:36" + } + ] + }, + "documentation": { + "id": 4908, + "nodeType": "StructuredDocumentation", + "src": "4355:83:36", + "text": " @dev Update the duration (and expiration) in a price rate cache." + }, + "id": 4933, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateDuration", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4913, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4910, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4933, + "src": "4467:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4909, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4467:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4912, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 4933, + "src": "4482:16:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4911, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4482:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4466:33:36" + }, + "returnParameters": { + "id": 4916, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4915, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 4933, + "src": "4523:7:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4914, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4523:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4522:9:36" + }, + "scope": 4961, + "src": "4443:365:36", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4959, + "nodeType": "Block", + "src": "5085:97:36", + "statements": [ + { + "expression": { + "id": 4949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4945, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4939, + "src": "5095:4:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4947, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4936, + "src": "5117:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4946, + "name": "getCurrentRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4763, + "src": "5102:14:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 4948, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5102:21:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5095:28:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 4950, + "nodeType": "ExpressionStatement", + "src": "5095:28:36" + }, + { + "expression": { + "id": 4957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 4951, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4941, + "src": "5134:8:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 4952, + "name": "expires", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4943, + "src": "5144:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 4953, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "5133:19:36", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4955, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4936, + "src": "5169:5:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4954, + "name": "getTimestamps", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4836, + "src": "5155:13:36", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (bytes32) pure returns (uint256,uint256)" + } + }, + "id": 4956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5155:20:36", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "src": "5133:42:36", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4958, + "nodeType": "ExpressionStatement", + "src": "5133:42:36" + } + ] + }, + "documentation": { + "id": 4934, + "nodeType": "StructuredDocumentation", + "src": "4814:89:36", + "text": " @dev Returns rate, duration and expiration time of a price rate cache." + }, + "id": 4960, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4937, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4936, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 4960, + "src": "4924:13:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4935, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4924:7:36", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4923:15:36" + }, + "returnParameters": { + "id": 4944, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4939, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 4960, + "src": "4999:12:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4938, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4999:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4941, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 4960, + "src": "5025:16:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4940, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5025:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4943, + "mutability": "mutable", + "name": "expires", + "nodeType": "VariableDeclaration", + "scope": 4960, + "src": "5055:15:36", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 4942, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5055:7:36", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4985:95:36" + }, + "scope": 4961, + "src": "4908:274:36", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 4962, + "src": "1529:3655:36" + } + ], + "src": "688:4497:36" + }, + "id": 36 + }, + "@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol", + "exportedSymbols": { + "MockFailureModes": [ + 5040 + ] + }, + "id": 5041, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4963, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:37" + }, + { + "id": 4964, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:37" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 4965, + "nodeType": "ImportDirective", + "scope": 5041, + "sourceUnit": 1012, + "src": "747:90:37", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 5040, + "linearizedBaseContracts": [ + 5040 + ], + "name": "MockFailureModes", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "MockFailureModes.FailureMode", + "id": 4968, + "members": [ + { + "id": 4966, + "name": "INVARIANT", + "nodeType": "EnumValue", + "src": "899:9:37" + }, + { + "id": 4967, + "name": "PRICE_RATE", + "nodeType": "EnumValue", + "src": "910:10:37" + } + ], + "name": "FailureMode", + "nodeType": "EnumDefinition", + "src": "880:42:37" + }, + { + "constant": false, + "id": 4972, + "mutability": "mutable", + "name": "_failureState", + "nodeType": "VariableDeclaration", + "scope": 5040, + "src": "980:50:37", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_bool_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => bool)" + }, + "typeName": { + "id": 4971, + "keyType": { + "id": 4969, + "name": "FailureMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4968, + "src": "988:11:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "nodeType": "Mapping", + "src": "980:28:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_bool_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => bool)" + }, + "valueType": { + "id": 4970, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1003:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 4976, + "mutability": "mutable", + "name": "_failureCode", + "nodeType": "VariableDeclaration", + "scope": 5040, + "src": "1094:52:37", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_uint256_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => uint256)" + }, + "typeName": { + "id": 4975, + "keyType": { + "id": 4973, + "name": "FailureMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4968, + "src": "1102:11:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "nodeType": "Mapping", + "src": "1094:31:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_uint256_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => uint256)" + }, + "valueType": { + "id": 4974, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1117:7:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "private" + }, + { + "body": { + "id": 4985, + "nodeType": "Block", + "src": "1201:50:37", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4981, + "name": "mode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4978, + "src": "1228:4:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + ], + "id": 4980, + "name": "_ensureNotFailed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5039, + "src": "1211:16:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_enum$_FailureMode_$4968_$returns$__$", + "typeString": "function (enum MockFailureModes.FailureMode) view" + } + }, + "id": 4982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1211:22:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4983, + "nodeType": "ExpressionStatement", + "src": "1211:22:37" + }, + { + "id": 4984, + "nodeType": "PlaceholderStatement", + "src": "1243:1:37" + } + ] + }, + "id": 4986, + "name": "whenNotInFailureMode", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 4979, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4978, + "mutability": "mutable", + "name": "mode", + "nodeType": "VariableDeclaration", + "scope": 4986, + "src": "1183:16:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + }, + "typeName": { + "id": 4977, + "name": "FailureMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4968, + "src": "1183:11:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "visibility": "internal" + } + ], + "src": "1182:18:37" + }, + "src": "1153:98:37", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 4999, + "nodeType": "Block", + "src": "1394:45:37", + "statements": [ + { + "expression": { + "id": 4997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 4993, + "name": "_failureState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4972, + "src": "1404:13:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_bool_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => bool)" + } + }, + "id": 4995, + "indexExpression": { + "id": 4994, + "name": "mode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4988, + "src": "1418:4:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1404:19:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4996, + "name": "failed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4990, + "src": "1426:6:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1404:28:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4998, + "nodeType": "ExpressionStatement", + "src": "1404:28:37" + } + ] + }, + "functionSelector": "1ea046c1", + "id": 5000, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setFailureMode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4991, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4988, + "mutability": "mutable", + "name": "mode", + "nodeType": "VariableDeclaration", + "scope": 5000, + "src": "1354:16:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + }, + "typeName": { + "id": 4987, + "name": "FailureMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4968, + "src": "1354:11:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4990, + "mutability": "mutable", + "name": "failed", + "nodeType": "VariableDeclaration", + "scope": 5000, + "src": "1372:11:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4989, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1372:4:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1353:31:37" + }, + "returnParameters": { + "id": 4992, + "nodeType": "ParameterList", + "parameters": [], + "src": "1394:0:37" + }, + "scope": 5040, + "src": "1330:109:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5013, + "nodeType": "Block", + "src": "1724:47:37", + "statements": [ + { + "expression": { + "id": 5011, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5007, + "name": "_failureCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4976, + "src": "1734:12:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_uint256_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => uint256)" + } + }, + "id": 5009, + "indexExpression": { + "id": 5008, + "name": "mode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5002, + "src": "1747:4:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1734:18:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5010, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5004, + "src": "1755:9:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1734:30:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5012, + "nodeType": "ExpressionStatement", + "src": "1734:30:37" + } + ] + }, + "functionSelector": "7b549244", + "id": 5014, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setFailureCode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5005, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5002, + "mutability": "mutable", + "name": "mode", + "nodeType": "VariableDeclaration", + "scope": 5014, + "src": "1678:16:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + }, + "typeName": { + "id": 5001, + "name": "FailureMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4968, + "src": "1678:11:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5004, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 5014, + "src": "1696:17:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5003, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1696:7:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1677:37:37" + }, + "returnParameters": { + "id": 5006, + "nodeType": "ParameterList", + "parameters": [], + "src": "1724:0:37" + }, + "scope": 5040, + "src": "1654:117:37", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 5038, + "nodeType": "Block", + "src": "1910:144:37", + "statements": [ + { + "condition": { + "baseExpression": { + "id": 5019, + "name": "_failureState", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4972, + "src": "1924:13:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_bool_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => bool)" + } + }, + "id": 5021, + "indexExpression": { + "id": 5020, + "name": "mode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5016, + "src": "1938:4:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1924:19:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5037, + "nodeType": "IfStatement", + "src": "1920:128:37", + "trueBody": { + "id": 5036, + "nodeType": "Block", + "src": "1945:103:37", + "statements": [ + { + "expression": { + "arguments": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 5023, + "name": "_failureCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4976, + "src": "1967:12:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_uint256_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => uint256)" + } + }, + "id": 5025, + "indexExpression": { + "id": 5024, + "name": "mode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5016, + "src": "1980:4:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1967:18:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 5026, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1989:1:37", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1967:23:37", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "baseExpression": { + "id": 5030, + "name": "_failureCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4976, + "src": "2018:12:37", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_enum$_FailureMode_$4968_$_t_uint256_$", + "typeString": "mapping(enum MockFailureModes.FailureMode => uint256)" + } + }, + "id": 5032, + "indexExpression": { + "id": 5031, + "name": "mode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5016, + "src": "2031:4:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2018:18:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1967:69:37", + "trueExpression": { + "expression": { + "id": 5028, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1993:6:37", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INDUCED_FAILURE", + "nodeType": "MemberAccess", + "referencedDeclaration": 893, + "src": "1993:22:37", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5022, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "1959:7:37", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 5034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1959:78:37", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5035, + "nodeType": "ExpressionStatement", + "src": "1959:78:37" + } + ] + } + } + ] + }, + "id": 5039, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureNotFailed", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5017, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5016, + "mutability": "mutable", + "name": "mode", + "nodeType": "VariableDeclaration", + "scope": 5039, + "src": "1879:16:37", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + }, + "typeName": { + "id": 5015, + "name": "FailureMode", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4968, + "src": "1879:11:37", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + }, + "visibility": "internal" + } + ], + "src": "1878:18:37" + }, + "returnParameters": { + "id": 5018, + "nodeType": "ParameterList", + "parameters": [], + "src": "1910:0:37" + }, + "scope": 5040, + "src": "1853:201:37", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 5041, + "src": "839:1217:37" + } + ], + "src": "688:1369:37" + }, + "id": 37 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "exportedSymbols": { + "Authentication": [ + 5117 + ] + }, + "id": 5118, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5042, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:38" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 5043, + "nodeType": "ImportDirective", + "scope": 5118, + "sourceUnit": 1012, + "src": "713:90:38", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol", + "id": 5044, + "nodeType": "ImportDirective", + "scope": 5118, + "sourceUnit": 1023, + "src": "804:91:38", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 5046, + "name": "IAuthentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1022, + "src": "1327:15:38", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthentication_$1022", + "typeString": "contract IAuthentication" + } + }, + "id": 5047, + "nodeType": "InheritanceSpecifier", + "src": "1327:15:38" + } + ], + "contractDependencies": [ + 1022 + ], + "contractKind": "contract", + "documentation": { + "id": 5045, + "nodeType": "StructuredDocumentation", + "src": "897:393:38", + "text": " @dev Building block for performing access control on external functions.\n This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied\n to external functions to only make them callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic." + }, + "fullyImplemented": false, + "id": 5117, + "linearizedBaseContracts": [ + 5117, + 1022 + ], + "name": "Authentication", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 5049, + "mutability": "immutable", + "name": "_actionIdDisambiguator", + "nodeType": "VariableDeclaration", + "scope": 5117, + "src": "1349:48:38", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5048, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1349:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 5059, + "nodeType": "Block", + "src": "2039:63:38", + "statements": [ + { + "expression": { + "id": 5057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5055, + "name": "_actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5049, + "src": "2049:22:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5056, + "name": "actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5052, + "src": "2074:21:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2049:46:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 5058, + "nodeType": "ExpressionStatement", + "src": "2049:46:38" + } + ] + }, + "documentation": { + "id": 5050, + "nodeType": "StructuredDocumentation", + "src": "1404:587:38", + "text": " @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead." + }, + "id": 5060, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5053, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5052, + "mutability": "mutable", + "name": "actionIdDisambiguator", + "nodeType": "VariableDeclaration", + "scope": 5060, + "src": "2008:29:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5051, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2008:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2007:31:38" + }, + "returnParameters": { + "id": 5054, + "nodeType": "ParameterList", + "parameters": [], + "src": "2039:0:38" + }, + "scope": 5117, + "src": "1996:106:38", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5067, + "nodeType": "Block", + "src": "2266:49:38", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5063, + "name": "_authenticateCaller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5090, + "src": "2276:19:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 5064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2276:21:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5065, + "nodeType": "ExpressionStatement", + "src": "2276:21:38" + }, + { + "id": 5066, + "nodeType": "PlaceholderStatement", + "src": "2307:1:38" + } + ] + }, + "documentation": { + "id": 5061, + "nodeType": "StructuredDocumentation", + "src": "2108:129:38", + "text": " @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions." + }, + "id": 5068, + "name": "authenticate", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 5062, + "nodeType": "ParameterList", + "parameters": [], + "src": "2263:2:38" + }, + "src": "2242:73:38", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5089, + "nodeType": "Block", + "src": "2465:136:38", + "statements": [ + { + "assignments": [ + 5073 + ], + "declarations": [ + { + "constant": false, + "id": 5073, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 5089, + "src": "2475:16:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5072, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2475:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5078, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 5075, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2506:3:38", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sig", + "nodeType": "MemberAccess", + "src": "2506:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 5074, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5107, + "src": "2494:11:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 5077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2494:20:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2475:39:38" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5081, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5073, + "src": "2545:8:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "id": 5082, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "2555:3:38", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 5083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2555:10:38", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 5080, + "name": "_canPerform", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5116, + "src": "2533:11:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 5084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2533:33:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5085, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2568:6:38", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SENDER_NOT_ALLOWED", + "nodeType": "MemberAccess", + "referencedDeclaration": 779, + "src": "2568:25:38", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5079, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2524:8:38", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2524:70:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5088, + "nodeType": "ExpressionStatement", + "src": "2524:70:38" + } + ] + }, + "documentation": { + "id": 5069, + "nodeType": "StructuredDocumentation", + "src": "2321:94:38", + "text": " @dev Reverts unless the caller is allowed to call the entry point function." + }, + "id": 5090, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_authenticateCaller", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5070, + "nodeType": "ParameterList", + "parameters": [], + "src": "2448:2:38" + }, + "returnParameters": { + "id": 5071, + "nodeType": "ParameterList", + "parameters": [], + "src": "2465:0:38" + }, + "scope": 5117, + "src": "2420:181:38", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1021 + ], + "body": { + "id": 5106, + "nodeType": "Block", + "src": "2684:353:38", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5101, + "name": "_actionIdDisambiguator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5049, + "src": "2996:22:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5102, + "name": "selector", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5092, + "src": "3020:8:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "expression": { + "id": 5099, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2979:3:38", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 5100, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "2979:16:38", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 5103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2979:50:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5098, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2969:9:38", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 5104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2969:61:38", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5097, + "id": 5105, + "nodeType": "Return", + "src": "2962:68:38" + } + ] + }, + "functionSelector": "851c1bb3", + "id": 5107, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getActionId", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5094, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2657:8:38" + }, + "parameters": { + "id": 5093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5092, + "mutability": "mutable", + "name": "selector", + "nodeType": "VariableDeclaration", + "scope": 5107, + "src": "2628:15:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 5091, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "2628:6:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "2627:17:38" + }, + "returnParameters": { + "id": 5097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5096, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5107, + "src": "2675:7:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5095, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2675:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2674:9:38" + }, + "scope": 5117, + "src": "2607:430:38", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 5116, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5112, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5109, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 5116, + "src": "3064:16:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5108, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3064:7:38", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5111, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 5116, + "src": "3082:12:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5110, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3082:7:38", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "3063:32:38" + }, + "returnParameters": { + "id": 5115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5114, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5116, + "src": "3127:4:38", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5113, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3127:4:38", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3126:6:38" + }, + "scope": 5117, + "src": "3043:90:38", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 5118, + "src": "1291:1844:38" + } + ], + "src": "688:2448:38" + }, + "id": 38 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/BaseSplitCodeFactory.sol", + "exportedSymbols": { + "BaseSplitCodeFactory": [ + 5339 + ] + }, + "id": 5340, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5119, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:39" + }, + { + "id": 5120, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:39" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol", + "file": "./CodeDeployer.sol", + "id": 5121, + "nodeType": "ImportDirective", + "scope": 5340, + "sourceUnit": 5373, + "src": "747:28:39", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 5122, + "nodeType": "StructuredDocumentation", + "src": "777:294:39", + "text": " @dev Base factory for contracts whose creation code is so large that the factory cannot hold it. This happens when\n the contract's creation code grows close to 24kB.\n Note that this factory cannot help with contracts that have a *runtime* (deployed) bytecode larger than 24kB." + }, + "fullyImplemented": true, + "id": 5339, + "linearizedBaseContracts": [ + 5339 + ], + "name": "BaseSplitCodeFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 5124, + "mutability": "immutable", + "name": "_creationCodeContractA", + "nodeType": "VariableDeclaration", + "scope": 5339, + "src": "1529:48:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5123, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1529:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 5126, + "mutability": "immutable", + "name": "_creationCodeSizeA", + "nodeType": "VariableDeclaration", + "scope": 5339, + "src": "1583:44:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1583:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 5128, + "mutability": "immutable", + "name": "_creationCodeContractB", + "nodeType": "VariableDeclaration", + "scope": 5339, + "src": "1634:48:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5127, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1634:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 5130, + "mutability": "immutable", + "name": "_creationCodeSizeB", + "nodeType": "VariableDeclaration", + "scope": 5339, + "src": "1688:44:39", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5129, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1688:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 5187, + "nodeType": "Block", + "src": "1905:2624:39", + "statements": [ + { + "assignments": [ + 5137 + ], + "declarations": [ + { + "constant": false, + "id": 5137, + "mutability": "mutable", + "name": "creationCodeSize", + "nodeType": "VariableDeclaration", + "scope": 5187, + "src": "1915:24:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5136, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1915:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5140, + "initialValue": { + "expression": { + "id": 5138, + "name": "creationCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5133, + "src": "1942:12:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 5139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1942:19:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1915:46:39" + }, + { + "assignments": [ + 5142 + ], + "declarations": [ + { + "constant": false, + "id": 5142, + "mutability": "mutable", + "name": "creationCodeSizeA", + "nodeType": "VariableDeclaration", + "scope": 5187, + "src": "2289:25:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5141, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2289:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5146, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5143, + "name": "creationCodeSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5137, + "src": "2317:16:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "32", + "id": 5144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2336:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "2317:20:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2289:48:39" + }, + { + "expression": { + "id": 5149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5147, + "name": "_creationCodeSizeA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5126, + "src": "2347:18:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5148, + "name": "creationCodeSizeA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5142, + "src": "2368:17:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2347:38:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5150, + "nodeType": "ExpressionStatement", + "src": "2347:38:39" + }, + { + "assignments": [ + 5152 + ], + "declarations": [ + { + "constant": false, + "id": 5152, + "mutability": "mutable", + "name": "creationCodeSizeB", + "nodeType": "VariableDeclaration", + "scope": 5187, + "src": "2396:25:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5151, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2396:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5156, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5153, + "name": "creationCodeSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5137, + "src": "2424:16:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 5154, + "name": "creationCodeSizeA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5142, + "src": "2443:17:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2424:36:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2396:64:39" + }, + { + "expression": { + "id": 5159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5157, + "name": "_creationCodeSizeB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "2470:18:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5158, + "name": "creationCodeSizeB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5152, + "src": "2491:17:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2470:38:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5160, + "nodeType": "ExpressionStatement", + "src": "2470:38:39" + }, + { + "assignments": [ + 5162 + ], + "declarations": [ + { + "constant": false, + "id": 5162, + "mutability": "mutable", + "name": "creationCodeA", + "nodeType": "VariableDeclaration", + "scope": 5187, + "src": "3071:26:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5161, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3071:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 5163, + "nodeType": "VariableDeclarationStatement", + "src": "3071:26:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3116:106:39", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3130:29:39", + "value": { + "name": "creationCode", + "nodeType": "YulIdentifier", + "src": "3147:12:39" + }, + "variableNames": [ + { + "name": "creationCodeA", + "nodeType": "YulIdentifier", + "src": "3130:13:39" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "creationCodeA", + "nodeType": "YulIdentifier", + "src": "3179:13:39" + }, + { + "name": "creationCodeSizeA", + "nodeType": "YulIdentifier", + "src": "3194:17:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3172:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "3172:40:39" + }, + "nodeType": "YulExpressionStatement", + "src": "3172:40:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5133, + "isOffset": false, + "isSlot": false, + "src": "3147:12:39", + "valueSize": 1 + }, + { + "declaration": 5162, + "isOffset": false, + "isSlot": false, + "src": "3130:13:39", + "valueSize": 1 + }, + { + "declaration": 5162, + "isOffset": false, + "isSlot": false, + "src": "3179:13:39", + "valueSize": 1 + }, + { + "declaration": 5142, + "isOffset": false, + "isSlot": false, + "src": "3194:17:39", + "valueSize": 1 + } + ], + "id": 5164, + "nodeType": "InlineAssembly", + "src": "3107:115:39" + }, + { + "expression": { + "id": 5170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5165, + "name": "_creationCodeContractA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5124, + "src": "3322:22:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5168, + "name": "creationCodeA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5162, + "src": "3367:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 5166, + "name": "CodeDeployer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5372, + "src": "3347:12:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_CodeDeployer_$5372_$", + "typeString": "type(library CodeDeployer)" + } + }, + "id": 5167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "deploy", + "nodeType": "MemberAccess", + "referencedDeclaration": 5371, + "src": "3347:19:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) returns (address)" + } + }, + "id": 5169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3347:34:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3322:59:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5171, + "nodeType": "ExpressionStatement", + "src": "3322:59:39" + }, + { + "assignments": [ + 5173 + ], + "declarations": [ + { + "constant": false, + "id": 5173, + "mutability": "mutable", + "name": "creationCodeB", + "nodeType": "VariableDeclaration", + "scope": 5187, + "src": "3669:26:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5172, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3669:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 5174, + "nodeType": "VariableDeclarationStatement", + "src": "3669:26:39" + }, + { + "assignments": [ + 5176 + ], + "declarations": [ + { + "constant": false, + "id": 5176, + "mutability": "mutable", + "name": "lastByteA", + "nodeType": "VariableDeclaration", + "scope": 5187, + "src": "3705:17:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5175, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3705:7:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5177, + "nodeType": "VariableDeclarationStatement", + "src": "3705:17:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3742:323:39", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3903:53:39", + "value": { + "arguments": [ + { + "name": "creationCode", + "nodeType": "YulIdentifier", + "src": "3924:12:39" + }, + { + "name": "creationCodeSizeA", + "nodeType": "YulIdentifier", + "src": "3938:17:39" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3920:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "3920:36:39" + }, + "variableNames": [ + { + "name": "creationCodeB", + "nodeType": "YulIdentifier", + "src": "3903:13:39" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3969:33:39", + "value": { + "arguments": [ + { + "name": "creationCodeB", + "nodeType": "YulIdentifier", + "src": "3988:13:39" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3982:5:39" + }, + "nodeType": "YulFunctionCall", + "src": "3982:20:39" + }, + "variableNames": [ + { + "name": "lastByteA", + "nodeType": "YulIdentifier", + "src": "3969:9:39" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "creationCodeB", + "nodeType": "YulIdentifier", + "src": "4022:13:39" + }, + { + "name": "creationCodeSizeB", + "nodeType": "YulIdentifier", + "src": "4037:17:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4015:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "4015:40:39" + }, + "nodeType": "YulExpressionStatement", + "src": "4015:40:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5133, + "isOffset": false, + "isSlot": false, + "src": "3924:12:39", + "valueSize": 1 + }, + { + "declaration": 5173, + "isOffset": false, + "isSlot": false, + "src": "3903:13:39", + "valueSize": 1 + }, + { + "declaration": 5173, + "isOffset": false, + "isSlot": false, + "src": "3988:13:39", + "valueSize": 1 + }, + { + "declaration": 5173, + "isOffset": false, + "isSlot": false, + "src": "4022:13:39", + "valueSize": 1 + }, + { + "declaration": 5142, + "isOffset": false, + "isSlot": false, + "src": "3938:17:39", + "valueSize": 1 + }, + { + "declaration": 5152, + "isOffset": false, + "isSlot": false, + "src": "4037:17:39", + "valueSize": 1 + }, + { + "declaration": 5176, + "isOffset": false, + "isSlot": false, + "src": "3969:9:39", + "valueSize": 1 + } + ], + "id": 5178, + "nodeType": "InlineAssembly", + "src": "3733:332:39" + }, + { + "expression": { + "id": 5184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5179, + "name": "_creationCodeContractB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5128, + "src": "4215:22:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 5182, + "name": "creationCodeB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5173, + "src": "4260:13:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 5180, + "name": "CodeDeployer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5372, + "src": "4240:12:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_CodeDeployer_$5372_$", + "typeString": "type(library CodeDeployer)" + } + }, + "id": 5181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "deploy", + "nodeType": "MemberAccess", + "referencedDeclaration": 5371, + "src": "4240:19:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) returns (address)" + } + }, + "id": 5183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4240:34:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4215:59:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5185, + "nodeType": "ExpressionStatement", + "src": "4215:59:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "4415:108:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "creationCodeA", + "nodeType": "YulIdentifier", + "src": "4436:13:39" + }, + { + "name": "creationCodeSize", + "nodeType": "YulIdentifier", + "src": "4451:16:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4429:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "4429:39:39" + }, + "nodeType": "YulExpressionStatement", + "src": "4429:39:39" + }, + { + "expression": { + "arguments": [ + { + "name": "creationCodeB", + "nodeType": "YulIdentifier", + "src": "4488:13:39" + }, + { + "name": "lastByteA", + "nodeType": "YulIdentifier", + "src": "4503:9:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4481:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "4481:32:39" + }, + "nodeType": "YulExpressionStatement", + "src": "4481:32:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5162, + "isOffset": false, + "isSlot": false, + "src": "4436:13:39", + "valueSize": 1 + }, + { + "declaration": 5173, + "isOffset": false, + "isSlot": false, + "src": "4488:13:39", + "valueSize": 1 + }, + { + "declaration": 5137, + "isOffset": false, + "isSlot": false, + "src": "4451:16:39", + "valueSize": 1 + }, + { + "declaration": 5176, + "isOffset": false, + "isSlot": false, + "src": "4503:9:39", + "valueSize": 1 + } + ], + "id": 5186, + "nodeType": "InlineAssembly", + "src": "4406:117:39" + } + ] + }, + "documentation": { + "id": 5131, + "nodeType": "StructuredDocumentation", + "src": "1739:122:39", + "text": " @dev The creation code of a contract Foo can be obtained inside Solidity with `type(Foo).creationCode`." + }, + "id": 5188, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5134, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5133, + "mutability": "mutable", + "name": "creationCode", + "nodeType": "VariableDeclaration", + "scope": 5188, + "src": "1878:25:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5132, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1878:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1877:27:39" + }, + "returnParameters": { + "id": 5135, + "nodeType": "ParameterList", + "parameters": [], + "src": "1905:0:39" + }, + "scope": 5339, + "src": "1866:2663:39", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5200, + "nodeType": "Block", + "src": "4758:72:39", + "statements": [ + { + "expression": { + "components": [ + { + "id": 5196, + "name": "_creationCodeContractA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5124, + "src": "4776:22:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5197, + "name": "_creationCodeContractB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5128, + "src": "4800:22:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 5198, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4775:48:39", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_address_$_t_address_$", + "typeString": "tuple(address,address)" + } + }, + "functionReturnParameters": 5195, + "id": 5199, + "nodeType": "Return", + "src": "4768:55:39" + } + ] + }, + "documentation": { + "id": 5189, + "nodeType": "StructuredDocumentation", + "src": "4535:123:39", + "text": " @dev Returns the two addresses where the creation code of the contract crated by this factory is stored." + }, + "functionSelector": "174481fa", + "id": 5201, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCreationCodeContracts", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5190, + "nodeType": "ParameterList", + "parameters": [], + "src": "4696:2:39" + }, + "returnParameters": { + "id": 5195, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5192, + "mutability": "mutable", + "name": "contractA", + "nodeType": "VariableDeclaration", + "scope": 5201, + "src": "4720:17:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5191, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4720:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5194, + "mutability": "mutable", + "name": "contractB", + "nodeType": "VariableDeclaration", + "scope": 5201, + "src": "4739:17:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4739:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4719:38:39" + }, + "scope": 5339, + "src": "4663:167:39", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 5211, + "nodeType": "Block", + "src": "4990:52:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "", + "id": 5208, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5032:2:39", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "id": 5207, + "name": "_getCreationCodeWithArgs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5268, + "src": "5007:24:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) view returns (bytes memory)" + } + }, + "id": 5209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5007:28:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 5206, + "id": 5210, + "nodeType": "Return", + "src": "5000:35:39" + } + ] + }, + "documentation": { + "id": 5202, + "nodeType": "StructuredDocumentation", + "src": "4836:87:39", + "text": " @dev Returns the creation code of the contract this factory creates." + }, + "functionSelector": "00c194db", + "id": 5212, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCreationCode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5203, + "nodeType": "ParameterList", + "parameters": [], + "src": "4952:2:39" + }, + "returnParameters": { + "id": 5206, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5205, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5212, + "src": "4976:12:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5204, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4976:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4975:14:39" + }, + "scope": 5339, + "src": "4928:114:39", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 5267, + "nodeType": "Block", + "src": "5277:2587:39", + "statements": [ + { + "assignments": [ + 5221 + ], + "declarations": [ + { + "constant": false, + "id": 5221, + "mutability": "mutable", + "name": "creationCodeContractA", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6088:29:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5220, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6088:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5223, + "initialValue": { + "id": 5222, + "name": "_creationCodeContractA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5124, + "src": "6120:22:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6088:54:39" + }, + { + "assignments": [ + 5225 + ], + "declarations": [ + { + "constant": false, + "id": 5225, + "mutability": "mutable", + "name": "creationCodeSizeA", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6152:25:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5224, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6152:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5227, + "initialValue": { + "id": 5226, + "name": "_creationCodeSizeA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5126, + "src": "6180:18:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6152:46:39" + }, + { + "assignments": [ + 5229 + ], + "declarations": [ + { + "constant": false, + "id": 5229, + "mutability": "mutable", + "name": "creationCodeContractB", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6208:29:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5228, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6208:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5231, + "initialValue": { + "id": 5230, + "name": "_creationCodeContractB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5128, + "src": "6240:22:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6208:54:39" + }, + { + "assignments": [ + 5233 + ], + "declarations": [ + { + "constant": false, + "id": 5233, + "mutability": "mutable", + "name": "creationCodeSizeB", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6272:25:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5232, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6272:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5235, + "initialValue": { + "id": 5234, + "name": "_creationCodeSizeB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5130, + "src": "6300:18:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6272:46:39" + }, + { + "assignments": [ + 5237 + ], + "declarations": [ + { + "constant": false, + "id": 5237, + "mutability": "mutable", + "name": "creationCodeSize", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6329:24:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5236, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6329:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5241, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5240, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5238, + "name": "creationCodeSizeA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5225, + "src": "6356:17:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 5239, + "name": "creationCodeSizeB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5233, + "src": "6376:17:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6356:37:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6329:64:39" + }, + { + "assignments": [ + 5243 + ], + "declarations": [ + { + "constant": false, + "id": 5243, + "mutability": "mutable", + "name": "constructorArgsSize", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6403:27:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5242, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6403:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5246, + "initialValue": { + "expression": { + "id": 5244, + "name": "constructorArgs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5215, + "src": "6433:15:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 5245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6433:22:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6403:52:39" + }, + { + "assignments": [ + 5248 + ], + "declarations": [ + { + "constant": false, + "id": 5248, + "mutability": "mutable", + "name": "codeSize", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "6466:16:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5247, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6466:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5252, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5249, + "name": "creationCodeSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5237, + "src": "6485:16:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 5250, + "name": "constructorArgsSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5243, + "src": "6504:19:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6485:38:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6466:57:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "6543:750:39", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6793:19:39", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6807:4:39", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6801:5:39" + }, + "nodeType": "YulFunctionCall", + "src": "6801:11:39" + }, + "variableNames": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "6793:4:39" + } + ] + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6832:4:39", + "type": "", + "value": "0x40" + }, + { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "6842:4:39" + }, + { + "arguments": [ + { + "name": "codeSize", + "nodeType": "YulIdentifier", + "src": "6852:8:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6862:2:39", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6848:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "6848:17:39" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6838:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "6838:28:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6825:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "6825:42:39" + }, + "nodeType": "YulExpressionStatement", + "src": "6825:42:39" + }, + { + "expression": { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "6967:4:39" + }, + { + "name": "codeSize", + "nodeType": "YulIdentifier", + "src": "6973:8:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6960:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "6960:22:39" + }, + "nodeType": "YulExpressionStatement", + "src": "6960:22:39" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7069:30:39", + "value": { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "7090:4:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7096:2:39", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7086:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "7086:13:39" + }, + "variables": [ + { + "name": "dataStart", + "nodeType": "YulTypedName", + "src": "7073:9:39", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "creationCodeContractA", + "nodeType": "YulIdentifier", + "src": "7124:21:39" + }, + { + "name": "dataStart", + "nodeType": "YulIdentifier", + "src": "7147:9:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7158:1:39", + "type": "", + "value": "0" + }, + { + "name": "creationCodeSizeA", + "nodeType": "YulIdentifier", + "src": "7161:17:39" + } + ], + "functionName": { + "name": "extcodecopy", + "nodeType": "YulIdentifier", + "src": "7112:11:39" + }, + "nodeType": "YulFunctionCall", + "src": "7112:67:39" + }, + "nodeType": "YulExpressionStatement", + "src": "7112:67:39" + }, + { + "expression": { + "arguments": [ + { + "name": "creationCodeContractB", + "nodeType": "YulIdentifier", + "src": "7204:21:39" + }, + { + "arguments": [ + { + "name": "dataStart", + "nodeType": "YulIdentifier", + "src": "7231:9:39" + }, + { + "name": "creationCodeSizeA", + "nodeType": "YulIdentifier", + "src": "7242:17:39" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7227:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "7227:33:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7262:1:39", + "type": "", + "value": "0" + }, + { + "name": "creationCodeSizeB", + "nodeType": "YulIdentifier", + "src": "7265:17:39" + } + ], + "functionName": { + "name": "extcodecopy", + "nodeType": "YulIdentifier", + "src": "7192:11:39" + }, + "nodeType": "YulFunctionCall", + "src": "7192:91:39" + }, + "nodeType": "YulExpressionStatement", + "src": "7192:91:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5218, + "isOffset": false, + "isSlot": false, + "src": "6793:4:39", + "valueSize": 1 + }, + { + "declaration": 5218, + "isOffset": false, + "isSlot": false, + "src": "6842:4:39", + "valueSize": 1 + }, + { + "declaration": 5218, + "isOffset": false, + "isSlot": false, + "src": "6967:4:39", + "valueSize": 1 + }, + { + "declaration": 5218, + "isOffset": false, + "isSlot": false, + "src": "7090:4:39", + "valueSize": 1 + }, + { + "declaration": 5248, + "isOffset": false, + "isSlot": false, + "src": "6852:8:39", + "valueSize": 1 + }, + { + "declaration": 5248, + "isOffset": false, + "isSlot": false, + "src": "6973:8:39", + "valueSize": 1 + }, + { + "declaration": 5221, + "isOffset": false, + "isSlot": false, + "src": "7124:21:39", + "valueSize": 1 + }, + { + "declaration": 5229, + "isOffset": false, + "isSlot": false, + "src": "7204:21:39", + "valueSize": 1 + }, + { + "declaration": 5225, + "isOffset": false, + "isSlot": false, + "src": "7161:17:39", + "valueSize": 1 + }, + { + "declaration": 5225, + "isOffset": false, + "isSlot": false, + "src": "7242:17:39", + "valueSize": 1 + }, + { + "declaration": 5233, + "isOffset": false, + "isSlot": false, + "src": "7265:17:39", + "valueSize": 1 + } + ], + "id": 5253, + "nodeType": "InlineAssembly", + "src": "6534:759:39" + }, + { + "assignments": [ + 5255 + ], + "declarations": [ + { + "constant": false, + "id": 5255, + "mutability": "mutable", + "name": "constructorArgsDataPtr", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "7521:30:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5254, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7521:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5256, + "nodeType": "VariableDeclarationStatement", + "src": "7521:30:39" + }, + { + "assignments": [ + 5258 + ], + "declarations": [ + { + "constant": false, + "id": 5258, + "mutability": "mutable", + "name": "constructorArgsCodeDataPtr", + "nodeType": "VariableDeclaration", + "scope": 5267, + "src": "7561:34:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5257, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7561:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5259, + "nodeType": "VariableDeclarationStatement", + "src": "7561:34:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "7614:153:39", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7628:50:39", + "value": { + "arguments": [ + { + "name": "constructorArgs", + "nodeType": "YulIdentifier", + "src": "7658:15:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7675:2:39", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7654:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "7654:24:39" + }, + "variableNames": [ + { + "name": "constructorArgsDataPtr", + "nodeType": "YulIdentifier", + "src": "7628:22:39" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7691:66:39", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "7729:4:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7735:2:39", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7725:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "7725:13:39" + }, + { + "name": "creationCodeSize", + "nodeType": "YulIdentifier", + "src": "7740:16:39" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7721:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "7721:36:39" + }, + "variableNames": [ + { + "name": "constructorArgsCodeDataPtr", + "nodeType": "YulIdentifier", + "src": "7691:26:39" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5218, + "isOffset": false, + "isSlot": false, + "src": "7729:4:39", + "valueSize": 1 + }, + { + "declaration": 5215, + "isOffset": false, + "isSlot": false, + "src": "7658:15:39", + "valueSize": 1 + }, + { + "declaration": 5258, + "isOffset": false, + "isSlot": false, + "src": "7691:26:39", + "valueSize": 1 + }, + { + "declaration": 5255, + "isOffset": false, + "isSlot": false, + "src": "7628:22:39", + "valueSize": 1 + }, + { + "declaration": 5237, + "isOffset": false, + "isSlot": false, + "src": "7740:16:39", + "valueSize": 1 + } + ], + "id": 5260, + "nodeType": "InlineAssembly", + "src": "7605:162:39" + }, + { + "expression": { + "arguments": [ + { + "id": 5262, + "name": "constructorArgsCodeDataPtr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5258, + "src": "7785:26:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 5263, + "name": "constructorArgsDataPtr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5255, + "src": "7813:22:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 5264, + "name": "constructorArgsSize", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5243, + "src": "7837:19:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5261, + "name": "_memcpy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5338, + "src": "7777:7:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256) pure" + } + }, + "id": 5265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7777:80:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5266, + "nodeType": "ExpressionStatement", + "src": "7777:80:39" + } + ] + }, + "documentation": { + "id": 5213, + "nodeType": "StructuredDocumentation", + "src": "5048:119:39", + "text": " @dev Returns the creation code that will result in a contract being deployed with `constructorArgs`." + }, + "id": 5268, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getCreationCodeWithArgs", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5216, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5215, + "mutability": "mutable", + "name": "constructorArgs", + "nodeType": "VariableDeclaration", + "scope": 5268, + "src": "5206:28:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5214, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5206:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5205:30:39" + }, + "returnParameters": { + "id": 5219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5218, + "mutability": "mutable", + "name": "code", + "nodeType": "VariableDeclaration", + "scope": 5268, + "src": "5258:17:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5217, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5258:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5257:19:39" + }, + "scope": 5339, + "src": "5172:2692:39", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 5297, + "nodeType": "Block", + "src": "8136:548:39", + "statements": [ + { + "assignments": [ + 5277 + ], + "declarations": [ + { + "constant": false, + "id": 5277, + "mutability": "mutable", + "name": "creationCode", + "nodeType": "VariableDeclaration", + "scope": 5297, + "src": "8146:25:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5276, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8146:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 5281, + "initialValue": { + "arguments": [ + { + "id": 5279, + "name": "constructorArgs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5271, + "src": "8199:15:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5278, + "name": "_getCreationCodeWithArgs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5268, + "src": "8174:24:39", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) view returns (bytes memory)" + } + }, + "id": 5280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8174:41:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8146:69:39" + }, + { + "assignments": [ + 5283 + ], + "declarations": [ + { + "constant": false, + "id": 5283, + "mutability": "mutable", + "name": "destination", + "nodeType": "VariableDeclaration", + "scope": 5297, + "src": "8226:19:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5282, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8226:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5284, + "nodeType": "VariableDeclarationStatement", + "src": "8226:19:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "8264:92:39", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "8278:68:39", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8300:1:39", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "name": "creationCode", + "nodeType": "YulIdentifier", + "src": "8307:12:39" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8321:2:39", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8303:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "8303:21:39" + }, + { + "arguments": [ + { + "name": "creationCode", + "nodeType": "YulIdentifier", + "src": "8332:12:39" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8326:5:39" + }, + "nodeType": "YulFunctionCall", + "src": "8326:19:39" + } + ], + "functionName": { + "name": "create", + "nodeType": "YulIdentifier", + "src": "8293:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "8293:53:39" + }, + "variableNames": [ + { + "name": "destination", + "nodeType": "YulIdentifier", + "src": "8278:11:39" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5277, + "isOffset": false, + "isSlot": false, + "src": "8307:12:39", + "valueSize": 1 + }, + { + "declaration": 5277, + "isOffset": false, + "isSlot": false, + "src": "8332:12:39", + "valueSize": 1 + }, + { + "declaration": 5283, + "isOffset": false, + "isSlot": false, + "src": "8278:11:39", + "valueSize": 1 + } + ], + "id": 5285, + "nodeType": "InlineAssembly", + "src": "8255:101:39" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5286, + "name": "destination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "8370:11:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 5289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8393:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 5288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8385:7:39", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5287, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8385:7:39", + "typeDescriptions": {} + } + }, + "id": 5290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8385:10:39", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "8370:25:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5294, + "nodeType": "IfStatement", + "src": "8366:283:39", + "trueBody": { + "id": 5293, + "nodeType": "Block", + "src": "8397:252:39", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "8525:114:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8558:1:39", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8561:1:39", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "8564:14:39" + }, + "nodeType": "YulFunctionCall", + "src": "8564:16:39" + } + ], + "functionName": { + "name": "returndatacopy", + "nodeType": "YulIdentifier", + "src": "8543:14:39" + }, + "nodeType": "YulFunctionCall", + "src": "8543:38:39" + }, + "nodeType": "YulExpressionStatement", + "src": "8543:38:39" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8605:1:39", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nodeType": "YulIdentifier", + "src": "8608:14:39" + }, + "nodeType": "YulFunctionCall", + "src": "8608:16:39" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8598:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "8598:27:39" + }, + "nodeType": "YulExpressionStatement", + "src": "8598:27:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [], + "id": 5292, + "nodeType": "InlineAssembly", + "src": "8516:123:39" + } + ] + } + }, + { + "expression": { + "id": 5295, + "name": "destination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5283, + "src": "8666:11:39", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 5275, + "id": 5296, + "nodeType": "Return", + "src": "8659:18:39" + } + ] + }, + "documentation": { + "id": 5269, + "nodeType": "StructuredDocumentation", + "src": "7870:179:39", + "text": " @dev Deploys a contract with constructor arguments. To create `constructorArgs`, call `abi.encode()` with the\n contract's constructor arguments, in order." + }, + "id": 5298, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_create", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5272, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5271, + "mutability": "mutable", + "name": "constructorArgs", + "nodeType": "VariableDeclaration", + "scope": 5298, + "src": "8071:28:39", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5270, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "8071:5:39", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "8070:30:39" + }, + "returnParameters": { + "id": 5275, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5274, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5298, + "src": "8127:7:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5273, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8127:7:39", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8126:9:39" + }, + "scope": 5339, + "src": "8054:630:39", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5337, + "nodeType": "Block", + "src": "8920:490:39", + "statements": [ + { + "body": { + "id": 5323, + "nodeType": "Block", + "src": "9009:136:39", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "9032:56:39", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dest", + "nodeType": "YulIdentifier", + "src": "9057:4:39" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9069:3:39" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9063:5:39" + }, + "nodeType": "YulFunctionCall", + "src": "9063:10:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9050:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "9050:24:39" + }, + "nodeType": "YulExpressionStatement", + "src": "9050:24:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5300, + "isOffset": false, + "isSlot": false, + "src": "9057:4:39", + "valueSize": 1 + }, + { + "declaration": 5302, + "isOffset": false, + "isSlot": false, + "src": "9069:3:39", + "valueSize": 1 + } + ], + "id": 5314, + "nodeType": "InlineAssembly", + "src": "9023:65:39" + }, + { + "expression": { + "id": 5317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5315, + "name": "dest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5300, + "src": "9101:4:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3332", + "id": 5316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9109:2:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "9101:10:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5318, + "nodeType": "ExpressionStatement", + "src": "9101:10:39" + }, + { + "expression": { + "id": 5321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5319, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5302, + "src": "9125:3:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "3332", + "id": 5320, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9132:2:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "9125:9:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5322, + "nodeType": "ExpressionStatement", + "src": "9125:9:39" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5307, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5304, + "src": "8987:3:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "3332", + "id": 5308, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8994:2:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "8987:9:39", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5324, + "loopExpression": { + "expression": { + "id": 5312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5310, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5304, + "src": "8998:3:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "hexValue": "3332", + "id": 5311, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9005:2:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "8998:9:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5313, + "nodeType": "ExpressionStatement", + "src": "8998:9:39" + }, + "nodeType": "ForStatement", + "src": "8980:165:39" + }, + { + "assignments": [ + 5326 + ], + "declarations": [ + { + "constant": false, + "id": 5326, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 5337, + "src": "9187:12:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9187:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5335, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "323536", + "id": 5327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9202:3:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_256_by_1", + "typeString": "int_const 256" + }, + "value": "256" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3332", + "id": 5328, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9208:2:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 5329, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5304, + "src": "9213:3:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9208:8:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 5331, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9207:10:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9202:15:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 5333, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9220:1:39", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9202:19:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9187:34:39" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "9240:164:39", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "9254:41:39", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9279:3:39" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9273:5:39" + }, + "nodeType": "YulFunctionCall", + "src": "9273:10:39" + }, + { + "arguments": [ + { + "name": "mask", + "nodeType": "YulIdentifier", + "src": "9289:4:39" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "9285:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "9285:9:39" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "9269:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "9269:26:39" + }, + "variables": [ + { + "name": "srcpart", + "nodeType": "YulTypedName", + "src": "9258:7:39", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9308:38:39", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "dest", + "nodeType": "YulIdentifier", + "src": "9334:4:39" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9328:5:39" + }, + "nodeType": "YulFunctionCall", + "src": "9328:11:39" + }, + { + "name": "mask", + "nodeType": "YulIdentifier", + "src": "9341:4:39" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "9324:3:39" + }, + "nodeType": "YulFunctionCall", + "src": "9324:22:39" + }, + "variables": [ + { + "name": "destpart", + "nodeType": "YulTypedName", + "src": "9312:8:39", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dest", + "nodeType": "YulIdentifier", + "src": "9366:4:39" + }, + { + "arguments": [ + { + "name": "destpart", + "nodeType": "YulIdentifier", + "src": "9375:8:39" + }, + { + "name": "srcpart", + "nodeType": "YulIdentifier", + "src": "9385:7:39" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "9372:2:39" + }, + "nodeType": "YulFunctionCall", + "src": "9372:21:39" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9359:6:39" + }, + "nodeType": "YulFunctionCall", + "src": "9359:35:39" + }, + "nodeType": "YulExpressionStatement", + "src": "9359:35:39" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5300, + "isOffset": false, + "isSlot": false, + "src": "9334:4:39", + "valueSize": 1 + }, + { + "declaration": 5300, + "isOffset": false, + "isSlot": false, + "src": "9366:4:39", + "valueSize": 1 + }, + { + "declaration": 5326, + "isOffset": false, + "isSlot": false, + "src": "9289:4:39", + "valueSize": 1 + }, + { + "declaration": 5326, + "isOffset": false, + "isSlot": false, + "src": "9341:4:39", + "valueSize": 1 + }, + { + "declaration": 5302, + "isOffset": false, + "isSlot": false, + "src": "9279:3:39", + "valueSize": 1 + } + ], + "id": 5336, + "nodeType": "InlineAssembly", + "src": "9231:173:39" + } + ] + }, + "id": 5338, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_memcpy", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5305, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5300, + "mutability": "mutable", + "name": "dest", + "nodeType": "VariableDeclaration", + "scope": 5338, + "src": "8846:12:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5299, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8846:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5302, + "mutability": "mutable", + "name": "src", + "nodeType": "VariableDeclaration", + "scope": 5338, + "src": "8868:11:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5301, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8868:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5304, + "mutability": "mutable", + "name": "len", + "nodeType": "VariableDeclaration", + "scope": 5338, + "src": "8889:11:39", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5303, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8889:7:39", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8836:70:39" + }, + "returnParameters": { + "id": 5306, + "nodeType": "ParameterList", + "parameters": [], + "src": "8920:0:39" + }, + "scope": 5339, + "src": "8820:590:39", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 5340, + "src": "1072:8340:39" + } + ], + "src": "688:8725:39" + }, + "id": 39 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/CodeDeployer.sol", + "exportedSymbols": { + "CodeDeployer": [ + 5372 + ] + }, + "id": 5373, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5341, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:40" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 5342, + "nodeType": "ImportDirective", + "scope": 5373, + "sourceUnit": 1012, + "src": "713:90:40", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 5343, + "nodeType": "StructuredDocumentation", + "src": "805:199:40", + "text": " @dev Library used to deploy contracts with specific code. This can be used for long-term storage of immutable data as\n contract code, which can be retrieved via the `extcodecopy` opcode." + }, + "fullyImplemented": true, + "id": 5372, + "linearizedBaseContracts": [ + 5372 + ], + "name": "CodeDeployer", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 5346, + "mutability": "constant", + "name": "_DEPLOYER_CREATION_CODE", + "nodeType": "VariableDeclaration", + "scope": 5372, + "src": "2455:125:40", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5344, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2455:7:40", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "hexValue": "307836303230333830333830363032303630303033393630303066336665666566656665666566656665666566656665666566656665666566656665666566656665", + "id": 5345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2514:66:40", + "typeDescriptions": { + "typeIdentifier": "t_rational_43478959162261259322985507790388014220090819270403161015765007512459448090366_by_1", + "typeString": "int_const 4347...(69 digits omitted)...0366" + }, + "value": "0x602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe" + }, + "visibility": "private" + }, + { + "body": { + "id": 5370, + "nodeType": "Block", + "src": "2811:1292:40", + "statements": [ + { + "assignments": [ + 5355 + ], + "declarations": [ + { + "constant": false, + "id": 5355, + "mutability": "mutable", + "name": "deployerCreationCode", + "nodeType": "VariableDeclaration", + "scope": 5370, + "src": "2821:28:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5354, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2821:7:40", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5357, + "initialValue": { + "id": 5356, + "name": "_DEPLOYER_CREATION_CODE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5346, + "src": "2852:23:40", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2821:54:40" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3200:706:40", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "3214:29:40", + "value": { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "3238:4:40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3232:5:40" + }, + "nodeType": "YulFunctionCall", + "src": "3232:11:40" + }, + "variables": [ + { + "name": "codeLength", + "nodeType": "YulTypedName", + "src": "3218:10:40", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "3472:4:40" + }, + { + "name": "deployerCreationCode", + "nodeType": "YulIdentifier", + "src": "3478:20:40" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3465:6:40" + }, + "nodeType": "YulFunctionCall", + "src": "3465:34:40" + }, + "nodeType": "YulExpressionStatement", + "src": "3465:34:40" + }, + { + "nodeType": "YulAssignment", + "src": "3721:51:40", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3743:1:40", + "type": "", + "value": "0" + }, + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "3746:4:40" + }, + { + "arguments": [ + { + "name": "codeLength", + "nodeType": "YulIdentifier", + "src": "3756:10:40" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3768:2:40", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3752:3:40" + }, + "nodeType": "YulFunctionCall", + "src": "3752:19:40" + } + ], + "functionName": { + "name": "create", + "nodeType": "YulIdentifier", + "src": "3736:6:40" + }, + "nodeType": "YulFunctionCall", + "src": "3736:36:40" + }, + "variableNames": [ + { + "name": "destination", + "nodeType": "YulIdentifier", + "src": "3721:11:40" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "code", + "nodeType": "YulIdentifier", + "src": "3879:4:40" + }, + { + "name": "codeLength", + "nodeType": "YulIdentifier", + "src": "3885:10:40" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3872:6:40" + }, + "nodeType": "YulFunctionCall", + "src": "3872:24:40" + }, + "nodeType": "YulExpressionStatement", + "src": "3872:24:40" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5349, + "isOffset": false, + "isSlot": false, + "src": "3238:4:40", + "valueSize": 1 + }, + { + "declaration": 5349, + "isOffset": false, + "isSlot": false, + "src": "3472:4:40", + "valueSize": 1 + }, + { + "declaration": 5349, + "isOffset": false, + "isSlot": false, + "src": "3746:4:40", + "valueSize": 1 + }, + { + "declaration": 5349, + "isOffset": false, + "isSlot": false, + "src": "3879:4:40", + "valueSize": 1 + }, + { + "declaration": 5355, + "isOffset": false, + "isSlot": false, + "src": "3478:20:40", + "valueSize": 1 + }, + { + "declaration": 5352, + "isOffset": false, + "isSlot": false, + "src": "3721:11:40", + "valueSize": 1 + } + ], + "id": 5358, + "nodeType": "InlineAssembly", + "src": "3191:715:40" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5360, + "name": "destination", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5352, + "src": "4039:11:40", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 5363, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4062:1:40", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 5362, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4054:7:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5361, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4054:7:40", + "typeDescriptions": {} + } + }, + "id": 5364, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4054:10:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "4039:25:40", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5366, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4066:6:40", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "CODE_DEPLOYMENT_FAILED", + "nodeType": "MemberAccess", + "referencedDeclaration": 860, + "src": "4066:29:40", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5359, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4030:8:40", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4030:66:40", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5369, + "nodeType": "ExpressionStatement", + "src": "4030:66:40" + } + ] + }, + "documentation": { + "id": 5347, + "nodeType": "StructuredDocumentation", + "src": "2587:145:40", + "text": " @dev Deploys a contract with `code` as its code, returning the destination address.\n Reverts if deployment fails." + }, + "id": 5371, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deploy", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5349, + "mutability": "mutable", + "name": "code", + "nodeType": "VariableDeclaration", + "scope": 5371, + "src": "2753:17:40", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5348, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2753:5:40", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2752:19:40" + }, + "returnParameters": { + "id": 5353, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5352, + "mutability": "mutable", + "name": "destination", + "nodeType": "VariableDeclaration", + "scope": 5371, + "src": "2790:19:40", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5351, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2790:7:40", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2789:21:40" + }, + "scope": 5372, + "src": "2737:1366:40", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 5373, + "src": "1005:3100:40" + } + ], + "src": "688:3418:40" + }, + "id": 40 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol", + "exportedSymbols": { + "EOASignaturesValidator": [ + 5552 + ] + }, + "id": 5553, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5374, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:41" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 5375, + "nodeType": "ImportDirective", + "scope": 5553, + "sourceUnit": 1012, + "src": "713:90:41", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ISignaturesValidator.sol", + "id": 5376, + "nodeType": "ImportDirective", + "scope": 5553, + "sourceUnit": 1041, + "src": "804:96:41", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol", + "file": "../openzeppelin/EIP712.sol", + "id": 5377, + "nodeType": "ImportDirective", + "scope": 5553, + "sourceUnit": 8936, + "src": "902:36:41", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 5379, + "name": "ISignaturesValidator", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1040, + "src": "1045:20:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ISignaturesValidator_$1040", + "typeString": "contract ISignaturesValidator" + } + }, + "id": 5380, + "nodeType": "InheritanceSpecifier", + "src": "1045:20:41" + }, + { + "baseName": { + "id": 5381, + "name": "EIP712", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8935, + "src": "1067:6:41", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$8935", + "typeString": "contract EIP712" + } + }, + "id": 5382, + "nodeType": "InheritanceSpecifier", + "src": "1067:6:41" + } + ], + "contractDependencies": [ + 1040, + 8935 + ], + "contractKind": "contract", + "documentation": { + "id": 5378, + "nodeType": "StructuredDocumentation", + "src": "940:60:41", + "text": " @dev Utility for signing Solidity function calls." + }, + "fullyImplemented": false, + "id": 5552, + "linearizedBaseContracts": [ + 5552, + 8935, + 1040 + ], + "name": "EOASignaturesValidator", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 5386, + "mutability": "mutable", + "name": "_nextNonce", + "nodeType": "VariableDeclaration", + "scope": 5552, + "src": "1130:47:41", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 5385, + "keyType": { + "id": 5383, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1138:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1130:27:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 5384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1149:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1031 + ], + "body": { + "id": 5395, + "nodeType": "Block", + "src": "1253:44:41", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 5392, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8906, + "src": "1270:18:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 5393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1270:20:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 5391, + "id": 5394, + "nodeType": "Return", + "src": "1263:27:41" + } + ] + }, + "functionSelector": "ed24911d", + "id": 5396, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDomainSeparator", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5388, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1226:8:41" + }, + "parameters": { + "id": 5387, + "nodeType": "ParameterList", + "parameters": [], + "src": "1211:2:41" + }, + "returnParameters": { + "id": 5391, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5390, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5396, + "src": "1244:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5389, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1244:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1243:9:41" + }, + "scope": 5552, + "src": "1184:113:41", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1039 + ], + "body": { + "id": 5408, + "nodeType": "Block", + "src": "1381:43:41", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 5404, + "name": "_nextNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5386, + "src": "1398:10:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 5406, + "indexExpression": { + "id": 5405, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5398, + "src": "1409:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1398:19:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5403, + "id": 5407, + "nodeType": "Return", + "src": "1391:26:41" + } + ] + }, + "functionSelector": "90193b7c", + "id": 5409, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getNextNonce", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 5400, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1354:8:41" + }, + "parameters": { + "id": 5399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5398, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 5409, + "src": "1325:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5397, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1325:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1324:17:41" + }, + "returnParameters": { + "id": 5403, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5402, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5409, + "src": "1372:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5401, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1372:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1371:9:41" + }, + "scope": 5552, + "src": "1303:121:41", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 5432, + "nodeType": "Block", + "src": "1588:107:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 5421, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5411, + "src": "1627:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5422, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5413, + "src": "1636:10:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5423, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5415, + "src": "1648:9:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "arguments": [ + { + "id": 5426, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1664:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 5425, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1664:7:41", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 5424, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1659:4:41", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 5427, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1659:13:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 5428, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "1659:17:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 5429, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5417, + "src": "1678:9:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5420, + "name": "_ensureValidSignature", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5433, + 5477 + ], + "referencedDeclaration": 5477, + "src": "1605:21:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,bytes32,bytes memory,uint256,uint256)" + } + }, + "id": 5430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1605:83:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "functionReturnParameters": 5419, + "id": 5431, + "nodeType": "Return", + "src": "1598:90:41" + } + ] + }, + "id": 5433, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureValidSignature", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5418, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5411, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 5433, + "src": "1470:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5410, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1470:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5413, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 5433, + "src": "1495:18:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5412, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1495:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5415, + "mutability": "mutable", + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 5433, + "src": "1523:22:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5414, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1523:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5417, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 5433, + "src": "1555:17:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5416, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1555:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1460:118:41" + }, + "returnParameters": { + "id": 5419, + "nodeType": "ParameterList", + "parameters": [], + "src": "1588:0:41" + }, + "scope": 5552, + "src": "1430:265:41", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5476, + "nodeType": "Block", + "src": "1885:1030:41", + "statements": [ + { + "assignments": [ + 5447 + ], + "declarations": [ + { + "constant": false, + "id": 5447, + "mutability": "mutable", + "name": "digest", + "nodeType": "VariableDeclaration", + "scope": 5476, + "src": "1895:14:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5446, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1895:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5451, + "initialValue": { + "arguments": [ + { + "id": 5449, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5437, + "src": "1929:10:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 5448, + "name": "_hashTypedDataV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8925, + "src": "1912:16:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", + "typeString": "function (bytes32) view returns (bytes32)" + } + }, + "id": 5450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1912:28:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1895:45:41" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 5454, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5435, + "src": "1977:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 5455, + "name": "digest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5447, + "src": "1986:6:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5456, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5439, + "src": "1994:9:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 5453, + "name": "_isValidSignature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5529, + "src": "1959:17:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,bytes32,bytes memory) view returns (bool)" + } + }, + "id": 5457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1959:45:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 5458, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5443, + "src": "2006:9:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5452, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1950:8:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1950:66:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5460, + "nodeType": "ExpressionStatement", + "src": "1950:66:41" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5462, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5441, + "src": "2496:8:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "expression": { + "id": 5463, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2508:5:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 5464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2508:15:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2496:27:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5466, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2525:6:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "EXPIRED_SIGNATURE", + "nodeType": "MemberAccess", + "referencedDeclaration": 896, + "src": "2525:24:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5461, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2487:8:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2487:63:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5469, + "nodeType": "ExpressionStatement", + "src": "2487:63:41" + }, + { + "expression": { + "id": 5474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5470, + "name": "_nextNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5386, + "src": "2884:10:41", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 5472, + "indexExpression": { + "id": 5471, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5435, + "src": "2895:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2884:19:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "hexValue": "31", + "id": 5473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2907:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2884:24:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5475, + "nodeType": "ExpressionStatement", + "src": "2884:24:41" + } + ] + }, + "id": 5477, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureValidSignature", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5444, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5435, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 5477, + "src": "1741:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5434, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1741:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5437, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 5477, + "src": "1766:18:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5436, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1766:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5439, + "mutability": "mutable", + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 5477, + "src": "1794:22:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5438, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1794:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5441, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 5477, + "src": "1826:16:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5440, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1826:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5443, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 5477, + "src": "1852:17:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5442, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1852:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1731:144:41" + }, + "returnParameters": { + "id": 5445, + "nodeType": "ParameterList", + "parameters": [], + "src": "1885:0:41" + }, + "scope": 5552, + "src": "1701:1214:41", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5528, + "nodeType": "Block", + "src": "3072:725:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5489, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5483, + "src": "3091:9:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 5490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3091:16:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "3635", + "id": 5491, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3111:2:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_65_by_1", + "typeString": "int_const 65" + }, + "value": "65" + }, + "src": "3091:22:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5493, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "3115:6:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MALFORMED_SIGNATURE", + "nodeType": "MemberAccess", + "referencedDeclaration": 899, + "src": "3115:26:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5488, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "3082:8:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3082:60:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5496, + "nodeType": "ExpressionStatement", + "src": "3082:60:41" + }, + { + "assignments": [ + 5498 + ], + "declarations": [ + { + "constant": false, + "id": 5498, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 5528, + "src": "3153:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5497, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3153:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5499, + "nodeType": "VariableDeclarationStatement", + "src": "3153:9:41" + }, + { + "assignments": [ + 5501 + ], + "declarations": [ + { + "constant": false, + "id": 5501, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 5528, + "src": "3172:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5500, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3172:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 5502, + "nodeType": "VariableDeclarationStatement", + "src": "3172:9:41" + }, + { + "assignments": [ + 5504 + ], + "declarations": [ + { + "constant": false, + "id": 5504, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 5528, + "src": "3191:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 5503, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3191:5:41", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "id": 5505, + "nodeType": "VariableDeclarationStatement", + "src": "3191:7:41" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3387:155:41", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3401:32:41", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nodeType": "YulIdentifier", + "src": "3416:9:41" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3427:4:41", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3412:3:41" + }, + "nodeType": "YulFunctionCall", + "src": "3412:20:41" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3406:5:41" + }, + "nodeType": "YulFunctionCall", + "src": "3406:27:41" + }, + "variableNames": [ + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "3401:1:41" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3446:32:41", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nodeType": "YulIdentifier", + "src": "3461:9:41" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3472:4:41", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3457:3:41" + }, + "nodeType": "YulFunctionCall", + "src": "3457:20:41" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3451:5:41" + }, + "nodeType": "YulFunctionCall", + "src": "3451:27:41" + }, + "variableNames": [ + { + "name": "s", + "nodeType": "YulIdentifier", + "src": "3446:1:41" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3491:41:41", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3501:1:41", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nodeType": "YulIdentifier", + "src": "3514:9:41" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3525:4:41", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3510:3:41" + }, + "nodeType": "YulFunctionCall", + "src": "3510:20:41" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3504:5:41" + }, + "nodeType": "YulFunctionCall", + "src": "3504:27:41" + } + ], + "functionName": { + "name": "byte", + "nodeType": "YulIdentifier", + "src": "3496:4:41" + }, + "nodeType": "YulFunctionCall", + "src": "3496:36:41" + }, + "variableNames": [ + { + "name": "v", + "nodeType": "YulIdentifier", + "src": "3491:1:41" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5498, + "isOffset": false, + "isSlot": false, + "src": "3401:1:41", + "valueSize": 1 + }, + { + "declaration": 5501, + "isOffset": false, + "isSlot": false, + "src": "3446:1:41", + "valueSize": 1 + }, + { + "declaration": 5483, + "isOffset": false, + "isSlot": false, + "src": "3416:9:41", + "valueSize": 1 + }, + { + "declaration": 5483, + "isOffset": false, + "isSlot": false, + "src": "3461:9:41", + "valueSize": 1 + }, + { + "declaration": 5483, + "isOffset": false, + "isSlot": false, + "src": "3514:9:41", + "valueSize": 1 + }, + { + "declaration": 5504, + "isOffset": false, + "isSlot": false, + "src": "3491:1:41", + "valueSize": 1 + } + ], + "id": 5506, + "nodeType": "InlineAssembly", + "src": "3378:164:41" + }, + { + "assignments": [ + 5508 + ], + "declarations": [ + { + "constant": false, + "id": 5508, + "mutability": "mutable", + "name": "recoveredAddress", + "nodeType": "VariableDeclaration", + "scope": 5528, + "src": "3552:24:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5507, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3552:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5515, + "initialValue": { + "arguments": [ + { + "id": 5510, + "name": "digest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5481, + "src": "3589:6:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5511, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5504, + "src": "3597:1:41", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 5512, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5498, + "src": "3600:1:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 5513, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5501, + "src": "3603:1:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 5509, + "name": "ecrecover", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -6, + "src": "3579:9:41", + "typeDescriptions": { + "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)" + } + }, + "id": 5514, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3579:26:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3552:53:41" + }, + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 5525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5516, + "name": "recoveredAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5508, + "src": "3728:16:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 5519, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3756:1:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 5518, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3748:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 5517, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3748:7:41", + "typeDescriptions": {} + } + }, + "id": 5520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3748:10:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3728:30:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5522, + "name": "recoveredAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5508, + "src": "3762:16:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 5523, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5479, + "src": "3782:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3762:27:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3728:61:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 5526, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3727:63:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 5487, + "id": 5527, + "nodeType": "Return", + "src": "3720:70:41" + } + ] + }, + "id": 5529, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isValidSignature", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5484, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5479, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 5529, + "src": "2957:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5478, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2957:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5481, + "mutability": "mutable", + "name": "digest", + "nodeType": "VariableDeclaration", + "scope": 5529, + "src": "2982:14:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5480, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2982:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5483, + "mutability": "mutable", + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 5529, + "src": "3006:22:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5482, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3006:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2947:87:41" + }, + "returnParameters": { + "id": 5487, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5486, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5529, + "src": "3066:4:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 5485, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3066:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3065:6:41" + }, + "scope": 5552, + "src": "2921:876:41", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 5550, + "nodeType": "Block", + "src": "3928:294:41", + "statements": [ + { + "assignments": [ + 5541 + ], + "declarations": [ + { + "constant": false, + "id": 5541, + "mutability": "mutable", + "name": "signature", + "nodeType": "VariableDeclaration", + "scope": 5550, + "src": "3938:22:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5540, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3938:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 5546, + "initialValue": { + "arguments": [ + { + "hexValue": "3635", + "id": 5544, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3973:2:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_65_by_1", + "typeString": "int_const 65" + }, + "value": "65" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_65_by_1", + "typeString": "int_const 65" + } + ], + "id": 5543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "3963:9:41", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint256) pure returns (bytes memory)" + }, + "typeName": { + "id": 5542, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3967:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + "id": 5545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3963:13:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3938:38:41" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "4051:138:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nodeType": "YulIdentifier", + "src": "4076:9:41" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4087:2:41", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4072:3:41" + }, + "nodeType": "YulFunctionCall", + "src": "4072:18:41" + }, + { + "name": "r", + "nodeType": "YulIdentifier", + "src": "4092:1:41" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4065:6:41" + }, + "nodeType": "YulFunctionCall", + "src": "4065:29:41" + }, + "nodeType": "YulExpressionStatement", + "src": "4065:29:41" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nodeType": "YulIdentifier", + "src": "4118:9:41" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4129:2:41", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4114:3:41" + }, + "nodeType": "YulFunctionCall", + "src": "4114:18:41" + }, + { + "name": "s", + "nodeType": "YulIdentifier", + "src": "4134:1:41" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4107:6:41" + }, + "nodeType": "YulFunctionCall", + "src": "4107:29:41" + }, + "nodeType": "YulExpressionStatement", + "src": "4107:29:41" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "signature", + "nodeType": "YulIdentifier", + "src": "4161:9:41" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4172:2:41", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4157:3:41" + }, + "nodeType": "YulFunctionCall", + "src": "4157:18:41" + }, + { + "name": "v", + "nodeType": "YulIdentifier", + "src": "4177:1:41" + } + ], + "functionName": { + "name": "mstore8", + "nodeType": "YulIdentifier", + "src": "4149:7:41" + }, + "nodeType": "YulFunctionCall", + "src": "4149:30:41" + }, + "nodeType": "YulExpressionStatement", + "src": "4149:30:41" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5533, + "isOffset": false, + "isSlot": false, + "src": "4092:1:41", + "valueSize": 1 + }, + { + "declaration": 5535, + "isOffset": false, + "isSlot": false, + "src": "4134:1:41", + "valueSize": 1 + }, + { + "declaration": 5541, + "isOffset": false, + "isSlot": false, + "src": "4076:9:41", + "valueSize": 1 + }, + { + "declaration": 5541, + "isOffset": false, + "isSlot": false, + "src": "4118:9:41", + "valueSize": 1 + }, + { + "declaration": 5541, + "isOffset": false, + "isSlot": false, + "src": "4161:9:41", + "valueSize": 1 + }, + { + "declaration": 5531, + "isOffset": false, + "isSlot": false, + "src": "4177:1:41", + "valueSize": 1 + } + ], + "id": 5547, + "nodeType": "InlineAssembly", + "src": "4042:147:41" + }, + { + "expression": { + "id": 5548, + "name": "signature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5541, + "src": "4206:9:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 5539, + "id": 5549, + "nodeType": "Return", + "src": "4199:16:41" + } + ] + }, + "id": 5551, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_toArraySignature", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5531, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 5551, + "src": "3839:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 5530, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3839:5:41", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5533, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 5551, + "src": "3856:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5532, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3856:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5535, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 5551, + "src": "3875:9:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 5534, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3875:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3829:61:41" + }, + "returnParameters": { + "id": 5539, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5538, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5551, + "src": "3914:12:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 5537, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3914:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3913:14:41" + }, + "scope": 5552, + "src": "3803:419:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 5553, + "src": "1001:3223:41" + } + ], + "src": "688:3537:41" + }, + "id": 41 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "exportedSymbols": { + "_appendToken": [ + 5766 + ], + "_asIAsset": [ + 5568 + ], + "_findTokenIndex": [ + 5808 + ], + "_getSortedTokenIndexes": [ + 5882 + ], + "_insertSorted": [ + 5714 + ], + "_sortTokens": [ + 5619 + ] + }, + "id": 5883, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5554, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:42" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 5555, + "nodeType": "ImportDirective", + "scope": 5883, + "sourceUnit": 1012, + "src": "713:90:42", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 5556, + "nodeType": "ImportDirective", + "scope": 5883, + "sourceUnit": 1153, + "src": "804:87:42", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IAsset.sol", + "id": 5557, + "nodeType": "ImportDirective", + "scope": 5883, + "sourceUnit": 1287, + "src": "892:65:42", + "symbolAliases": [], + "unitAlias": "" + }, + { + "body": { + "id": 5567, + "nodeType": "Block", + "src": "1060:101:42", + "statements": [ + { + "AST": { + "nodeType": "YulBlock", + "src": "1127:32:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1137:16:42", + "value": { + "name": "tokens", + "nodeType": "YulIdentifier", + "src": "1147:6:42" + }, + "variableNames": [ + { + "name": "assets", + "nodeType": "YulIdentifier", + "src": "1137:6:42" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5564, + "isOffset": false, + "isSlot": false, + "src": "1137:6:42", + "valueSize": 1 + }, + { + "declaration": 5560, + "isOffset": false, + "isSlot": false, + "src": "1147:6:42", + "valueSize": 1 + } + ], + "id": 5566, + "nodeType": "InlineAssembly", + "src": "1118:41:42" + } + ] + }, + "id": 5568, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_asIAsset", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5561, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5560, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 5568, + "src": "998:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5558, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "998:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5559, + "nodeType": "ArrayTypeName", + "src": "998:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "997:24:42" + }, + "returnParameters": { + "id": 5565, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5564, + "mutability": "mutable", + "name": "assets", + "nodeType": "VariableDeclaration", + "scope": 5568, + "src": "1036:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_memory_ptr", + "typeString": "contract IAsset[]" + }, + "typeName": { + "baseType": { + "id": 5562, + "name": "IAsset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1286, + "src": "1036:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAsset_$1286", + "typeString": "contract IAsset" + } + }, + "id": 5563, + "nodeType": "ArrayTypeName", + "src": "1036:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IAsset_$1286_$dyn_storage_ptr", + "typeString": "contract IAsset[]" + } + }, + "visibility": "internal" + } + ], + "src": "1035:24:42" + }, + "scope": 5883, + "src": "979:182:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5618, + "nodeType": "Block", + "src": "1281:253:42", + "statements": [ + { + "assignments": [ + 5581, + 5583, + 5585 + ], + "declarations": [ + { + "constant": false, + "id": 5581, + "mutability": "mutable", + "name": "indexTokenA", + "nodeType": "VariableDeclaration", + "scope": 5618, + "src": "1288:19:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5580, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1288:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5583, + "mutability": "mutable", + "name": "indexTokenB", + "nodeType": "VariableDeclaration", + "scope": 5618, + "src": "1309:19:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5582, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1309:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5585, + "mutability": "mutable", + "name": "indexTokenC", + "nodeType": "VariableDeclaration", + "scope": 5618, + "src": "1330:19:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5584, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1330:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5591, + "initialValue": { + "arguments": [ + { + "id": 5587, + "name": "tokenA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5570, + "src": "1376:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + { + "id": 5588, + "name": "tokenB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5572, + "src": "1384:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + { + "id": 5589, + "name": "tokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5574, + "src": "1392:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 5586, + "name": "_getSortedTokenIndexes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5882, + "src": "1353:22:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_contract$_IERC20_$1152_$_t_contract$_IERC20_$1152_$_t_contract$_IERC20_$1152_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function (contract IERC20,contract IERC20,contract IERC20) pure returns (uint256,uint256,uint256)" + } + }, + "id": 5590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1353:46:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1287:112:42" + }, + { + "expression": { + "id": 5598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5592, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5578, + "src": "1405:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "33", + "id": 5596, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1427:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + } + ], + "id": 5595, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1414:12:42", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (contract IERC20[] memory)" + }, + "typeName": { + "baseType": { + "id": 5593, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1418:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5594, + "nodeType": "ArrayTypeName", + "src": "1418:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + } + }, + "id": 5597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1414:15:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "src": "1405:24:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5599, + "nodeType": "ExpressionStatement", + "src": "1405:24:42" + }, + { + "expression": { + "id": 5604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5600, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5578, + "src": "1435:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5602, + "indexExpression": { + "id": 5601, + "name": "indexTokenA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5581, + "src": "1442:11:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1435:19:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5603, + "name": "tokenA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5570, + "src": "1457:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1435:28:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5605, + "nodeType": "ExpressionStatement", + "src": "1435:28:42" + }, + { + "expression": { + "id": 5610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5606, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5578, + "src": "1469:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5608, + "indexExpression": { + "id": 5607, + "name": "indexTokenB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5583, + "src": "1476:11:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1469:19:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5609, + "name": "tokenB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5572, + "src": "1491:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1469:28:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5611, + "nodeType": "ExpressionStatement", + "src": "1469:28:42" + }, + { + "expression": { + "id": 5616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5612, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5578, + "src": "1503:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5614, + "indexExpression": { + "id": 5613, + "name": "indexTokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5585, + "src": "1510:11:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1503:19:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5615, + "name": "tokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5574, + "src": "1525:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1503:28:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5617, + "nodeType": "ExpressionStatement", + "src": "1503:28:42" + } + ] + }, + "id": 5619, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_sortTokens", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5575, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5570, + "mutability": "mutable", + "name": "tokenA", + "nodeType": "VariableDeclaration", + "scope": 5619, + "src": "1189:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5569, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1189:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5572, + "mutability": "mutable", + "name": "tokenB", + "nodeType": "VariableDeclaration", + "scope": 5619, + "src": "1208:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5571, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1208:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5574, + "mutability": "mutable", + "name": "tokenC", + "nodeType": "VariableDeclaration", + "scope": 5619, + "src": "1227:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5573, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1227:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1183:59:42" + }, + "returnParameters": { + "id": 5579, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5578, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 5619, + "src": "1257:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5576, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1257:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5577, + "nodeType": "ArrayTypeName", + "src": "1257:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "1256:24:42" + }, + "scope": 5883, + "src": "1163:371:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5713, + "nodeType": "Block", + "src": "1635:326:42", + "statements": [ + { + "expression": { + "id": 5639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5630, + "name": "sorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5628, + "src": "1641:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5637, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5634, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5622, + "src": "1663:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1663:13:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 5636, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1679:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1663:17:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5633, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1650:12:42", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (contract IERC20[] memory)" + }, + "typeName": { + "baseType": { + "id": 5631, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1654:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5632, + "nodeType": "ArrayTypeName", + "src": "1654:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + } + }, + "id": 5638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1650:31:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "src": "1641:40:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5640, + "nodeType": "ExpressionStatement", + "src": "1641:40:42" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5641, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5622, + "src": "1692:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1692:13:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 5643, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1709:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1692:18:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5654, + "nodeType": "IfStatement", + "src": "1688:81:42", + "trueBody": { + "id": 5653, + "nodeType": "Block", + "src": "1712:57:42", + "statements": [ + { + "expression": { + "id": 5649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5645, + "name": "sorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5628, + "src": "1722:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5647, + "indexExpression": { + "hexValue": "30", + "id": 5646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1729:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1722:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5648, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5624, + "src": "1734:5:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1722:17:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5650, + "nodeType": "ExpressionStatement", + "src": "1722:17:42" + }, + { + "expression": { + "id": 5651, + "name": "sorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5628, + "src": "1756:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "functionReturnParameters": 5629, + "id": 5652, + "nodeType": "Return", + "src": "1749:13:42" + } + ] + } + }, + { + "assignments": [ + 5656 + ], + "declarations": [ + { + "constant": false, + "id": 5656, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5713, + "src": "1775:9:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5655, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1775:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5657, + "nodeType": "VariableDeclarationStatement", + "src": "1775:9:42" + }, + { + "body": { + "expression": { + "id": 5685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5677, + "name": "sorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5628, + "src": "1851:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5679, + "indexExpression": { + "id": 5678, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1858:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1851:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 5680, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5622, + "src": "1863:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5684, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5681, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1870:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 5682, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1874:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1870:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1863:13:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1851:25:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5686, + "nodeType": "ExpressionStatement", + "src": "1851:25:42" + }, + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 5673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5663, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1814:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 5664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1818:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1814:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 5666, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5622, + "src": "1823:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5670, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5667, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1830:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 5668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1834:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1830:5:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1823:13:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 5671, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5624, + "src": "1839:5:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1823:21:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1814:30:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5687, + "initializationExpression": { + "expression": { + "id": 5661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5658, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1795:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 5659, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5622, + "src": "1799:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1799:13:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1795:17:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5662, + "nodeType": "ExpressionStatement", + "src": "1795:17:42" + }, + "loopExpression": { + "expression": { + "id": 5675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "--", + "prefix": false, + "src": "1846:3:42", + "subExpression": { + "id": 5674, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1846:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5676, + "nodeType": "ExpressionStatement", + "src": "1846:3:42" + }, + "nodeType": "ForStatement", + "src": "1790:86:42" + }, + { + "body": { + "expression": { + "id": 5704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5698, + "name": "sorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5628, + "src": "1914:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5700, + "indexExpression": { + "id": 5699, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5689, + "src": "1921:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1914:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 5701, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5622, + "src": "1926:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5703, + "indexExpression": { + "id": 5702, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5689, + "src": "1933:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1926:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1914:21:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5705, + "nodeType": "ExpressionStatement", + "src": "1914:21:42" + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5692, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5689, + "src": "1902:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5693, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1906:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1902:5:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5706, + "initializationExpression": { + "assignments": [ + 5689 + ], + "declarations": [ + { + "constant": false, + "id": 5689, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 5706, + "src": "1887:9:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5688, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1887:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5691, + "initialValue": { + "hexValue": "30", + "id": 5690, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1899:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1887:13:42" + }, + "loopExpression": { + "expression": { + "id": 5696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "1909:3:42", + "subExpression": { + "id": 5695, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5689, + "src": "1909:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5697, + "nodeType": "ExpressionStatement", + "src": "1909:3:42" + }, + "nodeType": "ForStatement", + "src": "1882:53:42" + }, + { + "expression": { + "id": 5711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5707, + "name": "sorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5628, + "src": "1941:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5709, + "indexExpression": { + "id": 5708, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5656, + "src": "1948:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "1941:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5710, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5624, + "src": "1953:5:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "1941:17:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5712, + "nodeType": "ExpressionStatement", + "src": "1941:17:42" + } + ] + }, + "id": 5714, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_insertSorted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5625, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5622, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 5714, + "src": "1559:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5620, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1559:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5621, + "nodeType": "ArrayTypeName", + "src": "1559:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5624, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 5714, + "src": "1583:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5623, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1583:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1558:38:42" + }, + "returnParameters": { + "id": 5629, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5628, + "mutability": "mutable", + "name": "sorted", + "nodeType": "VariableDeclaration", + "scope": 5714, + "src": "1611:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5626, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1611:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5627, + "nodeType": "ArrayTypeName", + "src": "1611:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "1610:24:42" + }, + "scope": 5883, + "src": "1536:425:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5765, + "nodeType": "Block", + "src": "2067:195:42", + "statements": [ + { + "assignments": [ + 5726 + ], + "declarations": [ + { + "constant": false, + "id": 5726, + "mutability": "mutable", + "name": "numTokens", + "nodeType": "VariableDeclaration", + "scope": 5765, + "src": "2073:17:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5725, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2073:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5729, + "initialValue": { + "expression": { + "id": 5727, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5717, + "src": "2093:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2093:13:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2073:33:42" + }, + { + "expression": { + "id": 5738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5730, + "name": "newTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5723, + "src": "2112:9:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5734, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5726, + "src": "2137:9:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 5735, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2149:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2137:13:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5733, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "2124:12:42", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (contract IERC20[] memory)" + }, + "typeName": { + "baseType": { + "id": 5731, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2128:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5732, + "nodeType": "ArrayTypeName", + "src": "2128:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + } + }, + "id": 5737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2124:27:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "src": "2112:39:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5739, + "nodeType": "ExpressionStatement", + "src": "2112:39:42" + }, + { + "body": { + "expression": { + "id": 5756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5750, + "name": "newTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5723, + "src": "2198:9:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5752, + "indexExpression": { + "id": 5751, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5741, + "src": "2208:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2198:12:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 5753, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5717, + "src": "2213:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5755, + "indexExpression": { + "id": 5754, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5741, + "src": "2220:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2213:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "2198:24:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5757, + "nodeType": "ExpressionStatement", + "src": "2198:24:42" + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5744, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5741, + "src": "2178:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5745, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5726, + "src": "2182:9:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2178:13:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5758, + "initializationExpression": { + "assignments": [ + 5741 + ], + "declarations": [ + { + "constant": false, + "id": 5741, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5758, + "src": "2163:9:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5740, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2163:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5743, + "initialValue": { + "hexValue": "30", + "id": 5742, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2175:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "2163:13:42" + }, + "loopExpression": { + "expression": { + "id": 5748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "2193:3:42", + "subExpression": { + "id": 5747, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5741, + "src": "2195:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5749, + "nodeType": "ExpressionStatement", + "src": "2193:3:42" + }, + "nodeType": "ForStatement", + "src": "2158:64:42" + }, + { + "expression": { + "id": 5763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 5759, + "name": "newTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5723, + "src": "2228:9:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5761, + "indexExpression": { + "id": 5760, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5726, + "src": "2238:9:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "2228:20:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5762, + "name": "newToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5719, + "src": "2251:8:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "2228:31:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5764, + "nodeType": "ExpressionStatement", + "src": "2228:31:42" + } + ] + }, + "id": 5766, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_appendToken", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5720, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5717, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 5766, + "src": "1985:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5715, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1985:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5716, + "nodeType": "ArrayTypeName", + "src": "1985:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5719, + "mutability": "mutable", + "name": "newToken", + "nodeType": "VariableDeclaration", + "scope": 5766, + "src": "2009:15:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5718, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2009:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1984:41:42" + }, + "returnParameters": { + "id": 5724, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5723, + "mutability": "mutable", + "name": "newTokens", + "nodeType": "VariableDeclaration", + "scope": 5766, + "src": "2040:25:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5721, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2040:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5722, + "nodeType": "ArrayTypeName", + "src": "2040:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "2039:27:42" + }, + "scope": 5883, + "src": "1963:299:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5807, + "nodeType": "Block", + "src": "2350:405:42", + "statements": [ + { + "assignments": [ + 5777 + ], + "declarations": [ + { + "constant": false, + "id": 5777, + "mutability": "mutable", + "name": "tokensLength", + "nodeType": "VariableDeclaration", + "scope": 5807, + "src": "2559:20:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5776, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2559:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5780, + "initialValue": { + "expression": { + "id": 5778, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5769, + "src": "2582:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5779, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2582:13:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2559:36:42" + }, + { + "body": { + "id": 5800, + "nodeType": "Block", + "src": "2644:73:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 5791, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5769, + "src": "2658:6:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 5793, + "indexExpression": { + "id": 5792, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5782, + "src": "2665:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2658:9:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 5794, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5771, + "src": "2671:5:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "2658:18:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5799, + "nodeType": "IfStatement", + "src": "2654:57:42", + "trueBody": { + "id": 5798, + "nodeType": "Block", + "src": "2678:33:42", + "statements": [ + { + "expression": { + "id": 5796, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5782, + "src": "2699:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 5775, + "id": 5797, + "nodeType": "Return", + "src": "2692:8:42" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5785, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5782, + "src": "2621:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5786, + "name": "tokensLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5777, + "src": "2625:12:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2621:16:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5801, + "initializationExpression": { + "assignments": [ + 5782 + ], + "declarations": [ + { + "constant": false, + "id": 5782, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5801, + "src": "2606:9:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2606:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5784, + "initialValue": { + "hexValue": "30", + "id": 5783, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2618:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "2606:13:42" + }, + "loopExpression": { + "expression": { + "id": 5789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "2639:3:42", + "subExpression": { + "id": 5788, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5782, + "src": "2639:1:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5790, + "nodeType": "ExpressionStatement", + "src": "2639:3:42" + }, + "nodeType": "ForStatement", + "src": "2601:116:42" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 5803, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2731:6:42", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_TOKEN", + "nodeType": "MemberAccess", + "referencedDeclaration": 641, + "src": "2731:20:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5802, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "2723:7:42", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 5805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2723:29:42", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5806, + "nodeType": "ExpressionStatement", + "src": "2723:29:42" + } + ] + }, + "id": 5808, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_findTokenIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5772, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5769, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 5808, + "src": "2289:22:42", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5767, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2289:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5768, + "nodeType": "ArrayTypeName", + "src": "2289:8:42", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5771, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 5808, + "src": "2313:12:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5770, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2313:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2288:38:42" + }, + "returnParameters": { + "id": 5775, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5774, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 5808, + "src": "2341:7:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2341:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2340:9:42" + }, + "scope": 5883, + "src": "2264:491:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5881, + "nodeType": "Block", + "src": "2963:688:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5823, + "name": "tokenA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5810, + "src": "2973:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5824, + "name": "tokenB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5812, + "src": "2982:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "2973:15:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5879, + "nodeType": "Block", + "src": "3309:340:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5853, + "name": "tokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5814, + "src": "3350:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5854, + "name": "tokenB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5812, + "src": "3359:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "3350:15:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5862, + "name": "tokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5814, + "src": "3458:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5863, + "name": "tokenA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5810, + "src": "3467:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "3458:15:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5876, + "nodeType": "Block", + "src": "3562:81:42", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "31", + "id": 5871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3624:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + { + "hexValue": "30", + "id": 5872, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3627:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "32", + "id": 5873, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3630:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + } + ], + "id": 5874, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3623:9:42", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_rational_1_by_1_$_t_rational_0_by_1_$_t_rational_2_by_1_$", + "typeString": "tuple(int_const 1,int_const 0,int_const 2)" + } + }, + "functionReturnParameters": 5822, + "id": 5875, + "nodeType": "Return", + "src": "3616:16:42" + } + ] + }, + "id": 5877, + "nodeType": "IfStatement", + "src": "3454:189:42", + "trueBody": { + "id": 5870, + "nodeType": "Block", + "src": "3475:81:42", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "32", + "id": 5865, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3537:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + { + "hexValue": "30", + "id": 5866, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3540:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "31", + "id": 5867, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3543:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "id": 5868, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3536:9:42", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_rational_2_by_1_$_t_rational_0_by_1_$_t_rational_1_by_1_$", + "typeString": "tuple(int_const 2,int_const 0,int_const 1)" + } + }, + "functionReturnParameters": 5822, + "id": 5869, + "nodeType": "Return", + "src": "3529:16:42" + } + ] + } + }, + "id": 5878, + "nodeType": "IfStatement", + "src": "3346:297:42", + "trueBody": { + "id": 5861, + "nodeType": "Block", + "src": "3367:81:42", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "32", + "id": 5856, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3429:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + { + "hexValue": "31", + "id": 5857, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3432:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + { + "hexValue": "30", + "id": 5858, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3435:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 5859, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3428:9:42", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_rational_2_by_1_$_t_rational_1_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(int_const 2,int_const 1,int_const 0)" + } + }, + "functionReturnParameters": 5822, + "id": 5860, + "nodeType": "Return", + "src": "3421:16:42" + } + ] + } + } + ] + }, + "id": 5880, + "nodeType": "IfStatement", + "src": "2969:680:42", + "trueBody": { + "id": 5852, + "nodeType": "Block", + "src": "2990:313:42", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5826, + "name": "tokenB", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5812, + "src": "3004:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5827, + "name": "tokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5814, + "src": "3013:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "3004:15:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 5837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5835, + "name": "tokenA", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5810, + "src": "3112:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5836, + "name": "tokenC", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5814, + "src": "3121:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "3112:15:42", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 5849, + "nodeType": "Block", + "src": "3216:81:42", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "31", + "id": 5844, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3278:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + { + "hexValue": "32", + "id": 5845, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3281:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + { + "hexValue": "30", + "id": 5846, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3284:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 5847, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3277:9:42", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_rational_1_by_1_$_t_rational_2_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(int_const 1,int_const 2,int_const 0)" + } + }, + "functionReturnParameters": 5822, + "id": 5848, + "nodeType": "Return", + "src": "3270:16:42" + } + ] + }, + "id": 5850, + "nodeType": "IfStatement", + "src": "3108:189:42", + "trueBody": { + "id": 5843, + "nodeType": "Block", + "src": "3129:81:42", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "30", + "id": 5838, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3191:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "32", + "id": 5839, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3194:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + { + "hexValue": "31", + "id": 5840, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3197:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "id": 5841, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3190:9:42", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_rational_2_by_1_$_t_rational_1_by_1_$", + "typeString": "tuple(int_const 0,int_const 2,int_const 1)" + } + }, + "functionReturnParameters": 5822, + "id": 5842, + "nodeType": "Return", + "src": "3183:16:42" + } + ] + } + }, + "id": 5851, + "nodeType": "IfStatement", + "src": "3000:297:42", + "trueBody": { + "id": 5834, + "nodeType": "Block", + "src": "3021:81:42", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "30", + "id": 5829, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3083:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "31", + "id": 5830, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3086:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + { + "hexValue": "32", + "id": 5831, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3089:1:42", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + } + ], + "id": 5832, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3082:9:42", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_rational_1_by_1_$_t_rational_2_by_1_$", + "typeString": "tuple(int_const 0,int_const 1,int_const 2)" + } + }, + "functionReturnParameters": 5822, + "id": 5833, + "nodeType": "Return", + "src": "3075:16:42" + } + ] + } + } + ] + } + } + ] + }, + "id": 5882, + "implemented": true, + "kind": "freeFunction", + "modifiers": [], + "name": "_getSortedTokenIndexes", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5815, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5810, + "mutability": "mutable", + "name": "tokenA", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "2794:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5809, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2794:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5812, + "mutability": "mutable", + "name": "tokenB", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "2813:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5811, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2813:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5814, + "mutability": "mutable", + "name": "tokenC", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "2832:13:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 5813, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2832:6:42", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "2788:59:42" + }, + "returnParameters": { + "id": 5822, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5817, + "mutability": "mutable", + "name": "indexTokenA", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "2879:19:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5816, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2879:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5819, + "mutability": "mutable", + "name": "indexTokenB", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "2908:19:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5818, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2908:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5821, + "mutability": "mutable", + "name": "indexTokenC", + "nodeType": "VariableDeclaration", + "scope": 5882, + "src": "2937:19:42", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5820, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2937:7:42", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2869:93:42" + }, + "scope": 5883, + "src": "2757:894:42", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "src": "688:2964:42" + }, + "id": 42 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "exportedSymbols": { + "InputHelpers": [ + 5994 + ] + }, + "id": 5995, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5884, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:43" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 5885, + "nodeType": "ImportDirective", + "scope": 5995, + "sourceUnit": 1153, + "src": "713:87:43", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 5886, + "nodeType": "ImportDirective", + "scope": 5995, + "sourceUnit": 1012, + "src": "801:90:43", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 5994, + "linearizedBaseContracts": [ + 5994 + ], + "name": "InputHelpers", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 5901, + "nodeType": "Block", + "src": "988:63:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5894, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5888, + "src": "1007:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 5895, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5890, + "src": "1012:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1007:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5897, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1015:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INPUT_LENGTH_MISMATCH", + "nodeType": "MemberAccess", + "referencedDeclaration": 572, + "src": "1015:28:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5893, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "998:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "998:46:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5900, + "nodeType": "ExpressionStatement", + "src": "998:46:43" + } + ] + }, + "id": 5902, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureInputLengthMatch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5891, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5888, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 5902, + "src": "952:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5887, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "952:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5890, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 5902, + "src": "963:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5889, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "963:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "951:22:43" + }, + "returnParameters": { + "id": 5892, + "nodeType": "ParameterList", + "parameters": [], + "src": "988:0:43" + }, + "scope": 5994, + "src": "920:131:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5923, + "nodeType": "Block", + "src": "1166:73:43", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 5918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5912, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5904, + "src": "1185:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 5913, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5906, + "src": "1190:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1185:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5915, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5906, + "src": "1195:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 5916, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5908, + "src": "1200:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1195:6:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1185:16:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5919, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1203:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INPUT_LENGTH_MISMATCH", + "nodeType": "MemberAccess", + "referencedDeclaration": 572, + "src": "1203:28:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5911, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1176:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5921, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1176:56:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5922, + "nodeType": "ExpressionStatement", + "src": "1176:56:43" + } + ] + }, + "id": 5924, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureInputLengthMatch", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5909, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5904, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 5924, + "src": "1098:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5903, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1098:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5906, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 5924, + "src": "1117:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5905, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1117:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 5908, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 5924, + "src": "1136:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5907, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1136:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1088:63:43" + }, + "returnParameters": { + "id": 5910, + "nodeType": "ParameterList", + "parameters": [], + "src": "1166:0:43" + }, + "scope": 5994, + "src": "1057:182:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5941, + "nodeType": "Block", + "src": "1311:208:43", + "statements": [ + { + "assignments": [ + 5934 + ], + "declarations": [ + { + "constant": false, + "id": 5934, + "mutability": "mutable", + "name": "addressArray", + "nodeType": "VariableDeclaration", + "scope": 5941, + "src": "1321:29:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 5932, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1321:7:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5933, + "nodeType": "ArrayTypeName", + "src": "1321:9:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "id": 5935, + "nodeType": "VariableDeclarationStatement", + "src": "1321:29:43" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "1425:45:43", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1439:21:43", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1455:5:43" + }, + "variableNames": [ + { + "name": "addressArray", + "nodeType": "YulIdentifier", + "src": "1439:12:43" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 5934, + "isOffset": false, + "isSlot": false, + "src": "1439:12:43", + "valueSize": 1 + }, + { + "declaration": 5927, + "isOffset": false, + "isSlot": false, + "src": "1455:5:43", + "valueSize": 1 + } + ], + "id": 5936, + "nodeType": "InlineAssembly", + "src": "1416:54:43" + }, + { + "expression": { + "arguments": [ + { + "id": 5938, + "name": "addressArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5934, + "src": "1499:12:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + ], + "id": 5937, + "name": "ensureArrayIsSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5942, + 5993 + ], + "referencedDeclaration": 5993, + "src": "1479:19:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$__$", + "typeString": "function (address[] memory) pure" + } + }, + "id": 5939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1479:33:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5940, + "nodeType": "ExpressionStatement", + "src": "1479:33:43" + } + ] + }, + "id": 5942, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureArrayIsSorted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5928, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5927, + "mutability": "mutable", + "name": "array", + "nodeType": "VariableDeclaration", + "scope": 5942, + "src": "1274:21:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 5925, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1274:6:43", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 5926, + "nodeType": "ArrayTypeName", + "src": "1274:8:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "src": "1273:23:43" + }, + "returnParameters": { + "id": 5929, + "nodeType": "ParameterList", + "parameters": [], + "src": "1311:0:43" + }, + "scope": 5994, + "src": "1245:274:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 5992, + "nodeType": "Block", + "src": "1592:307:43", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 5948, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5945, + "src": "1606:5:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 5949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1606:12:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "32", + "id": 5950, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1621:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "1606:16:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5954, + "nodeType": "IfStatement", + "src": "1602:53:43", + "trueBody": { + "id": 5953, + "nodeType": "Block", + "src": "1624:31:43", + "statements": [ + { + "functionReturnParameters": 5947, + "id": 5952, + "nodeType": "Return", + "src": "1638:7:43" + } + ] + } + }, + { + "assignments": [ + 5956 + ], + "declarations": [ + { + "constant": false, + "id": 5956, + "mutability": "mutable", + "name": "previous", + "nodeType": "VariableDeclaration", + "scope": 5992, + "src": "1665:16:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5955, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1665:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5960, + "initialValue": { + "baseExpression": { + "id": 5957, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5945, + "src": "1684:5:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 5959, + "indexExpression": { + "hexValue": "30", + "id": 5958, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1690:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1684:8:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1665:27:43" + }, + { + "body": { + "id": 5990, + "nodeType": "Block", + "src": "1745:148:43", + "statements": [ + { + "assignments": [ + 5973 + ], + "declarations": [ + { + "constant": false, + "id": 5973, + "mutability": "mutable", + "name": "current", + "nodeType": "VariableDeclaration", + "scope": 5990, + "src": "1759:15:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 5972, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1759:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 5977, + "initialValue": { + "baseExpression": { + "id": 5974, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5945, + "src": "1777:5:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 5976, + "indexExpression": { + "id": 5975, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5962, + "src": "1783:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1777:8:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1759:26:43" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 5981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5979, + "name": "previous", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5956, + "src": "1808:8:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 5980, + "name": "current", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5973, + "src": "1819:7:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1808:18:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 5982, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1828:6:43", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 5983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNSORTED_ARRAY", + "nodeType": "MemberAccess", + "referencedDeclaration": 566, + "src": "1828:21:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 5978, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1799:8:43", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 5984, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1799:51:43", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 5985, + "nodeType": "ExpressionStatement", + "src": "1799:51:43" + }, + { + "expression": { + "id": 5988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 5986, + "name": "previous", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5956, + "src": "1864:8:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 5987, + "name": "current", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5973, + "src": "1875:7:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1864:18:43", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5989, + "nodeType": "ExpressionStatement", + "src": "1864:18:43" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 5968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 5965, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5962, + "src": "1722:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 5966, + "name": "array", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5945, + "src": "1726:5:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 5967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1726:12:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1722:16:43", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 5991, + "initializationExpression": { + "assignments": [ + 5962 + ], + "declarations": [ + { + "constant": false, + "id": 5962, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 5991, + "src": "1707:9:43", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5961, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1707:7:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 5964, + "initialValue": { + "hexValue": "31", + "id": 5963, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1719:1:43", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "VariableDeclarationStatement", + "src": "1707:13:43" + }, + "loopExpression": { + "expression": { + "id": 5970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "1740:3:43", + "subExpression": { + "id": 5969, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5962, + "src": "1742:1:43", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 5971, + "nodeType": "ExpressionStatement", + "src": "1740:3:43" + }, + "nodeType": "ForStatement", + "src": "1702:191:43" + } + ] + }, + "id": 5993, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ensureArrayIsSorted", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 5946, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 5945, + "mutability": "mutable", + "name": "array", + "nodeType": "VariableDeclaration", + "scope": 5993, + "src": "1554:22:43", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 5943, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1554:7:43", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 5944, + "nodeType": "ArrayTypeName", + "src": "1554:9:43", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "1553:24:43" + }, + "returnParameters": { + "id": 5947, + "nodeType": "ParameterList", + "parameters": [], + "src": "1592:0:43" + }, + "scope": 5994, + "src": "1525:374:43", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 5995, + "src": "893:1008:43" + } + ], + "src": "688:1214:43" + }, + "id": 43 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/SingletonAuthentication.sol", + "exportedSymbols": { + "SingletonAuthentication": [ + 6089 + ] + }, + "id": 6090, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 5996, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:44" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "file": "@balancer-labs/v2-interfaces/contracts/liquidity-mining/IAuthorizerAdaptor.sol", + "id": 5997, + "nodeType": "ImportDirective", + "scope": 6090, + "sourceUnit": 29, + "src": "713:88:44", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 5998, + "nodeType": "ImportDirective", + "scope": 6090, + "sourceUnit": 2022, + "src": "802:65:44", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/Authentication.sol", + "file": "./Authentication.sol", + "id": 5999, + "nodeType": "ImportDirective", + "scope": 6090, + "sourceUnit": 5118, + "src": "869:30:44", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 6000, + "name": "Authentication", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5117, + "src": "946:14:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Authentication_$5117", + "typeString": "contract Authentication" + } + }, + "id": 6001, + "nodeType": "InheritanceSpecifier", + "src": "946:14:44" + } + ], + "contractDependencies": [ + 1022, + 5117 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 6089, + "linearizedBaseContracts": [ + 6089, + 5117, + 1022 + ], + "name": "SingletonAuthentication", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 6003, + "mutability": "immutable", + "name": "_vault", + "nodeType": "VariableDeclaration", + "scope": 6089, + "src": "967:31:44", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6002, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "967:6:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 6024, + "nodeType": "Block", + "src": "1152:31:44", + "statements": [ + { + "expression": { + "id": 6022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6020, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6003, + "src": "1162:6:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6021, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6005, + "src": "1171:5:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "src": "1162:14:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 6023, + "nodeType": "ExpressionStatement", + "src": "1162:14:44" + } + ] + }, + "id": 6025, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 6014, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1143:4:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$6089", + "typeString": "contract SingletonAuthentication" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SingletonAuthentication_$6089", + "typeString": "contract SingletonAuthentication" + } + ], + "id": 6013, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1135:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6012, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1135:7:44", + "typeDescriptions": {} + } + }, + "id": 6015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1135:13:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6011, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1127:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6010, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1127:7:44", + "typeDescriptions": {} + } + }, + "id": 6016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1127:22:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6009, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1119:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6008, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1119:7:44", + "typeDescriptions": {} + } + }, + "id": 6017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1119:31:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 6018, + "modifierName": { + "id": 6007, + "name": "Authentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5117, + "src": "1104:14:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Authentication_$5117_$", + "typeString": "type(contract Authentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1104:47:44" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6006, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6005, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 6025, + "src": "1090:12:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6004, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1090:6:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1089:14:44" + }, + "returnParameters": { + "id": 6019, + "nodeType": "ParameterList", + "parameters": [], + "src": "1152:0:44" + }, + "scope": 6089, + "src": "1078:105:44", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6033, + "nodeType": "Block", + "src": "1296:30:44", + "statements": [ + { + "expression": { + "id": 6031, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6003, + "src": "1313:6:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "functionReturnParameters": 6030, + "id": 6032, + "nodeType": "Return", + "src": "1306:13:44" + } + ] + }, + "documentation": { + "id": 6026, + "nodeType": "StructuredDocumentation", + "src": "1189:53:44", + "text": " @notice Returns the Balancer Vault" + }, + "functionSelector": "8d928af8", + "id": 6034, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6027, + "nodeType": "ParameterList", + "parameters": [], + "src": "1264:2:44" + }, + "returnParameters": { + "id": 6030, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6029, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6034, + "src": "1288:6:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 6028, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1288:6:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1287:8:44" + }, + "scope": 6089, + "src": "1247:79:44", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6045, + "nodeType": "Block", + "src": "1445:50:44", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6040, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6034, + "src": "1462:8:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 6041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1462:10:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 6042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getAuthorizer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1581, + "src": "1462:24:44", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view external returns (contract IAuthorizer)" + } + }, + "id": 6043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1462:26:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "functionReturnParameters": 6039, + "id": 6044, + "nodeType": "Return", + "src": "1455:33:44" + } + ] + }, + "documentation": { + "id": 6035, + "nodeType": "StructuredDocumentation", + "src": "1332:49:44", + "text": " @notice Returns the Authorizer" + }, + "functionSelector": "aaabadc5", + "id": 6046, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuthorizer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6036, + "nodeType": "ParameterList", + "parameters": [], + "src": "1408:2:44" + }, + "returnParameters": { + "id": 6039, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6038, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6046, + "src": "1432:11:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 6037, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "1432:11:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1431:13:44" + }, + "scope": 6089, + "src": "1386:109:44", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 5116 + ], + "body": { + "id": 6067, + "nodeType": "Block", + "src": "1595:84:44", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6059, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6048, + "src": "1639:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6060, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6050, + "src": "1649:7:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 6063, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1666:4:44", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SingletonAuthentication_$6089", + "typeString": "contract SingletonAuthentication" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_SingletonAuthentication_$6089", + "typeString": "contract SingletonAuthentication" + } + ], + "id": 6062, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1658:7:44", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 6061, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1658:7:44", + "typeDescriptions": {} + } + }, + "id": 6064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1658:13:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6056, + "name": "getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6046, + "src": "1612:13:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 6057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1612:15:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "id": 6058, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "canPerform", + "nodeType": "MemberAccess", + "referencedDeclaration": 1300, + "src": "1612:26:44", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view external returns (bool)" + } + }, + "id": 6065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1612:60:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6055, + "id": 6066, + "nodeType": "Return", + "src": "1605:67:44" + } + ] + }, + "id": 6068, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6052, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1571:8:44" + }, + "parameters": { + "id": 6051, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6048, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 6068, + "src": "1522:16:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6047, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1522:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6050, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 6068, + "src": "1540:15:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6049, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1540:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1521:35:44" + }, + "returnParameters": { + "id": 6055, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6054, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6068, + "src": "1589:4:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6053, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1589:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1588:6:44" + }, + "scope": 6089, + "src": "1501:178:44", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6087, + "nodeType": "Block", + "src": "1815:76:44", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6082, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6070, + "src": "1859:8:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6083, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6072, + "src": "1869:7:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6084, + "name": "where", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6074, + "src": "1878:5:44", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6079, + "name": "getAuthorizer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6046, + "src": "1832:13:44", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view returns (contract IAuthorizer)" + } + }, + "id": 6080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1832:15:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "id": 6081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "canPerform", + "nodeType": "MemberAccess", + "referencedDeclaration": 1300, + "src": "1832:26:44", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address,address) view external returns (bool)" + } + }, + "id": 6085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1832:52:44", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6078, + "id": 6086, + "nodeType": "Return", + "src": "1825:59:44" + } + ] + }, + "id": 6088, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_canPerform", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6075, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6070, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 6088, + "src": "1715:16:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6069, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1715:7:44", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6072, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 6088, + "src": "1741:15:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6071, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1741:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6074, + "mutability": "mutable", + "name": "where", + "nodeType": "VariableDeclaration", + "scope": 6088, + "src": "1766:13:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6073, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1766:7:44", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1705:80:44" + }, + "returnParameters": { + "id": 6078, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6077, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6088, + "src": "1809:4:44", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6076, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1809:4:44", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1808:6:44" + }, + "scope": 6089, + "src": "1685:206:44", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 6090, + "src": "901:992:44" + } + ], + "src": "688:1206:44" + }, + "id": 44 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/TemporarilyPausable.sol", + "exportedSymbols": { + "TemporarilyPausable": [ + 6282 + ] + }, + "id": 6283, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6091, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:45" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 6092, + "nodeType": "ImportDirective", + "scope": 6283, + "sourceUnit": 1012, + "src": "713:90:45", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/ITemporarilyPausable.sol", + "id": 6093, + "nodeType": "ImportDirective", + "scope": 6283, + "sourceUnit": 1060, + "src": "804:96:45", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 6095, + "name": "ITemporarilyPausable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1059, + "src": "2043:20:45", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ITemporarilyPausable_$1059", + "typeString": "contract ITemporarilyPausable" + } + }, + "id": 6096, + "nodeType": "InheritanceSpecifier", + "src": "2043:20:45" + } + ], + "contractDependencies": [ + 1059 + ], + "contractKind": "contract", + "documentation": { + "id": 6094, + "nodeType": "StructuredDocumentation", + "src": "902:1099:45", + "text": " @dev Allows for a contract to be paused during an initial period after deployment, disabling functionality. Can be\n used as an emergency switch in case a security vulnerability or threat is identified.\n The contract can only be paused during the Pause Window, a period that starts at deployment. It can also be\n unpaused and repaused any number of times during this period. This is intended to serve as a safety measure: it lets\n system managers react quickly to potentially dangerous situations, knowing that this action is reversible if careful\n analysis later determines there was a false alarm.\n If the contract is paused when the Pause Window finishes, it will remain in the paused state through an additional\n Buffer Period, after which it will be automatically unpaused forever. This is to ensure there is always enough time\n to react to an emergency, even if the threat is discovered shortly before the Pause Window expires.\n Note that since the contract can only be paused within the Pause Window, unpausing during the Buffer Period is\n irreversible." + }, + "fullyImplemented": true, + "id": 6282, + "linearizedBaseContracts": [ + 6282, + 1059 + ], + "name": "TemporarilyPausable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 6099, + "mutability": "constant", + "name": "_MAX_PAUSE_WINDOW_DURATION", + "nodeType": "VariableDeclaration", + "scope": 6282, + "src": "2230:61:45", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6097, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2230:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3930", + "id": 6098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2284:7:45", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_7776000_by_1", + "typeString": "int_const 7776000" + }, + "value": "90" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6102, + "mutability": "constant", + "name": "_MAX_BUFFER_PERIOD_DURATION", + "nodeType": "VariableDeclaration", + "scope": 6282, + "src": "2297:62:45", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2297:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3330", + "id": 6101, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2352:7:45", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_2592000_by_1", + "typeString": "int_const 2592000" + }, + "value": "30" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6104, + "mutability": "immutable", + "name": "_pauseWindowEndTime", + "nodeType": "VariableDeclaration", + "scope": 6282, + "src": "2366:45:45", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6103, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2366:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6106, + "mutability": "immutable", + "name": "_bufferPeriodEndTime", + "nodeType": "VariableDeclaration", + "scope": 6282, + "src": "2417:46:45", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6105, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2417:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 6108, + "mutability": "mutable", + "name": "_paused", + "nodeType": "VariableDeclaration", + "scope": 6282, + "src": "2470:20:45", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6107, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2470:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 6148, + "nodeType": "Block", + "src": "2568:418:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6116, + "name": "pauseWindowDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6110, + "src": "2587:19:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 6117, + "name": "_MAX_PAUSE_WINDOW_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6099, + "src": "2610:26:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2587:49:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6119, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2638:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MAX_PAUSE_WINDOW_DURATION", + "nodeType": "MemberAccess", + "referencedDeclaration": 788, + "src": "2638:32:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6115, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2578:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2578:93:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6122, + "nodeType": "ExpressionStatement", + "src": "2578:93:45" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6124, + "name": "bufferPeriodDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6112, + "src": "2690:20:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 6125, + "name": "_MAX_BUFFER_PERIOD_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6102, + "src": "2714:27:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2690:51:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6127, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2743:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MAX_BUFFER_PERIOD_DURATION", + "nodeType": "MemberAccess", + "referencedDeclaration": 791, + "src": "2743:33:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6123, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2681:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2681:96:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6130, + "nodeType": "ExpressionStatement", + "src": "2681:96:45" + }, + { + "assignments": [ + 6132 + ], + "declarations": [ + { + "constant": false, + "id": 6132, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nodeType": "VariableDeclaration", + "scope": 6148, + "src": "2788:26:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2788:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6137, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6133, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2817:5:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2817:15:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 6135, + "name": "pauseWindowDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6110, + "src": "2835:19:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2817:37:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2788:66:45" + }, + { + "expression": { + "id": 6140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6138, + "name": "_pauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6104, + "src": "2865:19:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6139, + "name": "pauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6132, + "src": "2887:18:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2865:40:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6141, + "nodeType": "ExpressionStatement", + "src": "2865:40:45" + }, + { + "expression": { + "id": 6146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6142, + "name": "_bufferPeriodEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6106, + "src": "2915:20:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6143, + "name": "pauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6132, + "src": "2938:18:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 6144, + "name": "bufferPeriodDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6112, + "src": "2959:20:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2938:41:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2915:64:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6147, + "nodeType": "ExpressionStatement", + "src": "2915:64:45" + } + ] + }, + "id": 6149, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6113, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6110, + "mutability": "mutable", + "name": "pauseWindowDuration", + "nodeType": "VariableDeclaration", + "scope": 6149, + "src": "2509:27:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6109, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2509:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6112, + "mutability": "mutable", + "name": "bufferPeriodDuration", + "nodeType": "VariableDeclaration", + "scope": 6149, + "src": "2538:28:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6111, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2538:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2508:59:45" + }, + "returnParameters": { + "id": 6114, + "nodeType": "ParameterList", + "parameters": [], + "src": "2568:0:45" + }, + "scope": 6282, + "src": "2497:489:45", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6156, + "nodeType": "Block", + "src": "3080:46:45", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6152, + "name": "_ensureNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6236, + "src": "3090:16:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 6153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3090:18:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6154, + "nodeType": "ExpressionStatement", + "src": "3090:18:45" + }, + { + "id": 6155, + "nodeType": "PlaceholderStatement", + "src": "3118:1:45" + } + ] + }, + "documentation": { + "id": 6150, + "nodeType": "StructuredDocumentation", + "src": "2992:58:45", + "text": " @dev Reverts if the contract is paused." + }, + "id": 6157, + "name": "whenNotPaused", + "nodeType": "ModifierDefinition", + "parameters": { + "id": 6151, + "nodeType": "ParameterList", + "parameters": [], + "src": "3077:2:45" + }, + "src": "3055:71:45", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1058 + ], + "body": { + "id": 6184, + "nodeType": "Block", + "src": "3484:153:45", + "statements": [ + { + "expression": { + "id": 6172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6168, + "name": "paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6162, + "src": "3494:6:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6171, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "3503:15:45", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6169, + "name": "_isNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6265, + "src": "3504:12:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 6170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3504:14:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3494:24:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6173, + "nodeType": "ExpressionStatement", + "src": "3494:24:45" + }, + { + "expression": { + "id": 6177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6174, + "name": "pauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6164, + "src": "3528:18:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6175, + "name": "_getPauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6273, + "src": "3549:22:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 6176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3549:24:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3528:45:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6178, + "nodeType": "ExpressionStatement", + "src": "3528:45:45" + }, + { + "expression": { + "id": 6182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6179, + "name": "bufferPeriodEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6166, + "src": "3583:19:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6180, + "name": "_getBufferPeriodEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6281, + "src": "3605:23:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 6181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3605:25:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3583:47:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 6183, + "nodeType": "ExpressionStatement", + "src": "3583:47:45" + } + ] + }, + "documentation": { + "id": 6158, + "nodeType": "StructuredDocumentation", + "src": "3132:137:45", + "text": " @dev Returns the current contract pause status, as well as the end times of the Pause Window and Buffer\n Period." + }, + "functionSelector": "1c0de051", + "id": 6185, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPausedState", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 6160, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3338:8:45" + }, + "parameters": { + "id": 6159, + "nodeType": "ParameterList", + "parameters": [], + "src": "3297:2:45" + }, + "returnParameters": { + "id": 6167, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6162, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 6185, + "src": "3377:11:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6161, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3377:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6164, + "mutability": "mutable", + "name": "pauseWindowEndTime", + "nodeType": "VariableDeclaration", + "scope": 6185, + "src": "3402:26:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6163, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3402:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6166, + "mutability": "mutable", + "name": "bufferPeriodEndTime", + "nodeType": "VariableDeclaration", + "scope": 6185, + "src": "3442:27:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6165, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3442:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3363:116:45" + }, + "scope": 6282, + "src": "3274:363:45", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6223, + "nodeType": "Block", + "src": "3955:316:45", + "statements": [ + { + "condition": { + "id": 6191, + "name": "paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6188, + "src": "3969:6:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6213, + "nodeType": "Block", + "src": "4089:108:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6204, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4112:5:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4112:15:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6206, + "name": "_getBufferPeriodEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6281, + "src": "4130:23:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 6207, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4130:25:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4112:43:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6209, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4157:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "BUFFER_PERIOD_EXPIRED", + "nodeType": "MemberAccess", + "referencedDeclaration": 851, + "src": "4157:28:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6203, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4103:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4103:83:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6212, + "nodeType": "ExpressionStatement", + "src": "4103:83:45" + } + ] + }, + "id": 6214, + "nodeType": "IfStatement", + "src": "3965:232:45", + "trueBody": { + "id": 6202, + "nodeType": "Block", + "src": "3977:106:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6193, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4000:5:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4000:15:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6195, + "name": "_getPauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6273, + "src": "4018:22:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 6196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4018:24:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4000:42:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6198, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4044:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PAUSE_WINDOW_EXPIRED", + "nodeType": "MemberAccess", + "referencedDeclaration": 785, + "src": "4044:27:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6192, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "3991:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3991:81:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6201, + "nodeType": "ExpressionStatement", + "src": "3991:81:45" + } + ] + } + }, + { + "expression": { + "id": 6217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 6215, + "name": "_paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6108, + "src": "4207:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 6216, + "name": "paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6188, + "src": "4217:6:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4207:16:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 6218, + "nodeType": "ExpressionStatement", + "src": "4207:16:45" + }, + { + "eventCall": { + "arguments": [ + { + "id": 6220, + "name": "paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6188, + "src": "4257:6:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 6219, + "name": "PausedStateChanged", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1048, + "src": "4238:18:45", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 6221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4238:26:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6222, + "nodeType": "EmitStatement", + "src": "4233:31:45" + } + ] + }, + "documentation": { + "id": 6186, + "nodeType": "StructuredDocumentation", + "src": "3643:265:45", + "text": " @dev Sets the pause state to `paused`. The contract can only be paused until the end of the Pause Window, and\n unpaused until the end of the Buffer Period.\n Once the Buffer Period expires, this function reverts unconditionally." + }, + "id": 6224, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setPaused", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6189, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6188, + "mutability": "mutable", + "name": "paused", + "nodeType": "VariableDeclaration", + "scope": 6224, + "src": "3933:11:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6187, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3933:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3932:13:45" + }, + "returnParameters": { + "id": 6190, + "nodeType": "ParameterList", + "parameters": [], + "src": "3955:0:45" + }, + "scope": 6282, + "src": "3913:358:45", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6235, + "nodeType": "Block", + "src": "4382:56:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6229, + "name": "_isNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6265, + "src": "4401:12:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 6230, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4401:14:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6231, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4417:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PAUSED", + "nodeType": "MemberAccess", + "referencedDeclaration": 782, + "src": "4417:13:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6228, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4392:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4392:39:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6234, + "nodeType": "ExpressionStatement", + "src": "4392:39:45" + } + ] + }, + "documentation": { + "id": 6225, + "nodeType": "StructuredDocumentation", + "src": "4277:58:45", + "text": " @dev Reverts if the contract is paused." + }, + "id": 6236, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensureNotPaused", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6226, + "nodeType": "ParameterList", + "parameters": [], + "src": "4365:2:45" + }, + "returnParameters": { + "id": 6227, + "nodeType": "ParameterList", + "parameters": [], + "src": "4382:0:45" + }, + "scope": 6282, + "src": "4340:98:45", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6248, + "nodeType": "Block", + "src": "4550:61:45", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4569:15:45", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6241, + "name": "_isNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6265, + "src": "4570:12:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 6242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4570:14:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6244, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4586:6:45", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "NOT_PAUSED", + "nodeType": "MemberAccess", + "referencedDeclaration": 869, + "src": "4586:17:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6240, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4560:8:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6246, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4560:44:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6247, + "nodeType": "ExpressionStatement", + "src": "4560:44:45" + } + ] + }, + "documentation": { + "id": 6237, + "nodeType": "StructuredDocumentation", + "src": "4444:62:45", + "text": " @dev Reverts if the contract is not paused." + }, + "id": 6249, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ensurePaused", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6238, + "nodeType": "ParameterList", + "parameters": [], + "src": "4533:2:45" + }, + "returnParameters": { + "id": 6239, + "nodeType": "ParameterList", + "parameters": [], + "src": "4550:0:45" + }, + "scope": 6282, + "src": "4511:100:45", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6264, + "nodeType": "Block", + "src": "4890:184:45", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 6255, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5012:5:45", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 6256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "5012:15:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 6257, + "name": "_getBufferPeriodEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6281, + "src": "5030:23:45", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 6258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5030:25:45", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5012:43:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "id": 6261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5059:8:45", + "subExpression": { + "id": 6260, + "name": "_paused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6108, + "src": "5060:7:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5012:55:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6254, + "id": 6263, + "nodeType": "Return", + "src": "5005:62:45" + } + ] + }, + "documentation": { + "id": 6250, + "nodeType": "StructuredDocumentation", + "src": "4617:215:45", + "text": " @dev Returns true if the contract is unpaused.\n Once the Buffer Period expires, the gas cost of calling this function is reduced dramatically, as storage is no\n longer accessed." + }, + "id": 6265, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isNotPaused", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6251, + "nodeType": "ParameterList", + "parameters": [], + "src": "4858:2:45" + }, + "returnParameters": { + "id": 6254, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6253, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6265, + "src": "4884:4:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6252, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4884:4:45", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4883:6:45" + }, + "scope": 6282, + "src": "4837:237:45", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6272, + "nodeType": "Block", + "src": "5252:43:45", + "statements": [ + { + "expression": { + "id": 6270, + "name": "_pauseWindowEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6104, + "src": "5269:19:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6269, + "id": 6271, + "nodeType": "Return", + "src": "5262:26:45" + } + ] + }, + "id": 6273, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getPauseWindowEndTime", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6266, + "nodeType": "ParameterList", + "parameters": [], + "src": "5218:2:45" + }, + "returnParameters": { + "id": 6269, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6268, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6273, + "src": "5243:7:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6267, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5243:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5242:9:45" + }, + "scope": 6282, + "src": "5187:108:45", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 6280, + "nodeType": "Block", + "src": "5367:44:45", + "statements": [ + { + "expression": { + "id": 6278, + "name": "_bufferPeriodEndTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6106, + "src": "5384:20:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6277, + "id": 6279, + "nodeType": "Return", + "src": "5377:27:45" + } + ] + }, + "id": 6281, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getBufferPeriodEndTime", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6274, + "nodeType": "ParameterList", + "parameters": [], + "src": "5333:2:45" + }, + "returnParameters": { + "id": 6277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6276, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6281, + "src": "5358:7:45", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5358:7:45", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5357:9:45" + }, + "scope": 6282, + "src": "5301:110:45", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 6283, + "src": "2002:3411:45" + } + ], + "src": "688:4726:45" + }, + "id": 45 + }, + "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "exportedSymbols": { + "WordCodec": [ + 6810 + ] + }, + "id": 6811, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6284, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:46" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 6285, + "nodeType": "ImportDirective", + "scope": 6811, + "sourceUnit": 1012, + "src": "713:90:46", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "../math/Math.sol", + "id": 6286, + "nodeType": "ImportDirective", + "scope": 6811, + "sourceUnit": 8843, + "src": "805:26:46", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 6287, + "nodeType": "StructuredDocumentation", + "src": "833:1183:46", + "text": " @dev Library for encoding and decoding values stored inside a 256 bit word. Typically used to pack multiple values in\n a single storage slot, saving gas by performing less storage accesses.\n Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two\n 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128.\n We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and\n error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or\n memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location),\n using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even\n prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-intensive,\n and the cost of accesing memory increases quadratically with the number of allocated words. Manual packing and\n unpacking is therefore the preferred approach." + }, + "fullyImplemented": true, + "id": 6810, + "linearizedBaseContracts": [ + 6810 + ], + "name": "WordCodec", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 6295, + "mutability": "constant", + "name": "_MASK_1", + "nodeType": "VariableDeclaration", + "scope": 6810, + "src": "2211:45:46", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6288, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2211:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "id": 6294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "id": 6292, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 6289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2246:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "components": [ + { + "hexValue": "31", + "id": 6290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2250:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "id": 6291, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2249:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + }, + "src": "2246:6:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6293, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2255:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2246:10:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 6303, + "mutability": "constant", + "name": "_MASK_192", + "nodeType": "VariableDeclaration", + "scope": 6810, + "src": "2262:49:46", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6296, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2262:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512895_by_1", + "typeString": "int_const 6277...(50 digits omitted)...2895" + }, + "id": 6302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1", + "typeString": "int_const 6277...(50 digits omitted)...2896" + }, + "id": 6300, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 6297, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2299:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "components": [ + { + "hexValue": "313932", + "id": 6298, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2303:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_192_by_1", + "typeString": "int_const 192" + }, + "value": "192" + } + ], + "id": 6299, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2302:5:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_192_by_1", + "typeString": "int_const 192" + } + }, + "src": "2299:8:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512896_by_1", + "typeString": "int_const 6277...(50 digits omitted)...2896" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2310:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2299:12:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_6277101735386680763835789423207666416102355444464034512895_by_1", + "typeString": "int_const 6277...(50 digits omitted)...2895" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 6357, + "nodeType": "Block", + "src": "2666:241:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6318, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6308, + "src": "2700:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6319, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6310, + "src": "2707:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6320, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6312, + "src": "2715:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6317, + "name": "_validateEncodingParams", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6736, + 6809 + ], + "referencedDeclaration": 6736, + "src": "2676:23:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256) pure" + } + }, + "id": 6321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2676:49:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6322, + "nodeType": "ExpressionStatement", + "src": "2676:49:46" + }, + { + "assignments": [ + 6324 + ], + "declarations": [ + { + "constant": false, + "id": 6324, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 6357, + "src": "2736:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6323, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2736:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6331, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 6325, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2752:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6326, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6312, + "src": "2757:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2752:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6328, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2751:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2770:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2751:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2736:35:46" + }, + { + "assignments": [ + 6333 + ], + "declarations": [ + { + "constant": false, + "id": 6333, + "mutability": "mutable", + "name": "clearedWord", + "nodeType": "VariableDeclaration", + "scope": 6357, + "src": "2781:19:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6332, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2781:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6347, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6338, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6306, + "src": "2819:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2811:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6336, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2811:7:46", + "typeDescriptions": {} + } + }, + "id": 6339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2811:13:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "2827:17:46", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6340, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6324, + "src": "2829:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6341, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6310, + "src": "2837:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2829:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6343, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2828:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2811:33:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6335, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2803:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6334, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2803:7:46", + "typeDescriptions": {} + } + }, + "id": 6346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2803:42:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2781:64:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6348, + "name": "clearedWord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6333, + "src": "2862:11:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6351, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6308, + "src": "2884:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6352, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6310, + "src": "2893:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2884:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6350, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2876:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6349, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2876:7:46", + "typeDescriptions": {} + } + }, + "id": 6354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2876:24:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2862:38:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6316, + "id": 6356, + "nodeType": "Return", + "src": "2855:45:46" + } + ] + }, + "documentation": { + "id": 6304, + "nodeType": "StructuredDocumentation", + "src": "2345:162:46", + "text": " @dev Inserts an unsigned integer of bitLength, shifted by an offset, into a 256 bit word,\n replacing the old value. Returns the new word." + }, + "id": 6358, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "insertUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6306, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6358, + "src": "2541:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6305, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2541:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6308, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6358, + "src": "2563:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6307, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2563:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6310, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6358, + "src": "2586:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6309, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2586:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6312, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6358, + "src": "2610:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6311, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2610:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2531:102:46" + }, + "returnParameters": { + "id": 6316, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6315, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6358, + "src": "2657:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6314, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2657:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2656:9:46" + }, + "scope": 6810, + "src": "2512:395:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6418, + "nodeType": "Block", + "src": "3287:343:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6373, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6363, + "src": "3321:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + { + "id": 6374, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6365, + "src": "3328:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6375, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6367, + "src": "3336:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6372, + "name": "_validateEncodingParams", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6736, + 6809 + ], + "referencedDeclaration": 6809, + "src": "3297:23:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (int256,uint256,uint256) pure" + } + }, + "id": 6376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3297:49:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6377, + "nodeType": "ExpressionStatement", + "src": "3297:49:46" + }, + { + "assignments": [ + 6379 + ], + "declarations": [ + { + "constant": false, + "id": 6379, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 6418, + "src": "3357:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6378, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3357:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6386, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 6380, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3373:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6381, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6367, + "src": "3378:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3373:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6383, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3372:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6384, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3391:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3372:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3357:35:46" + }, + { + "assignments": [ + 6388 + ], + "declarations": [ + { + "constant": false, + "id": 6388, + "mutability": "mutable", + "name": "clearedWord", + "nodeType": "VariableDeclaration", + "scope": 6418, + "src": "3402:19:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6387, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3402:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6402, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6393, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6361, + "src": "3440:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6392, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3432:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6391, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3432:7:46", + "typeDescriptions": {} + } + }, + "id": 6394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3432:13:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "3448:17:46", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6395, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6379, + "src": "3450:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6396, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6365, + "src": "3458:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3450:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6398, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3449:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3432:33:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3424:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6389, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3424:7:46", + "typeDescriptions": {} + } + }, + "id": 6401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3424:42:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3402:64:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6403, + "name": "clearedWord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6388, + "src": "3567:11:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6408, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6363, + "src": "3598:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 6407, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3590:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6406, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3590:7:46", + "typeDescriptions": {} + } + }, + "id": 6409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3590:14:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6410, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6379, + "src": "3607:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3590:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6412, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3589:23:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6413, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6365, + "src": "3616:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3589:33:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6405, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3581:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6404, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3581:7:46", + "typeDescriptions": {} + } + }, + "id": 6415, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3581:42:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3567:56:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6371, + "id": 6417, + "nodeType": "Return", + "src": "3560:63:46" + } + ] + }, + "documentation": { + "id": 6359, + "nodeType": "StructuredDocumentation", + "src": "2913:217:46", + "text": " @dev Inserts a signed integer shifted by an offset into a 256 bit word, replacing the old value. Returns\n the new word.\n Assumes `value` can be represented using `bitLength` bits." + }, + "id": 6419, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "insertInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6368, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6361, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6419, + "src": "3163:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6360, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3163:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6363, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6419, + "src": "3185:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6362, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3185:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6365, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6419, + "src": "3207:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6364, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3207:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6367, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6419, + "src": "3231:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6366, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3231:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3153:101:46" + }, + "returnParameters": { + "id": 6371, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6370, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6419, + "src": "3278:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6369, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3278:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3277:9:46" + }, + "scope": 6810, + "src": "3135:495:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6444, + "nodeType": "Block", + "src": "4015:108:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6432, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6422, + "src": "4049:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6433, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6424, + "src": "4056:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6434, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6426, + "src": "4064:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6431, + "name": "_validateEncodingParams", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6736, + 6809 + ], + "referencedDeclaration": 6736, + "src": "4025:23:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256) pure" + } + }, + "id": 6435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4025:49:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6436, + "nodeType": "ExpressionStatement", + "src": "4025:49:46" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6439, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6422, + "src": "4100:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6440, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6424, + "src": "4109:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4100:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4092:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6437, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4092:7:46", + "typeDescriptions": {} + } + }, + "id": 6442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4092:24:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6430, + "id": 6443, + "nodeType": "Return", + "src": "4085:31:46" + } + ] + }, + "documentation": { + "id": 6420, + "nodeType": "StructuredDocumentation", + "src": "3653:225:46", + "text": " @dev Encodes an unsigned integer shifted by an offset. Ensures value fits within\n `bitLength` bits.\n The return value can be ORed bitwise with other encoded values to form a 256 bit word." + }, + "id": 6445, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6427, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6422, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6445, + "src": "3912:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3912:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6424, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6445, + "src": "3935:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6423, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3935:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6426, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6445, + "src": "3959:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6425, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3959:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3902:80:46" + }, + "returnParameters": { + "id": 6430, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6429, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6445, + "src": "4006:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6428, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4006:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4005:9:46" + }, + "scope": 6810, + "src": "3883:240:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6485, + "nodeType": "Block", + "src": "4435:255:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6458, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6448, + "src": "4469:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + { + "id": 6459, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6450, + "src": "4476:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6460, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6452, + "src": "4484:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6457, + "name": "_validateEncodingParams", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 6736, + 6809 + ], + "referencedDeclaration": 6809, + "src": "4445:23:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (int256,uint256,uint256) pure" + } + }, + "id": 6461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4445:49:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6462, + "nodeType": "ExpressionStatement", + "src": "4445:49:46" + }, + { + "assignments": [ + 6464 + ], + "declarations": [ + { + "constant": false, + "id": 6464, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 6485, + "src": "4505:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6463, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4505:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6471, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 6465, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4521:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6466, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6452, + "src": "4526:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4521:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6468, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4520:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4539:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4520:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4505:35:46" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6476, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6448, + "src": "4658:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 6475, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4650:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6474, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4650:7:46", + "typeDescriptions": {} + } + }, + "id": 6477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4650:14:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6478, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6464, + "src": "4667:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4650:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6480, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4649:23:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6481, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6450, + "src": "4676:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4649:33:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4641:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6472, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4641:7:46", + "typeDescriptions": {} + } + }, + "id": 6483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4641:42:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6456, + "id": 6484, + "nodeType": "Return", + "src": "4634:49:46" + } + ] + }, + "documentation": { + "id": 6446, + "nodeType": "StructuredDocumentation", + "src": "4129:171:46", + "text": " @dev Encodes a signed integer shifted by an offset.\n The return value can be ORed bitwise with other encoded values to form a 256 bit word." + }, + "id": 6486, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6453, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6448, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "4333:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6447, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4333:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6450, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "4355:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4355:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6452, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "4379:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6451, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4379:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4323:79:46" + }, + "returnParameters": { + "id": 6456, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6455, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6486, + "src": "4426:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6454, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4426:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4425:9:46" + }, + "scope": 6810, + "src": "4305:385:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6513, + "nodeType": "Block", + "src": "4978:72:46", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6500, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6489, + "src": "5003:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "id": 6501, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6491, + "src": "5011:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5003:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4995:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6498, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4995:7:46", + "typeDescriptions": {} + } + }, + "id": 6503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4995:23:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 6504, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5023:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6505, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6493, + "src": "5028:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5023:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6507, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5022:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5041:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5022:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6510, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5021:22:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4995:48:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6497, + "id": 6512, + "nodeType": "Return", + "src": "4988:55:46" + } + ] + }, + "documentation": { + "id": 6487, + "nodeType": "StructuredDocumentation", + "src": "4713:129:46", + "text": " @dev Decodes and returns an unsigned integer with `bitLength` bits, shifted by an offset, from a 256 bit word." + }, + "id": 6514, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decodeUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6494, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6489, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6514, + "src": "4876:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6488, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4876:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6491, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6514, + "src": "4898:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6490, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4898:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6493, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6514, + "src": "4922:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6492, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4922:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4866:79:46" + }, + "returnParameters": { + "id": 6497, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6496, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6514, + "src": "4969:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6495, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4969:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4968:9:46" + }, + "scope": 6810, + "src": "4847:203:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6578, + "nodeType": "Block", + "src": "5316:505:46", + "statements": [ + { + "assignments": [ + 6527 + ], + "declarations": [ + { + "constant": false, + "id": 6527, + "mutability": "mutable", + "name": "maxInt", + "nodeType": "VariableDeclaration", + "scope": 6578, + "src": "5326:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6526, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5326:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 6540, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6538, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 6530, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5350:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6531, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6521, + "src": "5356:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6532, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5368:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5356:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6534, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5355:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5350:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6536, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5349:22:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6537, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5374:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5349:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6529, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5342:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 6528, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5342:6:46", + "typeDescriptions": {} + } + }, + "id": 6539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5342:34:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5326:50:46" + }, + { + "assignments": [ + 6542 + ], + "declarations": [ + { + "constant": false, + "id": 6542, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 6578, + "src": "5386:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6541, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5386:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6549, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 6543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5402:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6544, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6521, + "src": "5407:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5402:14:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6546, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5401:16:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6547, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5420:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5401:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5386:35:46" + }, + { + "assignments": [ + 6551 + ], + "declarations": [ + { + "constant": false, + "id": 6551, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6578, + "src": "5432:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6550, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5432:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 6563, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6556, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6517, + "src": "5462:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "id": 6557, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6519, + "src": "5470:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5462:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5454:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6554, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5454:7:46", + "typeDescriptions": {} + } + }, + "id": 6559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5454:23:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6560, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6542, + "src": "5480:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5454:30:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6553, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5447:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 6552, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5447:6:46", + "typeDescriptions": {} + } + }, + "id": 6562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5447:38:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5432:53:46" + }, + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6564, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6551, + "src": "5766:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 6565, + "name": "maxInt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6527, + "src": "5774:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "5766:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 6575, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6551, + "src": "5809:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 6576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5766:48:46", + "trueExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6567, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6551, + "src": "5784:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "id": 6571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "5799:5:46", + "subExpression": { + "id": 6570, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6542, + "src": "5800:4:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6569, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5792:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 6568, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5792:6:46", + "typeDescriptions": {} + } + }, + "id": 6572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5792:13:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "5784:21:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 6574, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5783:23:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 6525, + "id": 6577, + "nodeType": "Return", + "src": "5759:55:46" + } + ] + }, + "documentation": { + "id": 6515, + "nodeType": "StructuredDocumentation", + "src": "5056:126:46", + "text": " @dev Decodes and returns a signed integer with `bitLength` bits, shifted by an offset, from a 256 bit word." + }, + "id": 6579, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decodeInt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6522, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6517, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6579, + "src": "5215:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6516, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5215:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6519, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6579, + "src": "5237:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6518, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5237:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6521, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6579, + "src": "5261:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6520, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5261:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5205:79:46" + }, + "returnParameters": { + "id": 6525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6524, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6579, + "src": "5308:6:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6523, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5308:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "5307:8:46" + }, + "scope": 6810, + "src": "5187:634:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6601, + "nodeType": "Block", + "src": "6028:64:46", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6591, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6582, + "src": "6054:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "id": 6592, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6584, + "src": "6062:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6054:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6046:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6589, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6046:7:46", + "typeDescriptions": {} + } + }, + "id": 6594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6046:23:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6595, + "name": "_MASK_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6295, + "src": "6072:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6046:33:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6597, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6045:35:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 6598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6084:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "6045:40:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 6588, + "id": 6600, + "nodeType": "Return", + "src": "6038:47:46" + } + ] + }, + "documentation": { + "id": 6580, + "nodeType": "StructuredDocumentation", + "src": "5849:95:46", + "text": " @dev Decodes and returns a boolean shifted by an offset from a 256 bit word." + }, + "id": 6602, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decodeBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6585, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6582, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6602, + "src": "5969:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6581, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5969:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6584, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6602, + "src": "5983:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6583, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5983:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5968:30:46" + }, + "returnParameters": { + "id": 6588, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6587, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6602, + "src": "6022:4:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6586, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6022:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6021:6:46" + }, + "scope": 6810, + "src": "5949:143:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6645, + "nodeType": "Block", + "src": "6441:164:46", + "statements": [ + { + "assignments": [ + 6615 + ], + "declarations": [ + { + "constant": false, + "id": 6615, + "mutability": "mutable", + "name": "clearedWord", + "nodeType": "VariableDeclaration", + "scope": 6645, + "src": "6451:19:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6614, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6451:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6629, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6620, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6605, + "src": "6489:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6481:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6618, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6481:7:46", + "typeDescriptions": {} + } + }, + "id": 6621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6481:13:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "6497:22:46", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6622, + "name": "_MASK_192", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6303, + "src": "6499:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6623, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6609, + "src": "6512:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6499:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6625, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6498:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6481:38:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6473:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6616, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6473:7:46", + "typeDescriptions": {} + } + }, + "id": 6628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6473:47:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6451:69:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6630, + "name": "clearedWord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6615, + "src": "6537:11:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6635, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6607, + "src": "6568:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6560:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6633, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6560:7:46", + "typeDescriptions": {} + } + }, + "id": 6636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6560:14:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6637, + "name": "_MASK_192", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6303, + "src": "6577:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6560:26:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6639, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6559:28:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6640, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6609, + "src": "6591:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6559:38:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6632, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6551:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6631, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6551:7:46", + "typeDescriptions": {} + } + }, + "id": 6642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6551:47:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "6537:61:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6613, + "id": 6644, + "nodeType": "Return", + "src": "6530:68:46" + } + ] + }, + "documentation": { + "id": 6603, + "nodeType": "StructuredDocumentation", + "src": "6098:208:46", + "text": " @dev Inserts a 192 bit value shifted by an offset into a 256 bit word, replacing the old value.\n Returns the new word.\n Assumes `value` can be represented using 192 bits." + }, + "id": 6646, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "insertBits192", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6610, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6605, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6646, + "src": "6343:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6604, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6343:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6607, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6646, + "src": "6365:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6606, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6365:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6609, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6646, + "src": "6388:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6608, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6388:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6333:75:46" + }, + "returnParameters": { + "id": 6613, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6612, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6646, + "src": "6432:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6611, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6432:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6431:9:46" + }, + "scope": 6810, + "src": "6311:294:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6689, + "nodeType": "Block", + "src": "6883:156:46", + "statements": [ + { + "assignments": [ + 6659 + ], + "declarations": [ + { + "constant": false, + "id": 6659, + "mutability": "mutable", + "name": "clearedWord", + "nodeType": "VariableDeclaration", + "scope": 6689, + "src": "6893:19:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6658, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6893:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 6673, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6664, + "name": "word", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6649, + "src": "6931:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 6663, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6923:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6923:7:46", + "typeDescriptions": {} + } + }, + "id": 6665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6923:13:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "id": 6670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "6939:20:46", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6666, + "name": "_MASK_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6295, + "src": "6941:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6667, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6653, + "src": "6952:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6941:17:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6669, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6940:19:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6923:36:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6661, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6915:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6660, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6915:7:46", + "typeDescriptions": {} + } + }, + "id": 6672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6915:45:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6893:67:46" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 6687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6674, + "name": "clearedWord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6659, + "src": "6977:11:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "condition": { + "id": 6679, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6651, + "src": "7007:5:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 6681, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7019:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 6682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "7007:13:46", + "trueExpression": { + "hexValue": "31", + "id": 6680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7015:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 6678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6999:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6677, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6999:7:46", + "typeDescriptions": {} + } + }, + "id": 6683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6999:22:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "id": 6684, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6653, + "src": "7025:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6999:32:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6676, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6991:7:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 6675, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6991:7:46", + "typeDescriptions": {} + } + }, + "id": 6686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6991:41:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "6977:55:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6657, + "id": 6688, + "nodeType": "Return", + "src": "6970:62:46" + } + ] + }, + "documentation": { + "id": 6647, + "nodeType": "StructuredDocumentation", + "src": "6611:143:46", + "text": " @dev Inserts a boolean value shifted by an offset into a 256 bit word, replacing the old value. Returns the new\n word." + }, + "id": 6690, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "insertBool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6654, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6649, + "mutability": "mutable", + "name": "word", + "nodeType": "VariableDeclaration", + "scope": 6690, + "src": "6788:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6648, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6788:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6651, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6690, + "src": "6810:10:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 6650, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6810:4:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6653, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6690, + "src": "6830:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6652, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6830:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6778:72:46" + }, + "returnParameters": { + "id": 6657, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6656, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6690, + "src": "6874:7:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6655, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6874:7:46", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "6873:9:46" + }, + "scope": 6810, + "src": "6759:280:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6735, + "nodeType": "Block", + "src": "7187:481:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6700, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6694, + "src": "7206:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "323536", + "id": 6701, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7215:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_256_by_1", + "typeString": "int_const 256" + }, + "value": "256" + }, + "src": "7206:12:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6703, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7220:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "7220:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6699, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7197:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7197:44:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6706, + "nodeType": "ExpressionStatement", + "src": "7197:44:46" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6708, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6696, + "src": "7415:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "31", + "id": 6709, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7428:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "7415:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6711, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6696, + "src": "7433:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [ + { + "hexValue": "323535", + "id": 6714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7455:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "323536", + "id": 6715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7460:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_256_by_1", + "typeString": "int_const 256" + }, + "value": "256" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 6716, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6694, + "src": "7466:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7460:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6712, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "7446:4:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 6713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "min", + "nodeType": "MemberAccess", + "referencedDeclaration": 8729, + "src": "7446:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 6718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7446:27:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7433:40:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7415:58:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6721, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7475:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "7475:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6707, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7406:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7406:90:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6724, + "nodeType": "ExpressionStatement", + "src": "7406:90:46" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6726, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6692, + "src": "7614:5:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "id": 6727, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6696, + "src": "7623:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7614:18:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6729, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7636:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7614:23:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6731, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7639:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "CODEC_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "7639:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6725, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7605:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7605:56:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6734, + "nodeType": "ExpressionStatement", + "src": "7605:56:46" + } + ] + }, + "id": 6736, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_validateEncodingParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6697, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6692, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6736, + "src": "7103:13:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6691, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7103:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6694, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6736, + "src": "7126:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6693, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7126:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6696, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6736, + "src": "7150:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6695, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7150:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7093:80:46" + }, + "returnParameters": { + "id": 6698, + "nodeType": "ParameterList", + "parameters": [], + "src": "7187:0:46" + }, + "scope": 6810, + "src": "7061:607:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 6808, + "nodeType": "Block", + "src": "7799:988:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6746, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6740, + "src": "7818:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "323536", + "id": 6747, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7827:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_256_by_1", + "typeString": "int_const 256" + }, + "value": "256" + }, + "src": "7818:12:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6749, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7832:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "7832:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6745, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7809:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7809:44:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6752, + "nodeType": "ExpressionStatement", + "src": "7809:44:46" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6754, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6742, + "src": "8027:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "31", + "id": 6755, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8040:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8027:14:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6757, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6742, + "src": "8045:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "arguments": [ + { + "hexValue": "323535", + "id": 6760, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8067:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "323536", + "id": 6761, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8072:3:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_256_by_1", + "typeString": "int_const 256" + }, + "value": "256" + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 6762, + "name": "offset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6740, + "src": "8078:6:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8072:12:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 6758, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "8058:4:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 6759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "min", + "nodeType": "MemberAccess", + "referencedDeclaration": 8729, + "src": "8058:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 6764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8058:27:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8045:40:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8027:58:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6767, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "8087:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "8087:20:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6753, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "8018:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8018:90:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6770, + "nodeType": "ExpressionStatement", + "src": "8018:90:46" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6771, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6738, + "src": "8189:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 6772, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8198:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8189:10:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6806, + "nodeType": "Block", + "src": "8455:326:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6791, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6738, + "src": "8712:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 6792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8720:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8712:9:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "id": 6789, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "8703:4:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 6790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "abs", + "nodeType": "MemberAccess", + "referencedDeclaration": 8557, + "src": "8703:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$", + "typeString": "function (int256) pure returns (uint256)" + } + }, + "id": 6794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8703:19:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6795, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6742, + "src": "8727:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8739:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8727:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6798, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8726:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8703:38:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6800, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8745:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8703:43:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6802, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "8748:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "CODEC_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "8748:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6788, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "8694:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8694:76:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6805, + "nodeType": "ExpressionStatement", + "src": "8694:76:46" + } + ] + }, + "id": 6807, + "nodeType": "IfStatement", + "src": "8185:596:46", + "trueBody": { + "id": 6787, + "nodeType": "Block", + "src": "8201:248:46", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 6780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6775, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6738, + "src": "8385:5:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6776, + "name": "bitLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6742, + "src": "8395:9:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8407:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8395:13:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6779, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8394:15:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8385:24:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6781, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8413:1:46", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8385:29:46", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6783, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "8416:6:46", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "CODEC_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "8416:21:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6774, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "8376:8:46", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8376:62:46", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6786, + "nodeType": "ExpressionStatement", + "src": "8376:62:46" + } + ] + } + } + ] + }, + "id": 6809, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_validateEncodingParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6743, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6738, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6809, + "src": "7716:12:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6737, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "7716:6:46", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6740, + "mutability": "mutable", + "name": "offset", + "nodeType": "VariableDeclaration", + "scope": 6809, + "src": "7738:14:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6739, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7738:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6742, + "mutability": "mutable", + "name": "bitLength", + "nodeType": "VariableDeclaration", + "scope": 6809, + "src": "7762:17:46", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6741, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7762:7:46", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7706:79:46" + }, + "returnParameters": { + "id": 6744, + "nodeType": "ParameterList", + "parameters": [], + "src": "7799:0:46" + }, + "scope": 6810, + "src": "7674:1113:46", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 6811, + "src": "2017:6772:46" + } + ], + "src": "688:8102:46" + }, + "id": 46 + }, + "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "exportedSymbols": { + "FixedPoint": [ + 7232 + ] + }, + "id": 7233, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6812, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:47" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 6813, + "nodeType": "ImportDirective", + "scope": 7233, + "sourceUnit": 1012, + "src": "713:90:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol", + "file": "./LogExpMath.sol", + "id": 6814, + "nodeType": "ImportDirective", + "scope": 7233, + "sourceUnit": 8531, + "src": "805:26:47", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 7232, + "linearizedBaseContracts": [ + 7232 + ], + "name": "FixedPoint", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 6817, + "mutability": "constant", + "name": "ONE", + "nodeType": "VariableDeclaration", + "scope": 7232, + "src": "913:36:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6815, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "913:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31653138", + "id": 6816, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "945:4:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 6822, + "mutability": "constant", + "name": "TWO", + "nodeType": "VariableDeclaration", + "scope": 7232, + "src": "976:39:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6818, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "976:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 6819, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1008:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6820, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "1012:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1008:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 6827, + "mutability": "constant", + "name": "FOUR", + "nodeType": "VariableDeclaration", + "scope": 7232, + "src": "1021:40:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6823, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1021:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6826, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "34", + "id": 6824, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1054:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6825, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "1058:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1054:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 6830, + "mutability": "constant", + "name": "MAX_POW_RELATIVE_ERROR", + "nodeType": "VariableDeclaration", + "scope": 7232, + "src": "1067:56:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6828, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1067:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3130303030", + "id": 6829, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1118:5:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "value": "10000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 6833, + "mutability": "constant", + "name": "MIN_POW_BASE_FREE_EXPONENT", + "nodeType": "VariableDeclaration", + "scope": 7232, + "src": "1232:61:47", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6831, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1232:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "302e37653138", + "id": 6832, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1287:6:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_700000000000000000_by_1", + "typeString": "int_const 700000000000000000" + }, + "value": "0.7e18" + }, + "visibility": "internal" + }, + { + "body": { + "id": 6858, + "nodeType": "Block", + "src": "1367:172:47", + "statements": [ + { + "assignments": [ + 6843 + ], + "declarations": [ + { + "constant": false, + "id": 6843, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 6858, + "src": "1450:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6842, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1450:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6847, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6844, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6835, + "src": "1462:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 6845, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6837, + "src": "1466:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1462:5:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1450:17:47" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6849, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6843, + "src": "1486:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 6850, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6835, + "src": "1491:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1486:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6852, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1494:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 533, + "src": "1494:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6848, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1477:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1477:37:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6855, + "nodeType": "ExpressionStatement", + "src": "1477:37:47" + }, + { + "expression": { + "id": 6856, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6843, + "src": "1531:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6841, + "id": 6857, + "nodeType": "Return", + "src": "1524:8:47" + } + ] + }, + "id": 6859, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6838, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6835, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 6859, + "src": "1313:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6834, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1313:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6837, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 6859, + "src": "1324:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6836, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1324:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1312:22:47" + }, + "returnParameters": { + "id": 6841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6840, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6859, + "src": "1358:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6839, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1358:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1357:9:47" + }, + "scope": 7232, + "src": "1300:239:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6884, + "nodeType": "Block", + "src": "1612:172:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6871, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6869, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6863, + "src": "1704:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 6870, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6861, + "src": "1709:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1704:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6872, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1712:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 536, + "src": "1712:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6868, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1695:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1695:37:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6875, + "nodeType": "ExpressionStatement", + "src": "1695:37:47" + }, + { + "assignments": [ + 6877 + ], + "declarations": [ + { + "constant": false, + "id": 6877, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 6884, + "src": "1742:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1742:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6881, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6878, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6861, + "src": "1754:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 6879, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6863, + "src": "1758:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1754:5:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1742:17:47" + }, + { + "expression": { + "id": 6882, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6877, + "src": "1776:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6867, + "id": 6883, + "nodeType": "Return", + "src": "1769:8:47" + } + ] + }, + "id": 6885, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6864, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6861, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 6885, + "src": "1558:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6860, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1558:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6863, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 6885, + "src": "1569:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6862, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1569:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1557:22:47" + }, + "returnParameters": { + "id": 6867, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6866, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6885, + "src": "1603:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6865, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1603:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1602:9:47" + }, + "scope": 7232, + "src": "1545:239:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6918, + "nodeType": "Block", + "src": "1861:138:47", + "statements": [ + { + "assignments": [ + 6895 + ], + "declarations": [ + { + "constant": false, + "id": 6895, + "mutability": "mutable", + "name": "product", + "nodeType": "VariableDeclaration", + "scope": 6918, + "src": "1871:15:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6894, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1871:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6899, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6896, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6887, + "src": "1889:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6897, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6889, + "src": "1893:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1889:5:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1871:23:47" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6901, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6887, + "src": "1913:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6902, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1918:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1913:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6906, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6904, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6895, + "src": "1923:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6905, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6887, + "src": "1933:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1923:11:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 6907, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6889, + "src": "1938:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1923:16:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1913:26:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6910, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1941:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MUL_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 542, + "src": "1941:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6900, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1904:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6912, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1904:57:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6913, + "nodeType": "ExpressionStatement", + "src": "1904:57:47" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6916, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6914, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6895, + "src": "1979:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6915, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "1989:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1979:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6893, + "id": 6917, + "nodeType": "Return", + "src": "1972:20:47" + } + ] + }, + "id": 6919, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mulDown", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6890, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6887, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 6919, + "src": "1807:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6886, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1807:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6889, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 6919, + "src": "1818:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6888, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1818:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1806:22:47" + }, + "returnParameters": { + "id": 6893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6892, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6919, + "src": "1852:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6891, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1852:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1851:9:47" + }, + "scope": 7232, + "src": "1790:209:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 6966, + "nodeType": "Block", + "src": "2074:548:47", + "statements": [ + { + "assignments": [ + 6929 + ], + "declarations": [ + { + "constant": false, + "id": 6929, + "mutability": "mutable", + "name": "product", + "nodeType": "VariableDeclaration", + "scope": 6966, + "src": "2084:15:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6928, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2084:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6933, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6930, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6921, + "src": "2102:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6931, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6923, + "src": "2106:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2102:5:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2084:23:47" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 6943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6935, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6921, + "src": "2126:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6936, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2131:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2126:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6942, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6938, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6929, + "src": "2136:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6939, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6921, + "src": "2146:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2136:11:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 6941, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6923, + "src": "2151:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2136:16:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2126:26:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6944, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2154:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6945, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MUL_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 542, + "src": "2154:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6934, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2117:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6946, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2117:57:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6947, + "nodeType": "ExpressionStatement", + "src": "2117:57:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6948, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6929, + "src": "2189:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6949, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2200:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2189:12:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 6964, + "nodeType": "Block", + "src": "2242:374:47", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6959, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6954, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6929, + "src": "2582:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 6955, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2592:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2582:11:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6957, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2581:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6958, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "2597:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2581:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6960, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2580:21:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 6961, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2604:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2580:25:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6927, + "id": 6963, + "nodeType": "Return", + "src": "2573:32:47" + } + ] + }, + "id": 6965, + "nodeType": "IfStatement", + "src": "2185:431:47", + "trueBody": { + "id": 6953, + "nodeType": "Block", + "src": "2203:33:47", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 6951, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2224:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 6927, + "id": 6952, + "nodeType": "Return", + "src": "2217:8:47" + } + ] + } + } + ] + }, + "id": 6967, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mulUp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6924, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6921, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 6967, + "src": "2020:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6920, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2020:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6923, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 6967, + "src": "2031:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6922, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2031:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2019:22:47" + }, + "returnParameters": { + "id": 6927, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6926, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6967, + "src": "2065:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6925, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2065:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2064:9:47" + }, + "scope": 7232, + "src": "2005:617:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7012, + "nodeType": "Block", + "src": "2699:284:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6979, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6977, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6971, + "src": "2718:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 6978, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2723:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2718:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 6980, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2726:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 6981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ZERO_DIVISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 545, + "src": "2726:20:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6976, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2709:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 6982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2709:38:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 6983, + "nodeType": "ExpressionStatement", + "src": "2709:38:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6986, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6984, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6969, + "src": "2762:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 6985, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2767:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2762:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7010, + "nodeType": "Block", + "src": "2809:168:47", + "statements": [ + { + "assignments": [ + 6991 + ], + "declarations": [ + { + "constant": false, + "id": 6991, + "mutability": "mutable", + "name": "aInflated", + "nodeType": "VariableDeclaration", + "scope": 7010, + "src": "2823:17:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6990, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2823:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 6995, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6992, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6969, + "src": "2843:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 6993, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "2847:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2843:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2823:27:47" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 6997, + "name": "aInflated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6991, + "src": "2873:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 6998, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6969, + "src": "2885:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2873:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7000, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "2890:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2873:20:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7002, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2895:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "DIV_INTERNAL", + "nodeType": "MemberAccess", + "referencedDeclaration": 548, + "src": "2895:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 6996, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2864:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2864:51:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7005, + "nodeType": "ExpressionStatement", + "src": "2864:51:47" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7008, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7006, + "name": "aInflated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6991, + "src": "2953:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7007, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6971, + "src": "2965:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2953:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6975, + "id": 7009, + "nodeType": "Return", + "src": "2946:20:47" + } + ] + }, + "id": 7011, + "nodeType": "IfStatement", + "src": "2758:219:47", + "trueBody": { + "id": 6989, + "nodeType": "Block", + "src": "2770:33:47", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 6987, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2791:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 6975, + "id": 6988, + "nodeType": "Return", + "src": "2784:8:47" + } + ] + } + } + ] + }, + "id": 7013, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "divDown", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6972, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6969, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 7013, + "src": "2645:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6968, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2645:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6971, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 7013, + "src": "2656:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6970, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2656:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2644:22:47" + }, + "returnParameters": { + "id": 6975, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6974, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7013, + "src": "2690:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6973, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2690:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2689:9:47" + }, + "scope": 7232, + "src": "2628:355:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7064, + "nodeType": "Block", + "src": "3058:613:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7023, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7017, + "src": "3077:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 7024, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3082:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3077:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7026, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "3085:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ZERO_DIVISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 545, + "src": "3085:20:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7022, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "3068:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3068:38:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7029, + "nodeType": "ExpressionStatement", + "src": "3068:38:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7030, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7015, + "src": "3121:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7031, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3126:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3121:6:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7062, + "nodeType": "Block", + "src": "3168:497:47", + "statements": [ + { + "assignments": [ + 7037 + ], + "declarations": [ + { + "constant": false, + "id": 7037, + "mutability": "mutable", + "name": "aInflated", + "nodeType": "VariableDeclaration", + "scope": 7062, + "src": "3182:17:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7036, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3182:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7041, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7038, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7015, + "src": "3202:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7039, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "3206:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3202:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3182:27:47" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7043, + "name": "aInflated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7037, + "src": "3232:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7044, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7015, + "src": "3244:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3232:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7046, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "3249:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3232:20:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7048, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "3254:6:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "DIV_INTERNAL", + "nodeType": "MemberAccess", + "referencedDeclaration": 548, + "src": "3254:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7042, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "3223:8:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7050, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3223:51:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7051, + "nodeType": "ExpressionStatement", + "src": "3223:51:47" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7052, + "name": "aInflated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7037, + "src": "3631:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 7053, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3643:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3631:13:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7055, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3630:15:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7056, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7017, + "src": "3648:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3630:19:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7058, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3629:21:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 7059, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3653:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3629:25:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7021, + "id": 7061, + "nodeType": "Return", + "src": "3622:32:47" + } + ] + }, + "id": 7063, + "nodeType": "IfStatement", + "src": "3117:548:47", + "trueBody": { + "id": 7035, + "nodeType": "Block", + "src": "3129:33:47", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 7033, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3150:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 7021, + "id": 7034, + "nodeType": "Return", + "src": "3143:8:47" + } + ] + } + } + ] + }, + "id": 7065, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "divUp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7015, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 7065, + "src": "3004:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7014, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3004:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7017, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 7065, + "src": "3015:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7016, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3015:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3003:22:47" + }, + "returnParameters": { + "id": 7021, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7020, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7065, + "src": "3049:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7019, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3049:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3048:9:47" + }, + "scope": 7232, + "src": "2989:682:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7141, + "nodeType": "Block", + "src": "3974:681:47", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7075, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7070, + "src": "4142:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7076, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "4147:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4142:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7081, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7070, + "src": "4195:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7082, + "name": "TWO", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6822, + "src": "4200:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4195:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7090, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7070, + "src": "4260:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7091, + "name": "FOUR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6827, + "src": "4265:4:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4260:9:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7137, + "nodeType": "Block", + "src": "4376:273:47", + "statements": [ + { + "assignments": [ + 7107 + ], + "declarations": [ + { + "constant": false, + "id": 7107, + "mutability": "mutable", + "name": "raw", + "nodeType": "VariableDeclaration", + "scope": 7137, + "src": "4390:11:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7106, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4390:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7113, + "initialValue": { + "arguments": [ + { + "id": 7110, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7068, + "src": "4419:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7111, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7070, + "src": "4422:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7108, + "name": "LogExpMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8530, + "src": "4404:10:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LogExpMath_$8530_$", + "typeString": "type(library LogExpMath)" + } + }, + "id": 7109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "pow", + "nodeType": "MemberAccess", + "referencedDeclaration": 7474, + "src": "4404:14:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4404:20:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4390:34:47" + }, + { + "assignments": [ + 7115 + ], + "declarations": [ + { + "constant": false, + "id": 7115, + "mutability": "mutable", + "name": "maxError", + "nodeType": "VariableDeclaration", + "scope": 7137, + "src": "4438:16:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4438:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7123, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 7118, + "name": "raw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7107, + "src": "4467:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7119, + "name": "MAX_POW_RELATIVE_ERROR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6830, + "src": "4472:22:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7117, + "name": "mulUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6967, + "src": "4461:5:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4461:34:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "31", + "id": 7121, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4497:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "id": 7116, + "name": "add", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6859, + "src": "4457:3:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4457:42:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4438:61:47" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7124, + "name": "raw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7107, + "src": "4518:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7125, + "name": "maxError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7115, + "src": "4524:8:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4518:14:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7135, + "nodeType": "Block", + "src": "4581:58:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7131, + "name": "raw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7107, + "src": "4610:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7132, + "name": "maxError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7115, + "src": "4615:8:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7130, + "name": "sub", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6885, + "src": "4606:3:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7133, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4606:18:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7074, + "id": 7134, + "nodeType": "Return", + "src": "4599:25:47" + } + ] + }, + "id": 7136, + "nodeType": "IfStatement", + "src": "4514:125:47", + "trueBody": { + "id": 7129, + "nodeType": "Block", + "src": "4534:41:47", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 7127, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4559:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 7074, + "id": 7128, + "nodeType": "Return", + "src": "4552:8:47" + } + ] + } + } + ] + }, + "id": 7138, + "nodeType": "IfStatement", + "src": "4256:393:47", + "trueBody": { + "id": 7105, + "nodeType": "Block", + "src": "4271:99:47", + "statements": [ + { + "assignments": [ + 7094 + ], + "declarations": [ + { + "constant": false, + "id": 7094, + "mutability": "mutable", + "name": "square", + "nodeType": "VariableDeclaration", + "scope": 7105, + "src": "4285:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7093, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4285:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7099, + "initialValue": { + "arguments": [ + { + "id": 7096, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7068, + "src": "4310:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7097, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7068, + "src": "4313:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7095, + "name": "mulDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6919, + "src": "4302:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4302:13:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4285:30:47" + }, + { + "expression": { + "arguments": [ + { + "id": 7101, + "name": "square", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7094, + "src": "4344:6:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7102, + "name": "square", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7094, + "src": "4352:6:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7100, + "name": "mulDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6919, + "src": "4336:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4336:23:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7074, + "id": 7104, + "nodeType": "Return", + "src": "4329:30:47" + } + ] + } + }, + "id": 7139, + "nodeType": "IfStatement", + "src": "4191:458:47", + "trueBody": { + "id": 7089, + "nodeType": "Block", + "src": "4205:45:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7085, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7068, + "src": "4234:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7086, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7068, + "src": "4237:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7084, + "name": "mulDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6919, + "src": "4226:7:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4226:13:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7074, + "id": 7088, + "nodeType": "Return", + "src": "4219:20:47" + } + ] + } + }, + "id": 7140, + "nodeType": "IfStatement", + "src": "4138:511:47", + "trueBody": { + "id": 7080, + "nodeType": "Block", + "src": "4152:33:47", + "statements": [ + { + "expression": { + "id": 7078, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7068, + "src": "4173:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7074, + "id": 7079, + "nodeType": "Return", + "src": "4166:8:47" + } + ] + } + } + ] + }, + "documentation": { + "id": 7066, + "nodeType": "StructuredDocumentation", + "src": "3677:221:47", + "text": " @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)." + }, + "id": 7142, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "powDown", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7071, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7068, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "scope": 7142, + "src": "3920:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7067, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3920:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7070, + "mutability": "mutable", + "name": "y", + "nodeType": "VariableDeclaration", + "scope": 7142, + "src": "3931:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7069, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3931:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3919:22:47" + }, + "returnParameters": { + "id": 7074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7073, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7142, + "src": "3965:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7072, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3965:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3964:9:47" + }, + "scope": 7232, + "src": "3903:752:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7210, + "nodeType": "Block", + "src": "4954:576:47", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7152, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7147, + "src": "5122:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7153, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "5127:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5122:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7158, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7147, + "src": "5175:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7159, + "name": "TWO", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6822, + "src": "5180:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5175:8:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7167, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7147, + "src": "5238:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 7168, + "name": "FOUR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6827, + "src": "5243:4:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5238:9:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7206, + "nodeType": "Block", + "src": "5350:174:47", + "statements": [ + { + "assignments": [ + 7184 + ], + "declarations": [ + { + "constant": false, + "id": 7184, + "mutability": "mutable", + "name": "raw", + "nodeType": "VariableDeclaration", + "scope": 7206, + "src": "5364:11:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5364:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7190, + "initialValue": { + "arguments": [ + { + "id": 7187, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7145, + "src": "5393:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7188, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7147, + "src": "5396:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 7185, + "name": "LogExpMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8530, + "src": "5378:10:47", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LogExpMath_$8530_$", + "typeString": "type(library LogExpMath)" + } + }, + "id": 7186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "pow", + "nodeType": "MemberAccess", + "referencedDeclaration": 7474, + "src": "5378:14:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5378:20:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5364:34:47" + }, + { + "assignments": [ + 7192 + ], + "declarations": [ + { + "constant": false, + "id": 7192, + "mutability": "mutable", + "name": "maxError", + "nodeType": "VariableDeclaration", + "scope": 7206, + "src": "5412:16:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7191, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5412:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7200, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 7195, + "name": "raw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7184, + "src": "5441:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7196, + "name": "MAX_POW_RELATIVE_ERROR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6830, + "src": "5446:22:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7194, + "name": "mulUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6967, + "src": "5435:5:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5435:34:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "31", + "id": 7198, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5471:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "id": 7193, + "name": "add", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6859, + "src": "5431:3:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5431:42:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5412:61:47" + }, + { + "expression": { + "arguments": [ + { + "id": 7202, + "name": "raw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7184, + "src": "5499:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7203, + "name": "maxError", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7192, + "src": "5504:8:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7201, + "name": "add", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6859, + "src": "5495:3:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5495:18:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7151, + "id": 7205, + "nodeType": "Return", + "src": "5488:25:47" + } + ] + }, + "id": 7207, + "nodeType": "IfStatement", + "src": "5234:290:47", + "trueBody": { + "id": 7182, + "nodeType": "Block", + "src": "5249:95:47", + "statements": [ + { + "assignments": [ + 7171 + ], + "declarations": [ + { + "constant": false, + "id": 7171, + "mutability": "mutable", + "name": "square", + "nodeType": "VariableDeclaration", + "scope": 7182, + "src": "5263:14:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5263:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 7176, + "initialValue": { + "arguments": [ + { + "id": 7173, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7145, + "src": "5286:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7174, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7145, + "src": "5289:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7172, + "name": "mulUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6967, + "src": "5280:5:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5280:11:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5263:28:47" + }, + { + "expression": { + "arguments": [ + { + "id": 7178, + "name": "square", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7171, + "src": "5318:6:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7179, + "name": "square", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7171, + "src": "5326:6:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7177, + "name": "mulUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6967, + "src": "5312:5:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5312:21:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7151, + "id": 7181, + "nodeType": "Return", + "src": "5305:28:47" + } + ] + } + }, + "id": 7208, + "nodeType": "IfStatement", + "src": "5171:353:47", + "trueBody": { + "id": 7166, + "nodeType": "Block", + "src": "5185:43:47", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7162, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7145, + "src": "5212:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 7163, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7145, + "src": "5215:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7161, + "name": "mulUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6967, + "src": "5206:5:47", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 7164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5206:11:47", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7151, + "id": 7165, + "nodeType": "Return", + "src": "5199:18:47" + } + ] + } + }, + "id": 7209, + "nodeType": "IfStatement", + "src": "5118:406:47", + "trueBody": { + "id": 7157, + "nodeType": "Block", + "src": "5132:33:47", + "statements": [ + { + "expression": { + "id": 7155, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7145, + "src": "5153:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7151, + "id": 7156, + "nodeType": "Return", + "src": "5146:8:47" + } + ] + } + } + ] + }, + "documentation": { + "id": 7143, + "nodeType": "StructuredDocumentation", + "src": "4661:219:47", + "text": " @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)." + }, + "id": 7211, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "powUp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7148, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7145, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "scope": 7211, + "src": "4900:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7144, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4900:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7147, + "mutability": "mutable", + "name": "y", + "nodeType": "VariableDeclaration", + "scope": 7211, + "src": "4911:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7146, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4911:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4899:22:47" + }, + "returnParameters": { + "id": 7151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7150, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7211, + "src": "4945:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7149, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4945:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4944:9:47" + }, + "scope": 7232, + "src": "4885:645:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7230, + "nodeType": "Block", + "src": "5876:49:47", + "statements": [ + { + "expression": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7219, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7214, + "src": "5894:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7220, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "5898:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5894:7:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 7222, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5893:9:47", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 7227, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5917:1:47", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 7228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5893:25:47", + "trueExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7223, + "name": "ONE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6817, + "src": "5906:3:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 7224, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7214, + "src": "5912:1:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5906:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 7226, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5905:9:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7218, + "id": 7229, + "nodeType": "Return", + "src": "5886:32:47" + } + ] + }, + "documentation": { + "id": 7212, + "nodeType": "StructuredDocumentation", + "src": "5536:272:47", + "text": " @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values." + }, + "id": 7231, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "complement", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7215, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7214, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "scope": 7231, + "src": "5833:9:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7213, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5833:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5832:11:47" + }, + "returnParameters": { + "id": 7218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7217, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7231, + "src": "5867:7:47", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7216, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5867:7:47", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5866:9:47" + }, + "scope": 7232, + "src": "5813:112:47", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 7233, + "src": "888:5039:47" + } + ], + "src": "688:5240:47" + }, + "id": 47 + }, + "@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/LogExpMath.sol", + "exportedSymbols": { + "LogExpMath": [ + 8530 + ] + }, + "id": 8531, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 7234, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "1094:23:48" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 7235, + "nodeType": "ImportDirective", + "scope": 8531, + "sourceUnit": 1012, + "src": "1119:90:48", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 7236, + "nodeType": "StructuredDocumentation", + "src": "1234:446:48", + "text": " @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z" + }, + "fullyImplemented": true, + "id": 8530, + "linearizedBaseContracts": [ + 8530 + ], + "name": "LogExpMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 7239, + "mutability": "constant", + "name": "ONE_18", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "1961:29:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7237, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1961:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "31653138", + "id": 7238, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1986:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000_by_1", + "typeString": "int_const 1000000000000000000" + }, + "value": "1e18" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7242, + "mutability": "constant", + "name": "ONE_20", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "2151:29:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7240, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2151:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "31653230", + "id": 7241, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2176:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000000_by_1", + "typeString": "int_const 100000000000000000000" + }, + "value": "1e20" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7245, + "mutability": "constant", + "name": "ONE_36", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "2186:29:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7243, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2186:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "31653336", + "id": 7244, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2211:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000000000000000000000000000_by_1", + "typeString": "int_const 1000...(29 digits omitted)...0000" + }, + "value": "1e36" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7248, + "mutability": "constant", + "name": "MAX_NATURAL_EXPONENT", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "2732:45:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7246, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2732:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313330653138", + "id": 7247, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2771:6:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_130000000000000000000_by_1", + "typeString": "int_const 130000000000000000000" + }, + "value": "130e18" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7252, + "mutability": "constant", + "name": "MIN_NATURAL_EXPONENT", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "2783:45:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7249, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2783:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "id": 7251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "2822:6:48", + "subExpression": { + "hexValue": "3431653138", + "id": 7250, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2823:5:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_41000000000000000000_by_1", + "typeString": "int_const 41000000000000000000" + }, + "value": "41e18" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_41000000000000000000_by_1", + "typeString": "int_const -41000000000000000000" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7257, + "mutability": "constant", + "name": "LN_36_LOWER_BOUND", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "2979:49:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7253, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2979:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 7254, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "3015:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31653137", + "id": 7255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3024:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000_by_1", + "typeString": "int_const 100000000000000000" + }, + "value": "1e17" + }, + "src": "3015:13:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7262, + "mutability": "constant", + "name": "LN_36_UPPER_BOUND", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3034:49:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7258, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3034:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7261, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 7259, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "3070:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31653137", + "id": 7260, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3079:4:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000_by_1", + "typeString": "int_const 100000000000000000" + }, + "value": "1e17" + }, + "src": "3070:13:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7272, + "mutability": "constant", + "name": "MILD_EXPONENT_BOUND", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3090:63:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7263, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3090:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7271, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1", + "typeString": "int_const 2894...(69 digits omitted)...9984" + }, + "id": 7266, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 7264, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3129:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "hexValue": "323534", + "id": 7265, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3132:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_254_by_1", + "typeString": "int_const 254" + }, + "value": "254" + }, + "src": "3129:6:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1", + "typeString": "int_const 2894...(69 digits omitted)...9984" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "arguments": [ + { + "id": 7269, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "3146:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7268, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3138:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7267, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3138:7:48", + "typeDescriptions": {} + } + }, + "id": 7270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3138:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3129:24:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7275, + "mutability": "constant", + "name": "x0", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3188:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7273, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3188:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313238303030303030303030303030303030303030", + "id": 7274, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3209:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_128000000000000000000_by_1", + "typeString": "int_const 128000000000000000000" + }, + "value": "128000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7278, + "mutability": "constant", + "name": "a0", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3244:77:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7276, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3244:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030", + "id": 7277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3265:56:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_38877084059945950922200000000000000000000000000000000000_by_1", + "typeString": "int_const 3887...(48 digits omitted)...0000" + }, + "value": "38877084059945950922200000000000000000000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7281, + "mutability": "constant", + "name": "x1", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3352:41:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7279, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3352:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "3634303030303030303030303030303030303030", + "id": 7280, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3373:20:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_64000000000000000000_by_1", + "typeString": "int_const 64000000000000000000" + }, + "value": "64000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7284, + "mutability": "constant", + "name": "a1", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3407:49:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7282, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3407:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "36323335313439303830383131363136383832393130303030303030", + "id": 7283, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3428:28:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_6235149080811616882910000000_by_1", + "typeString": "int_const 6235149080811616882910000000" + }, + "value": "6235149080811616882910000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7287, + "mutability": "constant", + "name": "x2", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3516:43:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7285, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3516:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "33323030303030303030303030303030303030303030", + "id": 7286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3537:22:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_3200000000000000000000_by_1", + "typeString": "int_const 3200000000000000000000" + }, + "value": "3200000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7290, + "mutability": "constant", + "name": "a2", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3573:55:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7288, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3573:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "37383936323936303138323638303639353136313030303030303030303030303030", + "id": 7289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3594:34:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_7896296018268069516100000000000000_by_1", + "typeString": "int_const 7896...(26 digits omitted)...0000" + }, + "value": "7896296018268069516100000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7293, + "mutability": "constant", + "name": "x3", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3645:43:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7291, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3645:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "31363030303030303030303030303030303030303030", + "id": 7292, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3666:22:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1600000000000000000000_by_1", + "typeString": "int_const 1600000000000000000000" + }, + "value": "1600000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7296, + "mutability": "constant", + "name": "a3", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3702:48:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7294, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3702:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "383838363131303532303530373837323633363736303030303030", + "id": 7295, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3723:27:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_888611052050787263676000000_by_1", + "typeString": "int_const 888611052050787263676000000" + }, + "value": "888611052050787263676000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7299, + "mutability": "constant", + "name": "x4", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3767:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7297, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3767:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "383030303030303030303030303030303030303030", + "id": 7298, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3788:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_800000000000000000000_by_1", + "typeString": "int_const 800000000000000000000" + }, + "value": "800000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7302, + "mutability": "constant", + "name": "a4", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3823:45:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7300, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3823:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "323938303935373938373034313732383237343734303030", + "id": 7301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3844:24:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_298095798704172827474000_by_1", + "typeString": "int_const 298095798704172827474000" + }, + "value": "298095798704172827474000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7305, + "mutability": "constant", + "name": "x5", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3885:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7303, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3885:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "343030303030303030303030303030303030303030", + "id": 7304, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3906:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_400000000000000000000_by_1", + "typeString": "int_const 400000000000000000000" + }, + "value": "400000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7308, + "mutability": "constant", + "name": "a5", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "3941:43:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7306, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "3941:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "35343539383135303033333134343233393037383130", + "id": 7307, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3962:22:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_5459815003314423907810_by_1", + "typeString": "int_const 5459815003314423907810" + }, + "value": "5459815003314423907810" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7311, + "mutability": "constant", + "name": "x6", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4001:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7309, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4001:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "323030303030303030303030303030303030303030", + "id": 7310, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4022:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_200000000000000000000_by_1", + "typeString": "int_const 200000000000000000000" + }, + "value": "200000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7314, + "mutability": "constant", + "name": "a6", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4057:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7312, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4057:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "373338393035363039383933303635303232373233", + "id": 7313, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4078:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_738905609893065022723_by_1", + "typeString": "int_const 738905609893065022723" + }, + "value": "738905609893065022723" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7317, + "mutability": "constant", + "name": "x7", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4116:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7315, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4116:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313030303030303030303030303030303030303030", + "id": 7316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4137:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000000_by_1", + "typeString": "int_const 100000000000000000000" + }, + "value": "100000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7320, + "mutability": "constant", + "name": "a7", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4172:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7318, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4172:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "323731383238313832383435393034353233353336", + "id": 7319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4193:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_271828182845904523536_by_1", + "typeString": "int_const 271828182845904523536" + }, + "value": "271828182845904523536" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7323, + "mutability": "constant", + "name": "x8", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4231:41:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7321, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4231:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "3530303030303030303030303030303030303030", + "id": 7322, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4252:20:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_50000000000000000000_by_1", + "typeString": "int_const 50000000000000000000" + }, + "value": "50000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7326, + "mutability": "constant", + "name": "a8", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4287:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7324, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4287:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313634383732313237303730303132383134363835", + "id": 7325, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4308:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_164872127070012814685_by_1", + "typeString": "int_const 164872127070012814685" + }, + "value": "164872127070012814685" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7329, + "mutability": "constant", + "name": "x9", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4346:41:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7327, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4346:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "3235303030303030303030303030303030303030", + "id": 7328, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4367:20:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_25000000000000000000_by_1", + "typeString": "int_const 25000000000000000000" + }, + "value": "25000000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7332, + "mutability": "constant", + "name": "a9", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4402:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7330, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4402:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313238343032353431363638373734313438343037", + "id": 7331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4423:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_128402541668774148407_by_1", + "typeString": "int_const 128402541668774148407" + }, + "value": "128402541668774148407" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7335, + "mutability": "constant", + "name": "x10", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4461:42:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7333, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4461:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "3132353030303030303030303030303030303030", + "id": 7334, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4483:20:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_12500000000000000000_by_1", + "typeString": "int_const 12500000000000000000" + }, + "value": "12500000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7338, + "mutability": "constant", + "name": "a10", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4518:43:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7336, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4518:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313133333134383435333036363832363331363833", + "id": 7337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4540:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_113314845306682631683_by_1", + "typeString": "int_const 113314845306682631683" + }, + "value": "113314845306682631683" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7341, + "mutability": "constant", + "name": "x11", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4579:41:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7339, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4579:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "36323530303030303030303030303030303030", + "id": 7340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4601:19:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_6250000000000000000_by_1", + "typeString": "int_const 6250000000000000000" + }, + "value": "6250000000000000000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 7344, + "mutability": "constant", + "name": "a11", + "nodeType": "VariableDeclaration", + "scope": 8530, + "src": "4635:43:48", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7342, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "4635:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "hexValue": "313036343439343435383931373835393432393536", + "id": 7343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4657:21:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_106449445891785942956_by_1", + "typeString": "int_const 106449445891785942956" + }, + "value": "106449445891785942956" + }, + "visibility": "internal" + }, + { + "body": { + "id": 7473, + "nodeType": "Block", + "src": "4983:2128:48", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7354, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7349, + "src": "4997:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7355, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5002:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4997:6:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7363, + "nodeType": "IfStatement", + "src": "4993:131:48", + "trueBody": { + "id": 7362, + "nodeType": "Block", + "src": "5005:119:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 7359, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "5106:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7358, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5098:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7357, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5098:7:48", + "typeDescriptions": {} + } + }, + "id": 7360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5098:15:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7353, + "id": 7361, + "nodeType": "Return", + "src": "5091:22:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7364, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7347, + "src": "5138:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7365, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5143:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5138:6:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7370, + "nodeType": "IfStatement", + "src": "5134:45:48", + "trueBody": { + "id": 7369, + "nodeType": "Block", + "src": "5146:33:48", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 7367, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5167:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 7353, + "id": 7368, + "nodeType": "Return", + "src": "5160:8:48" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7372, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7347, + "src": "5558:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "323535", + "id": 7373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5563:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "5558:8:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 7375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5570:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5558:13:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7377, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "5573:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "X_OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 551, + "src": "5573:22:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7371, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "5549:8:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5549:47:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7380, + "nodeType": "ExpressionStatement", + "src": "5549:47:48" + }, + { + "assignments": [ + 7382 + ], + "declarations": [ + { + "constant": false, + "id": 7382, + "mutability": "mutable", + "name": "x_int256", + "nodeType": "VariableDeclaration", + "scope": 7473, + "src": "5606:15:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7381, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5606:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7387, + "initialValue": { + "arguments": [ + { + "id": 7385, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7347, + "src": "5631:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7384, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5624:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 7383, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "5624:6:48", + "typeDescriptions": {} + } + }, + "id": 7386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5624:9:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5606:27:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 7391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7389, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7349, + "src": "5996:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7390, + "name": "MILD_EXPONENT_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7272, + "src": "6000:19:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5996:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7392, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6021:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Y_OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 554, + "src": "6021:22:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7388, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "5987:8:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5987:57:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7395, + "nodeType": "ExpressionStatement", + "src": "5987:57:48" + }, + { + "assignments": [ + 7397 + ], + "declarations": [ + { + "constant": false, + "id": 7397, + "mutability": "mutable", + "name": "y_int256", + "nodeType": "VariableDeclaration", + "scope": 7473, + "src": "6054:15:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7396, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "6054:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7402, + "initialValue": { + "arguments": [ + { + "id": 7400, + "name": "y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7349, + "src": "6079:1:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7399, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6072:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 7398, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "6072:6:48", + "typeDescriptions": {} + } + }, + "id": 7401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6072:9:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6054:27:48" + }, + { + "assignments": [ + 7404 + ], + "declarations": [ + { + "constant": false, + "id": 7404, + "mutability": "mutable", + "name": "logx_times_y", + "nodeType": "VariableDeclaration", + "scope": 7473, + "src": "6092:19:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7403, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "6092:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7405, + "nodeType": "VariableDeclarationStatement", + "src": "6092:19:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7406, + "name": "LN_36_LOWER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7257, + "src": "6125:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7407, + "name": "x_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7382, + "src": "6145:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6125:28:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7409, + "name": "x_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7382, + "src": "6157:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7410, + "name": "LN_36_UPPER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7262, + "src": "6168:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6157:28:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6125:60:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7448, + "nodeType": "Block", + "src": "6741:64:48", + "statements": [ + { + "expression": { + "id": 7446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7440, + "name": "logx_times_y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7404, + "src": "6755:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7442, + "name": "x_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7382, + "src": "6774:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7441, + "name": "_ln", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8375, + "src": "6770:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6770:13:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7444, + "name": "y_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7397, + "src": "6786:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6770:24:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6755:39:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7447, + "nodeType": "ExpressionStatement", + "src": "6755:39:48" + } + ] + }, + "id": 7449, + "nodeType": "IfStatement", + "src": "6121:684:48", + "trueBody": { + "id": 7439, + "nodeType": "Block", + "src": "6187:548:48", + "statements": [ + { + "assignments": [ + 7414 + ], + "declarations": [ + { + "constant": false, + "id": 7414, + "mutability": "mutable", + "name": "ln_36_x", + "nodeType": "VariableDeclaration", + "scope": 7439, + "src": "6201:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7413, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "6201:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7418, + "initialValue": { + "arguments": [ + { + "id": 7416, + "name": "x_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7382, + "src": "6225:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7415, + "name": "_ln_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8529, + "src": "6218:6:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6218:16:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6201:33:48" + }, + { + "expression": { + "id": 7437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7419, + "name": "logx_times_y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7404, + "src": "6635:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7420, + "name": "ln_36_x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7414, + "src": "6652:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7421, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "6662:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6652:16:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7423, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6651:18:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7424, + "name": "y_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7397, + "src": "6672:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6651:29:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7426, + "name": "ln_36_x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7414, + "src": "6685:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "%", + "rightExpression": { + "id": 7427, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "6695:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6685:16:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7429, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6684:18:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7430, + "name": "y_int256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7397, + "src": "6705:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6684:29:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7432, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6683:31:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7433, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "6717:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6683:40:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6651:72:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7436, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6650:74:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6635:89:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7438, + "nodeType": "ExpressionStatement", + "src": "6635:89:48" + } + ] + } + }, + { + "expression": { + "id": 7452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7450, + "name": "logx_times_y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7404, + "src": "6814:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "id": 7451, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "6830:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6814:22:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7453, + "nodeType": "ExpressionStatement", + "src": "6814:22:48" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7455, + "name": "MIN_NATURAL_EXPONENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7252, + "src": "6932:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 7456, + "name": "logx_times_y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7404, + "src": "6956:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6932:36:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7458, + "name": "logx_times_y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7404, + "src": "6972:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 7459, + "name": "MAX_NATURAL_EXPONENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7248, + "src": "6988:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "6972:36:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6932:76:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7462, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7022:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PRODUCT_OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 557, + "src": "7022:28:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7454, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6910:8:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6910:150:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7465, + "nodeType": "ExpressionStatement", + "src": "6910:150:48" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 7469, + "name": "logx_times_y", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7404, + "src": "7090:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7468, + "name": "exp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7901, + "src": "7086:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7086:17:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7467, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7078:7:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 7466, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7078:7:48", + "typeDescriptions": {} + } + }, + "id": 7471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7078:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 7353, + "id": 7472, + "nodeType": "Return", + "src": "7071:33:48" + } + ] + }, + "documentation": { + "id": 7345, + "nodeType": "StructuredDocumentation", + "src": "4697:214:48", + "text": " @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`." + }, + "id": 7474, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "pow", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7347, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "scope": 7474, + "src": "4929:9:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7346, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4929:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7349, + "mutability": "mutable", + "name": "y", + "nodeType": "VariableDeclaration", + "scope": 7474, + "src": "4940:9:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7348, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4940:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4928:22:48" + }, + "returnParameters": { + "id": 7353, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7352, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7474, + "src": "4974:7:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 7351, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4974:7:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4973:9:48" + }, + "scope": 8530, + "src": "4916:2195:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7900, + "nodeType": "Block", + "src": "7379:5325:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7483, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "7398:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7484, + "name": "MIN_NATURAL_EXPONENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7252, + "src": "7403:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "7398:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7486, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "7427:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 7487, + "name": "MAX_NATURAL_EXPONENT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7248, + "src": "7432:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "7427:25:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7398:54:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7490, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7454:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_EXPONENT", + "nodeType": "MemberAccess", + "referencedDeclaration": 560, + "src": "7454:23:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7482, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7389:8:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7389:89:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7493, + "nodeType": "ExpressionStatement", + "src": "7389:89:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7496, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7494, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "7493:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "30", + "id": 7495, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7497:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7493:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7509, + "nodeType": "IfStatement", + "src": "7489:353:48", + "trueBody": { + "id": 7508, + "nodeType": "Block", + "src": "7500:342:48", + "statements": [ + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 7497, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "7804:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7498, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "7813:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "7804:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7500, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7803:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "arguments": [ + { + "id": 7503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "7827:2:48", + "subExpression": { + "id": 7502, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "7828:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7501, + "name": "exp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7901, + "src": "7823:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7823:7:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "7803:27:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7506, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7802:29:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7481, + "id": 7507, + "nodeType": "Return", + "src": "7795:36:48" + } + ] + } + }, + { + "assignments": [ + 7511 + ], + "declarations": [ + { + "constant": false, + "id": 7511, + "mutability": "mutable", + "name": "firstAN", + "nodeType": "VariableDeclaration", + "scope": 7900, + "src": "9143:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7510, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "9143:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7512, + "nodeType": "VariableDeclarationStatement", + "src": "9143:14:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7513, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9171:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7514, + "name": "x0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7275, + "src": "9176:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9171:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7525, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9248:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7526, + "name": "x1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7281, + "src": "9253:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9248:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7541, + "nodeType": "Block", + "src": "9321:66:48", + "statements": [ + { + "expression": { + "id": 7539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7537, + "name": "firstAN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7511, + "src": "9335:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31", + "id": 7538, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9345:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "9335:11:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7540, + "nodeType": "ExpressionStatement", + "src": "9335:11:48" + } + ] + }, + "id": 7542, + "nodeType": "IfStatement", + "src": "9244:143:48", + "trueBody": { + "id": 7536, + "nodeType": "Block", + "src": "9257:58:48", + "statements": [ + { + "expression": { + "id": 7530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7528, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9271:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7529, + "name": "x1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7281, + "src": "9276:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9271:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7531, + "nodeType": "ExpressionStatement", + "src": "9271:7:48" + }, + { + "expression": { + "id": 7534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7532, + "name": "firstAN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7511, + "src": "9292:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7533, + "name": "a1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7284, + "src": "9302:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9292:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7535, + "nodeType": "ExpressionStatement", + "src": "9292:12:48" + } + ] + } + }, + "id": 7543, + "nodeType": "IfStatement", + "src": "9167:220:48", + "trueBody": { + "id": 7524, + "nodeType": "Block", + "src": "9180:58:48", + "statements": [ + { + "expression": { + "id": 7518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7516, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9194:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7517, + "name": "x0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7275, + "src": "9199:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9194:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7519, + "nodeType": "ExpressionStatement", + "src": "9194:7:48" + }, + { + "expression": { + "id": 7522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7520, + "name": "firstAN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7511, + "src": "9215:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7521, + "name": "a0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7278, + "src": "9225:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9215:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7523, + "nodeType": "ExpressionStatement", + "src": "9215:12:48" + } + ] + } + }, + { + "expression": { + "id": 7546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7544, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9537:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "hexValue": "313030", + "id": 7545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9542:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "src": "9537:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7547, + "nodeType": "ExpressionStatement", + "src": "9537:8:48" + }, + { + "assignments": [ + 7549 + ], + "declarations": [ + { + "constant": false, + "id": 7549, + "mutability": "mutable", + "name": "product", + "nodeType": "VariableDeclaration", + "scope": 7900, + "src": "9758:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7548, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "9758:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7551, + "initialValue": { + "id": 7550, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "9775:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9758:23:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7552, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9796:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7553, + "name": "x2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7287, + "src": "9801:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9796:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7569, + "nodeType": "IfStatement", + "src": "9792:92:48", + "trueBody": { + "id": 7568, + "nodeType": "Block", + "src": "9805:79:48", + "statements": [ + { + "expression": { + "id": 7557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7555, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9819:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7556, + "name": "x2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7287, + "src": "9824:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9819:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7558, + "nodeType": "ExpressionStatement", + "src": "9819:7:48" + }, + { + "expression": { + "id": 7566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7559, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "9840:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7565, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7560, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "9851:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7561, + "name": "a2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7290, + "src": "9861:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9851:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7563, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9850:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7564, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "9867:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9850:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9840:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7567, + "nodeType": "ExpressionStatement", + "src": "9840:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7570, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9897:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7571, + "name": "x3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7293, + "src": "9902:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9897:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7587, + "nodeType": "IfStatement", + "src": "9893:92:48", + "trueBody": { + "id": 7586, + "nodeType": "Block", + "src": "9906:79:48", + "statements": [ + { + "expression": { + "id": 7575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7573, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9920:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7574, + "name": "x3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7293, + "src": "9925:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9920:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7576, + "nodeType": "ExpressionStatement", + "src": "9920:7:48" + }, + { + "expression": { + "id": 7584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7577, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "9941:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7578, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "9952:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7579, + "name": "a3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7296, + "src": "9962:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9952:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7581, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9951:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7582, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "9968:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9951:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9941:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7585, + "nodeType": "ExpressionStatement", + "src": "9941:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7588, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "9998:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7589, + "name": "x4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7299, + "src": "10003:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "9998:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7605, + "nodeType": "IfStatement", + "src": "9994:92:48", + "trueBody": { + "id": 7604, + "nodeType": "Block", + "src": "10007:79:48", + "statements": [ + { + "expression": { + "id": 7593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7591, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10021:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7592, + "name": "x4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7299, + "src": "10026:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10021:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7594, + "nodeType": "ExpressionStatement", + "src": "10021:7:48" + }, + { + "expression": { + "id": 7602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7595, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10042:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7596, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10053:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7597, + "name": "a4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7302, + "src": "10063:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10053:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7599, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10052:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7600, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10069:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10052:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10042:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7603, + "nodeType": "ExpressionStatement", + "src": "10042:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7606, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10099:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7607, + "name": "x5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7305, + "src": "10104:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10099:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7623, + "nodeType": "IfStatement", + "src": "10095:92:48", + "trueBody": { + "id": 7622, + "nodeType": "Block", + "src": "10108:79:48", + "statements": [ + { + "expression": { + "id": 7611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7609, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10122:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7610, + "name": "x5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7305, + "src": "10127:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10122:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7612, + "nodeType": "ExpressionStatement", + "src": "10122:7:48" + }, + { + "expression": { + "id": 7620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7613, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10143:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7614, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10154:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7615, + "name": "a5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7308, + "src": "10164:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10154:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7617, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10153:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7618, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10170:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10153:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10143:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7621, + "nodeType": "ExpressionStatement", + "src": "10143:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7624, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10200:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7625, + "name": "x6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7311, + "src": "10205:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10200:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7641, + "nodeType": "IfStatement", + "src": "10196:92:48", + "trueBody": { + "id": 7640, + "nodeType": "Block", + "src": "10209:79:48", + "statements": [ + { + "expression": { + "id": 7629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7627, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10223:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7628, + "name": "x6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7311, + "src": "10228:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10223:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7630, + "nodeType": "ExpressionStatement", + "src": "10223:7:48" + }, + { + "expression": { + "id": 7638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7631, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10244:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7637, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7632, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10255:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7633, + "name": "a6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7314, + "src": "10265:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10255:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7635, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10254:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7636, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10271:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10254:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10244:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7639, + "nodeType": "ExpressionStatement", + "src": "10244:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7642, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10301:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7643, + "name": "x7", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7317, + "src": "10306:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10301:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7659, + "nodeType": "IfStatement", + "src": "10297:92:48", + "trueBody": { + "id": 7658, + "nodeType": "Block", + "src": "10310:79:48", + "statements": [ + { + "expression": { + "id": 7647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7645, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10324:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7646, + "name": "x7", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7317, + "src": "10329:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10324:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7648, + "nodeType": "ExpressionStatement", + "src": "10324:7:48" + }, + { + "expression": { + "id": 7656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7649, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10345:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7650, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10356:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7651, + "name": "a7", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7320, + "src": "10366:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10356:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7653, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10355:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7654, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10372:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10355:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10345:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7657, + "nodeType": "ExpressionStatement", + "src": "10345:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7660, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10402:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7661, + "name": "x8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7323, + "src": "10407:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10402:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7677, + "nodeType": "IfStatement", + "src": "10398:92:48", + "trueBody": { + "id": 7676, + "nodeType": "Block", + "src": "10411:79:48", + "statements": [ + { + "expression": { + "id": 7665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7663, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10425:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7664, + "name": "x8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7323, + "src": "10430:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10425:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7666, + "nodeType": "ExpressionStatement", + "src": "10425:7:48" + }, + { + "expression": { + "id": 7674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7667, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10446:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7668, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10457:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7669, + "name": "a8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7326, + "src": "10467:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10457:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7671, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10456:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7672, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10473:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10456:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10446:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7675, + "nodeType": "ExpressionStatement", + "src": "10446:33:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7678, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10503:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 7679, + "name": "x9", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7329, + "src": "10508:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10503:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 7695, + "nodeType": "IfStatement", + "src": "10499:92:48", + "trueBody": { + "id": 7694, + "nodeType": "Block", + "src": "10512:79:48", + "statements": [ + { + "expression": { + "id": 7683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7681, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "10526:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "-=", + "rightHandSide": { + "id": 7682, + "name": "x9", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7329, + "src": "10531:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10526:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7684, + "nodeType": "ExpressionStatement", + "src": "10526:7:48" + }, + { + "expression": { + "id": 7692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7685, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10547:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7686, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "10558:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7687, + "name": "a9", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7332, + "src": "10568:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10558:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7689, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10557:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7690, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10574:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10557:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10547:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7693, + "nodeType": "ExpressionStatement", + "src": "10547:33:48" + } + ] + } + }, + { + "assignments": [ + 7697 + ], + "declarations": [ + { + "constant": false, + "id": 7697, + "mutability": "mutable", + "name": "seriesSum", + "nodeType": "VariableDeclaration", + "scope": 7900, + "src": "10895:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7696, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "10895:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7699, + "initialValue": { + "id": 7698, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "10914:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10895:25:48" + }, + { + "assignments": [ + 7701 + ], + "declarations": [ + { + "constant": false, + "id": 7701, + "mutability": "mutable", + "name": "term", + "nodeType": "VariableDeclaration", + "scope": 7900, + "src": "10985:11:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7700, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "10985:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7702, + "nodeType": "VariableDeclarationStatement", + "src": "10985:11:48" + }, + { + "expression": { + "id": 7705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7703, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11105:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 7704, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11112:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11105:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7706, + "nodeType": "ExpressionStatement", + "src": "11105:8:48" + }, + { + "expression": { + "id": 7709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7707, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11123:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7708, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11136:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11123:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7710, + "nodeType": "ExpressionStatement", + "src": "11123:17:48" + }, + { + "expression": { + "id": 7721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7711, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11377:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7712, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11386:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7713, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11393:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11386:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7715, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11385:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7716, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11398:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11385:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7718, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11384:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "32", + "id": 7719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11408:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "11384:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11377:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7722, + "nodeType": "ExpressionStatement", + "src": "11377:32:48" + }, + { + "expression": { + "id": 7725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7723, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11419:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7724, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11432:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11419:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7726, + "nodeType": "ExpressionStatement", + "src": "11419:17:48" + }, + { + "expression": { + "id": 7737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7727, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11447:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7728, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11456:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7729, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11463:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11456:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7731, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11455:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7732, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11468:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11455:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7734, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11454:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "33", + "id": 7735, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11478:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "11454:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11447:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7738, + "nodeType": "ExpressionStatement", + "src": "11447:32:48" + }, + { + "expression": { + "id": 7741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7739, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11489:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7740, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11502:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11489:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7742, + "nodeType": "ExpressionStatement", + "src": "11489:17:48" + }, + { + "expression": { + "id": 7753, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7743, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11517:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7744, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11526:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7745, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11533:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11526:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7747, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11525:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7748, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11538:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11525:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7750, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11524:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "34", + "id": 7751, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11548:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "11524:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11517:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7754, + "nodeType": "ExpressionStatement", + "src": "11517:32:48" + }, + { + "expression": { + "id": 7757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7755, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11559:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7756, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11572:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11559:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7758, + "nodeType": "ExpressionStatement", + "src": "11559:17:48" + }, + { + "expression": { + "id": 7769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7759, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11587:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7760, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11596:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7761, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11603:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11596:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7763, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11595:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7764, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11608:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11595:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7766, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11594:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "35", + "id": 7767, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11618:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "11594:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11587:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7770, + "nodeType": "ExpressionStatement", + "src": "11587:32:48" + }, + { + "expression": { + "id": 7773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7771, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11629:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7772, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11642:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11629:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7774, + "nodeType": "ExpressionStatement", + "src": "11629:17:48" + }, + { + "expression": { + "id": 7785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7775, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11657:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7776, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11666:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7777, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11673:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11666:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7779, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11665:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7780, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11678:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11665:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7782, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11664:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "36", + "id": 7783, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11688:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "src": "11664:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11657:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7786, + "nodeType": "ExpressionStatement", + "src": "11657:32:48" + }, + { + "expression": { + "id": 7789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7787, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11699:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7788, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11712:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11699:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7790, + "nodeType": "ExpressionStatement", + "src": "11699:17:48" + }, + { + "expression": { + "id": 7801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7791, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11727:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7792, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11736:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7793, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11743:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11736:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7795, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11735:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7796, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11748:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11735:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7798, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11734:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "37", + "id": 7799, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11758:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "src": "11734:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11727:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7802, + "nodeType": "ExpressionStatement", + "src": "11727:32:48" + }, + { + "expression": { + "id": 7805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7803, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11769:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7804, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11782:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11769:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7806, + "nodeType": "ExpressionStatement", + "src": "11769:17:48" + }, + { + "expression": { + "id": 7817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7807, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11797:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7810, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7808, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11806:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7809, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11813:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11806:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7811, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11805:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7812, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11818:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11805:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7814, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11804:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "38", + "id": 7815, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11828:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "src": "11804:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11797:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7818, + "nodeType": "ExpressionStatement", + "src": "11797:32:48" + }, + { + "expression": { + "id": 7821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7819, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11839:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7820, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11852:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11839:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7822, + "nodeType": "ExpressionStatement", + "src": "11839:17:48" + }, + { + "expression": { + "id": 7833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7823, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11867:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7824, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11876:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7825, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11883:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11876:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7827, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11875:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7828, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11888:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11875:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7830, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11874:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "39", + "id": 7831, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11898:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "src": "11874:25:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11867:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7834, + "nodeType": "ExpressionStatement", + "src": "11867:32:48" + }, + { + "expression": { + "id": 7837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7835, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11909:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7836, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11922:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11909:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7838, + "nodeType": "ExpressionStatement", + "src": "11909:17:48" + }, + { + "expression": { + "id": 7849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7839, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11937:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7840, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11946:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7841, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "11953:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11946:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7843, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11945:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7844, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "11958:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11945:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7846, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11944:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3130", + "id": 7847, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11968:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "src": "11944:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11937:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7850, + "nodeType": "ExpressionStatement", + "src": "11937:33:48" + }, + { + "expression": { + "id": 7853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7851, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "11980:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7852, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "11993:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11980:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7854, + "nodeType": "ExpressionStatement", + "src": "11980:17:48" + }, + { + "expression": { + "id": 7865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7855, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "12008:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7858, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7856, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "12017:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7857, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "12024:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12017:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7859, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12016:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7860, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "12029:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12016:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7862, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12015:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3131", + "id": 7863, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12039:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "src": "12015:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12008:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7866, + "nodeType": "ExpressionStatement", + "src": "12008:33:48" + }, + { + "expression": { + "id": 7869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7867, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "12051:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7868, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "12064:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12051:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7870, + "nodeType": "ExpressionStatement", + "src": "12051:17:48" + }, + { + "expression": { + "id": 7881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7871, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "12079:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7872, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "12088:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7873, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7477, + "src": "12095:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12088:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7875, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12087:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7876, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "12100:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12087:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7878, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12086:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3132", + "id": 7879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12110:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_12_by_1", + "typeString": "int_const 12" + }, + "value": "12" + }, + "src": "12086:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12079:33:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7882, + "nodeType": "ExpressionStatement", + "src": "12079:33:48" + }, + { + "expression": { + "id": 7885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7883, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "12122:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 7884, + "name": "term", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7701, + "src": "12135:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12122:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7886, + "nodeType": "ExpressionStatement", + "src": "12122:17:48" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7892, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7887, + "name": "product", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7549, + "src": "12650:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7888, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7697, + "src": "12660:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12650:19:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7890, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12649:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7891, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "12673:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12649:30:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7893, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12648:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7894, + "name": "firstAN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7511, + "src": "12683:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12648:42:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7896, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12647:44:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "313030", + "id": 7897, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12694:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "src": "12647:50:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7481, + "id": 7899, + "nodeType": "Return", + "src": "12640:57:48" + } + ] + }, + "documentation": { + "id": 7475, + "nodeType": "StructuredDocumentation", + "src": "7117:203:48", + "text": " @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`." + }, + "id": 7901, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7478, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7477, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "scope": 7901, + "src": "7338:8:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7476, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "7338:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "7337:10:48" + }, + "returnParameters": { + "id": 7481, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7480, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7901, + "src": "7371:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7479, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "7371:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "7370:8:48" + }, + "scope": 8530, + "src": "7325:5379:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 7972, + "nodeType": "Block", + "src": "12888:753:48", + "statements": [ + { + "assignments": [ + 7912 + ], + "declarations": [ + { + "constant": false, + "id": 7912, + "mutability": "mutable", + "name": "logBase", + "nodeType": "VariableDeclaration", + "scope": 7972, + "src": "13118:14:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7911, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13118:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7913, + "nodeType": "VariableDeclarationStatement", + "src": "13118:14:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7916, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7914, + "name": "LN_36_LOWER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7257, + "src": "13146:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7915, + "name": "base", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7906, + "src": "13166:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13146:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7917, + "name": "base", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7906, + "src": "13174:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7918, + "name": "LN_36_UPPER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7262, + "src": "13181:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13174:24:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "13146:52:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7936, + "nodeType": "Block", + "src": "13253:53:48", + "statements": [ + { + "expression": { + "id": 7934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7928, + "name": "logBase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7912, + "src": "13267:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7930, + "name": "base", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7906, + "src": "13281:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7929, + "name": "_ln", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8375, + "src": "13277:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13277:9:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7932, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "13289:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13277:18:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13267:28:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7935, + "nodeType": "ExpressionStatement", + "src": "13267:28:48" + } + ] + }, + "id": 7937, + "nodeType": "IfStatement", + "src": "13142:164:48", + "trueBody": { + "id": 7927, + "nodeType": "Block", + "src": "13200:47:48", + "statements": [ + { + "expression": { + "id": 7925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7921, + "name": "logBase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7912, + "src": "13214:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 7923, + "name": "base", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7906, + "src": "13231:4:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7922, + "name": "_ln_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8529, + "src": "13224:6:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13224:12:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13214:22:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7926, + "nodeType": "ExpressionStatement", + "src": "13214:22:48" + } + ] + } + }, + { + "assignments": [ + 7939 + ], + "declarations": [ + { + "constant": false, + "id": 7939, + "mutability": "mutable", + "name": "logArg", + "nodeType": "VariableDeclaration", + "scope": 7972, + "src": "13316:13:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7938, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13316:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 7940, + "nodeType": "VariableDeclarationStatement", + "src": "13316:13:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7941, + "name": "LN_36_LOWER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7257, + "src": "13343:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7942, + "name": "arg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7904, + "src": "13363:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13343:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7946, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7944, + "name": "arg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7904, + "src": "13370:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7945, + "name": "LN_36_UPPER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7262, + "src": "13376:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13370:23:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "13343:50:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 7963, + "nodeType": "Block", + "src": "13446:51:48", + "statements": [ + { + "expression": { + "id": 7961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7955, + "name": "logArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7939, + "src": "13460:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7960, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7957, + "name": "arg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7904, + "src": "13473:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7956, + "name": "_ln", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8375, + "src": "13469:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13469:8:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7959, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "13480:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13469:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13460:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7962, + "nodeType": "ExpressionStatement", + "src": "13460:26:48" + } + ] + }, + "id": 7964, + "nodeType": "IfStatement", + "src": "13339:158:48", + "trueBody": { + "id": 7954, + "nodeType": "Block", + "src": "13395:45:48", + "statements": [ + { + "expression": { + "id": 7952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 7948, + "name": "logArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7939, + "src": "13409:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 7950, + "name": "arg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7904, + "src": "13425:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7949, + "name": "_ln_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8529, + "src": "13418:6:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13418:11:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13409:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 7953, + "nodeType": "ExpressionStatement", + "src": "13409:20:48" + } + ] + } + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7965, + "name": "logArg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7939, + "src": "13608:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 7966, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "13617:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13608:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 7968, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "13607:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7969, + "name": "logBase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7912, + "src": "13627:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13607:27:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7910, + "id": 7971, + "nodeType": "Return", + "src": "13600:34:48" + } + ] + }, + "documentation": { + "id": 7902, + "nodeType": "StructuredDocumentation", + "src": "12710:104:48", + "text": " @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument." + }, + "id": 7973, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "log", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7907, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7904, + "mutability": "mutable", + "name": "arg", + "nodeType": "VariableDeclaration", + "scope": 7973, + "src": "12832:10:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7903, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "12832:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 7906, + "mutability": "mutable", + "name": "base", + "nodeType": "VariableDeclaration", + "scope": 7973, + "src": "12844:11:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7905, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "12844:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "12831:25:48" + }, + "returnParameters": { + "id": 7910, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7909, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 7973, + "src": "12880:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7908, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "12880:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "12879:8:48" + }, + "scope": 8530, + "src": "12819:822:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8009, + "nodeType": "Block", + "src": "13799:292:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7984, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7982, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7976, + "src": "13901:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 7983, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13905:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13901:5:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 7985, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "13908:6:48", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 7986, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "13908:20:48", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 7981, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "13892:8:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 7987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13892:37:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 7988, + "nodeType": "ExpressionStatement", + "src": "13892:37:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 7995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7989, + "name": "LN_36_LOWER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7257, + "src": "13943:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7990, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7976, + "src": "13963:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13943:21:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 7994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 7992, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7976, + "src": "13968:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 7993, + "name": "LN_36_UPPER_BOUND", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7262, + "src": "13972:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13968:21:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "13943:46:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8007, + "nodeType": "Block", + "src": "14047:38:48", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8004, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7976, + "src": "14072:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 8003, + "name": "_ln", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8375, + "src": "14068:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 8005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14068:6:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7980, + "id": 8006, + "nodeType": "Return", + "src": "14061:13:48" + } + ] + }, + "id": 8008, + "nodeType": "IfStatement", + "src": "13939:146:48", + "trueBody": { + "id": 8002, + "nodeType": "Block", + "src": "13991:50:48", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8000, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 7997, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7976, + "src": "14019:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 7996, + "name": "_ln_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8529, + "src": "14012:6:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 7998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14012:9:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 7999, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "14024:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "14012:18:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 7980, + "id": 8001, + "nodeType": "Return", + "src": "14005:25:48" + } + ] + } + } + ] + }, + "documentation": { + "id": 7974, + "nodeType": "StructuredDocumentation", + "src": "13647:94:48", + "text": " @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument." + }, + "id": 8010, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ln", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 7977, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7976, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8010, + "src": "13758:8:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7975, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13758:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "13757:10:48" + }, + "returnParameters": { + "id": 7980, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 7979, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8010, + "src": "13791:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 7978, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13791:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "13790:8:48" + }, + "scope": 8530, + "src": "13746:345:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8374, + "nodeType": "Block", + "src": "14258:4906:48", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8020, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8018, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "14272:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 8019, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "14276:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "14272:10:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8033, + "nodeType": "IfStatement", + "src": "14268:382:48", + "trueBody": { + "id": 8032, + "nodeType": "Block", + "src": "14284:366:48", + "statements": [ + { + "expression": { + "components": [ + { + "id": 8029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "14611:27:48", + "subExpression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8024, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 8022, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "14617:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8023, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "14626:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "14617:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8025, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14616:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8026, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "14636:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "14616:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 8021, + "name": "_ln", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8375, + "src": "14612:3:48", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_int256_$", + "typeString": "function (int256) pure returns (int256)" + } + }, + "id": 8028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14612:26:48", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8030, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14610:29:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 8017, + "id": 8031, + "nodeType": "Return", + "src": "14603:36:48" + } + ] + } + }, + { + "assignments": [ + 8035 + ], + "declarations": [ + { + "constant": false, + "id": 8035, + "mutability": "mutable", + "name": "sum", + "nodeType": "VariableDeclaration", + "scope": 8374, + "src": "15975:10:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8034, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "15975:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8037, + "initialValue": { + "hexValue": "30", + "id": 8036, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15988:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "15975:14:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8038, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16003:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8041, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 8039, + "name": "a0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7278, + "src": "16008:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8040, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "16013:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16008:11:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16003:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8052, + "nodeType": "IfStatement", + "src": "15999:114:48", + "trueBody": { + "id": 8051, + "nodeType": "Block", + "src": "16021:92:48", + "statements": [ + { + "expression": { + "id": 8045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8043, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16035:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "id": 8044, + "name": "a0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7278, + "src": "16040:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16035:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8046, + "nodeType": "ExpressionStatement", + "src": "16035:7:48" + }, + { + "expression": { + "id": 8049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8047, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16093:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8048, + "name": "x0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7275, + "src": "16100:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16093:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8050, + "nodeType": "ExpressionStatement", + "src": "16093:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8053, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16127:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 8054, + "name": "a1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7284, + "src": "16132:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8055, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "16137:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16132:11:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16127:16:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8067, + "nodeType": "IfStatement", + "src": "16123:114:48", + "trueBody": { + "id": 8066, + "nodeType": "Block", + "src": "16145:92:48", + "statements": [ + { + "expression": { + "id": 8060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8058, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16159:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "/=", + "rightHandSide": { + "id": 8059, + "name": "a1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7284, + "src": "16164:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16159:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8061, + "nodeType": "ExpressionStatement", + "src": "16159:7:48" + }, + { + "expression": { + "id": 8064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8062, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16217:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8063, + "name": "x1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7281, + "src": "16224:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16217:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8065, + "nodeType": "ExpressionStatement", + "src": "16217:9:48" + } + ] + } + }, + { + "expression": { + "id": 8070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8068, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16368:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "hexValue": "313030", + "id": 8069, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16375:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "src": "16368:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8071, + "nodeType": "ExpressionStatement", + "src": "16368:10:48" + }, + { + "expression": { + "id": 8074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8072, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16388:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "hexValue": "313030", + "id": 8073, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16393:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "src": "16388:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8075, + "nodeType": "ExpressionStatement", + "src": "16388:8:48" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8076, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16523:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8077, + "name": "a2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7290, + "src": "16528:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16523:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8093, + "nodeType": "IfStatement", + "src": "16519:82:48", + "trueBody": { + "id": 8092, + "nodeType": "Block", + "src": "16532:69:48", + "statements": [ + { + "expression": { + "id": 8086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8079, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16546:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8080, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16551:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8081, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "16555:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16551:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8083, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16550:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8084, + "name": "a2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7290, + "src": "16565:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16550:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16546:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8087, + "nodeType": "ExpressionStatement", + "src": "16546:21:48" + }, + { + "expression": { + "id": 8090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8088, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16581:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8089, + "name": "x2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7287, + "src": "16588:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16581:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8091, + "nodeType": "ExpressionStatement", + "src": "16581:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8094, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16615:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8095, + "name": "a3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7296, + "src": "16620:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16615:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8111, + "nodeType": "IfStatement", + "src": "16611:82:48", + "trueBody": { + "id": 8110, + "nodeType": "Block", + "src": "16624:69:48", + "statements": [ + { + "expression": { + "id": 8104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8097, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16638:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8098, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16643:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8099, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "16647:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16643:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8101, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16642:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8102, + "name": "a3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7296, + "src": "16657:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16642:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16638:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8105, + "nodeType": "ExpressionStatement", + "src": "16638:21:48" + }, + { + "expression": { + "id": 8108, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8106, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16673:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8107, + "name": "x3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7293, + "src": "16680:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16673:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8109, + "nodeType": "ExpressionStatement", + "src": "16673:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8112, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16707:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8113, + "name": "a4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7302, + "src": "16712:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16707:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8129, + "nodeType": "IfStatement", + "src": "16703:82:48", + "trueBody": { + "id": 8128, + "nodeType": "Block", + "src": "16716:69:48", + "statements": [ + { + "expression": { + "id": 8122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8115, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16730:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8116, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16735:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8117, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "16739:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16735:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8119, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16734:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8120, + "name": "a4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7302, + "src": "16749:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16734:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16730:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8123, + "nodeType": "ExpressionStatement", + "src": "16730:21:48" + }, + { + "expression": { + "id": 8126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8124, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16765:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8125, + "name": "x4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7299, + "src": "16772:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16765:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8127, + "nodeType": "ExpressionStatement", + "src": "16765:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8130, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16799:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8131, + "name": "a5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7308, + "src": "16804:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16799:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8147, + "nodeType": "IfStatement", + "src": "16795:82:48", + "trueBody": { + "id": 8146, + "nodeType": "Block", + "src": "16808:69:48", + "statements": [ + { + "expression": { + "id": 8140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8133, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16822:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8134, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16827:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8135, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "16831:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16827:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8137, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16826:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8138, + "name": "a5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7308, + "src": "16841:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16826:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16822:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8141, + "nodeType": "ExpressionStatement", + "src": "16822:21:48" + }, + { + "expression": { + "id": 8144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8142, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16857:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8143, + "name": "x5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7305, + "src": "16864:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16857:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8145, + "nodeType": "ExpressionStatement", + "src": "16857:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8150, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8148, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16891:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8149, + "name": "a6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7314, + "src": "16896:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16891:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8165, + "nodeType": "IfStatement", + "src": "16887:82:48", + "trueBody": { + "id": 8164, + "nodeType": "Block", + "src": "16900:69:48", + "statements": [ + { + "expression": { + "id": 8158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8151, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16914:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8157, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8152, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16919:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8153, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "16923:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16919:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8155, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16918:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8156, + "name": "a6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7314, + "src": "16933:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16918:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16914:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8159, + "nodeType": "ExpressionStatement", + "src": "16914:21:48" + }, + { + "expression": { + "id": 8162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8160, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "16949:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8161, + "name": "x6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7311, + "src": "16956:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16949:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8163, + "nodeType": "ExpressionStatement", + "src": "16949:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8166, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "16983:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8167, + "name": "a7", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7320, + "src": "16988:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "16983:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8183, + "nodeType": "IfStatement", + "src": "16979:82:48", + "trueBody": { + "id": 8182, + "nodeType": "Block", + "src": "16992:69:48", + "statements": [ + { + "expression": { + "id": 8176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8169, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17006:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8170, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17011:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8171, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17015:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17011:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8173, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17010:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8174, + "name": "a7", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7320, + "src": "17025:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17010:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17006:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8177, + "nodeType": "ExpressionStatement", + "src": "17006:21:48" + }, + { + "expression": { + "id": 8180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8178, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "17041:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8179, + "name": "x7", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7317, + "src": "17048:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17041:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8181, + "nodeType": "ExpressionStatement", + "src": "17041:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8184, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17075:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8185, + "name": "a8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7326, + "src": "17080:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17075:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8201, + "nodeType": "IfStatement", + "src": "17071:82:48", + "trueBody": { + "id": 8200, + "nodeType": "Block", + "src": "17084:69:48", + "statements": [ + { + "expression": { + "id": 8194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8187, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17098:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8188, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17103:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8189, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17107:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17103:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8191, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17102:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8192, + "name": "a8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7326, + "src": "17117:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17102:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17098:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8195, + "nodeType": "ExpressionStatement", + "src": "17098:21:48" + }, + { + "expression": { + "id": 8198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8196, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "17133:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8197, + "name": "x8", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7323, + "src": "17140:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17133:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8199, + "nodeType": "ExpressionStatement", + "src": "17133:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8202, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17167:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8203, + "name": "a9", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7332, + "src": "17172:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17167:7:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8219, + "nodeType": "IfStatement", + "src": "17163:82:48", + "trueBody": { + "id": 8218, + "nodeType": "Block", + "src": "17176:69:48", + "statements": [ + { + "expression": { + "id": 8212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8205, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17190:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8206, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17195:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8207, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17199:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17195:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8209, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17194:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8210, + "name": "a9", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7332, + "src": "17209:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17194:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17190:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8213, + "nodeType": "ExpressionStatement", + "src": "17190:21:48" + }, + { + "expression": { + "id": 8216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8214, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "17225:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8215, + "name": "x9", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7329, + "src": "17232:2:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17225:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8217, + "nodeType": "ExpressionStatement", + "src": "17225:9:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8220, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17259:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8221, + "name": "a10", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7338, + "src": "17264:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17259:8:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8237, + "nodeType": "IfStatement", + "src": "17255:85:48", + "trueBody": { + "id": 8236, + "nodeType": "Block", + "src": "17269:71:48", + "statements": [ + { + "expression": { + "id": 8230, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8223, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17283:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8224, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17288:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8225, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17292:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17288:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8227, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17287:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8228, + "name": "a10", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7338, + "src": "17302:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17287:18:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17283:22:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8231, + "nodeType": "ExpressionStatement", + "src": "17283:22:48" + }, + { + "expression": { + "id": 8234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8232, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "17319:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8233, + "name": "x10", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7335, + "src": "17326:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17319:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8235, + "nodeType": "ExpressionStatement", + "src": "17319:10:48" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8240, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8238, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17354:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8239, + "name": "a11", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7344, + "src": "17359:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17354:8:48", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8255, + "nodeType": "IfStatement", + "src": "17350:85:48", + "trueBody": { + "id": 8254, + "nodeType": "Block", + "src": "17364:71:48", + "statements": [ + { + "expression": { + "id": 8248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8241, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17378:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8242, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17383:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8243, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17387:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17383:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8245, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17382:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8246, + "name": "a11", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7344, + "src": "17397:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17382:18:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17378:22:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8249, + "nodeType": "ExpressionStatement", + "src": "17378:22:48" + }, + { + "expression": { + "id": 8252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8250, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "17414:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "id": 8251, + "name": "x11", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7341, + "src": "17421:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17414:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8253, + "nodeType": "ExpressionStatement", + "src": "17414:10:48" + } + ] + } + }, + { + "assignments": [ + 8257 + ], + "declarations": [ + { + "constant": false, + "id": 8257, + "mutability": "mutable", + "name": "z", + "nodeType": "VariableDeclaration", + "scope": 8374, + "src": "17937:8:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8256, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "17937:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8270, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8258, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17950:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8259, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17954:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17950:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8261, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17949:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8262, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17964:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17949:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8264, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17948:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8265, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17975:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8266, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "17979:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17975:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8268, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17974:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "17948:38:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17937:49:48" + }, + { + "assignments": [ + 8272 + ], + "declarations": [ + { + "constant": false, + "id": 8272, + "mutability": "mutable", + "name": "z_squared", + "nodeType": "VariableDeclaration", + "scope": 8374, + "src": "17996:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8271, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "17996:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8279, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8275, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8273, + "name": "z", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8257, + "src": "18016:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8274, + "name": "z", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8257, + "src": "18020:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18016:5:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8276, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18015:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8277, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "18025:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18015:16:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17996:35:48" + }, + { + "assignments": [ + 8281 + ], + "declarations": [ + { + "constant": false, + "id": 8281, + "mutability": "mutable", + "name": "num", + "nodeType": "VariableDeclaration", + "scope": 8374, + "src": "18112:10:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8280, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "18112:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8283, + "initialValue": { + "id": 8282, + "name": "z", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8257, + "src": "18125:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18112:14:48" + }, + { + "assignments": [ + 8285 + ], + "declarations": [ + { + "constant": false, + "id": 8285, + "mutability": "mutable", + "name": "seriesSum", + "nodeType": "VariableDeclaration", + "scope": 8374, + "src": "18240:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8284, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "18240:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8287, + "initialValue": { + "id": 8286, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18259:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18240:22:48" + }, + { + "expression": { + "id": 8295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8288, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18333:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8289, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18340:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8290, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8272, + "src": "18346:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18340:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8292, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18339:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8293, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "18359:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18339:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18333:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8296, + "nodeType": "ExpressionStatement", + "src": "18333:32:48" + }, + { + "expression": { + "id": 8301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8297, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "18375:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8298, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18388:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "33", + "id": 8299, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18394:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "18388:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18375:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8302, + "nodeType": "ExpressionStatement", + "src": "18375:20:48" + }, + { + "expression": { + "id": 8310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8303, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18406:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8306, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8304, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18413:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8305, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8272, + "src": "18419:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18413:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8307, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18412:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8308, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "18432:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18412:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18406:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8311, + "nodeType": "ExpressionStatement", + "src": "18406:32:48" + }, + { + "expression": { + "id": 8316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8312, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "18448:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8313, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18461:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "35", + "id": 8314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18467:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "18461:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18448:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8317, + "nodeType": "ExpressionStatement", + "src": "18448:20:48" + }, + { + "expression": { + "id": 8325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8318, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18479:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8319, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18486:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8320, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8272, + "src": "18492:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18486:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8322, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18485:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8323, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "18505:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18485:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18479:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8326, + "nodeType": "ExpressionStatement", + "src": "18479:32:48" + }, + { + "expression": { + "id": 8331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8327, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "18521:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8328, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18534:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "37", + "id": 8329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18540:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "src": "18534:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18521:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8332, + "nodeType": "ExpressionStatement", + "src": "18521:20:48" + }, + { + "expression": { + "id": 8340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8333, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18552:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8334, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18559:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8335, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8272, + "src": "18565:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18559:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8337, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18558:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8338, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "18578:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18558:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18552:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8341, + "nodeType": "ExpressionStatement", + "src": "18552:32:48" + }, + { + "expression": { + "id": 8346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8342, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "18594:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8343, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18607:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "39", + "id": 8344, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18613:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "src": "18607:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18594:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8347, + "nodeType": "ExpressionStatement", + "src": "18594:20:48" + }, + { + "expression": { + "id": 8355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8348, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18625:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8349, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18632:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8350, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8272, + "src": "18638:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18632:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8352, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18631:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8353, + "name": "ONE_20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7242, + "src": "18651:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18631:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18625:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8356, + "nodeType": "ExpressionStatement", + "src": "18625:32:48" + }, + { + "expression": { + "id": 8361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8357, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "18667:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8358, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8281, + "src": "18680:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3131", + "id": 8359, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18686:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "src": "18680:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "18667:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8362, + "nodeType": "ExpressionStatement", + "src": "18667:21:48" + }, + { + "expression": { + "id": 8365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8363, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "18847:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "hexValue": "32", + "id": 8364, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18860:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "18847:14:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8366, + "nodeType": "ExpressionStatement", + "src": "18847:14:48" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8367, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8035, + "src": "19135:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8368, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8285, + "src": "19141:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "19135:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8370, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19134:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "313030", + "id": 8371, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19154:3:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_100_by_1", + "typeString": "int_const 100" + }, + "value": "100" + }, + "src": "19134:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 8017, + "id": 8373, + "nodeType": "Return", + "src": "19127:30:48" + } + ] + }, + "documentation": { + "id": 8011, + "nodeType": "StructuredDocumentation", + "src": "14097:103:48", + "text": " @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument." + }, + "id": 8375, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ln", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8013, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8375, + "src": "14218:8:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8012, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "14218:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "14217:10:48" + }, + "returnParameters": { + "id": 8017, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8016, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8375, + "src": "14250:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8015, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "14250:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "14249:8:48" + }, + "scope": 8530, + "src": "14205:4959:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 8528, + "nodeType": "Block", + "src": "19486:1658:48", + "statements": [ + { + "expression": { + "id": 8385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8383, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8378, + "src": "19700:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "*=", + "rightHandSide": { + "id": 8384, + "name": "ONE_18", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7239, + "src": "19705:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "19700:11:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8386, + "nodeType": "ExpressionStatement", + "src": "19700:11:48" + }, + { + "assignments": [ + 8388 + ], + "declarations": [ + { + "constant": false, + "id": 8388, + "mutability": "mutable", + "name": "z", + "nodeType": "VariableDeclaration", + "scope": 8528, + "src": "20072:8:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8387, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "20072:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8401, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8389, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8378, + "src": "20085:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8390, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20089:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20085:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8392, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20084:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8393, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20099:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20084:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8395, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20083:23:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8396, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8378, + "src": "20110:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8397, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20114:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20110:10:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8399, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20109:12:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20083:38:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20072:49:48" + }, + { + "assignments": [ + 8403 + ], + "declarations": [ + { + "constant": false, + "id": 8403, + "mutability": "mutable", + "name": "z_squared", + "nodeType": "VariableDeclaration", + "scope": 8528, + "src": "20131:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8402, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "20131:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8410, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8404, + "name": "z", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8388, + "src": "20151:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8405, + "name": "z", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8388, + "src": "20155:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20151:5:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8407, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20150:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8408, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20160:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20150:16:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20131:35:48" + }, + { + "assignments": [ + 8412 + ], + "declarations": [ + { + "constant": false, + "id": 8412, + "mutability": "mutable", + "name": "num", + "nodeType": "VariableDeclaration", + "scope": 8528, + "src": "20247:10:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8411, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "20247:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8414, + "initialValue": { + "id": 8413, + "name": "z", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8388, + "src": "20260:1:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20247:14:48" + }, + { + "assignments": [ + 8416 + ], + "declarations": [ + { + "constant": false, + "id": 8416, + "mutability": "mutable", + "name": "seriesSum", + "nodeType": "VariableDeclaration", + "scope": 8528, + "src": "20375:16:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8415, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "20375:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8418, + "initialValue": { + "id": 8417, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20394:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20375:22:48" + }, + { + "expression": { + "id": 8426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8419, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20468:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8420, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20475:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8421, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20481:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20475:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8423, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20474:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8424, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20494:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20474:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20468:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8427, + "nodeType": "ExpressionStatement", + "src": "20468:32:48" + }, + { + "expression": { + "id": 8432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8428, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20510:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8429, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20523:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "33", + "id": 8430, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20529:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "20523:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20510:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8433, + "nodeType": "ExpressionStatement", + "src": "20510:20:48" + }, + { + "expression": { + "id": 8441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8434, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20541:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8435, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20548:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8436, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20554:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20548:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8438, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20547:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8439, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20567:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20547:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20541:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8442, + "nodeType": "ExpressionStatement", + "src": "20541:32:48" + }, + { + "expression": { + "id": 8447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8443, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20583:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8444, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20596:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "35", + "id": 8445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20602:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "20596:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20583:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8448, + "nodeType": "ExpressionStatement", + "src": "20583:20:48" + }, + { + "expression": { + "id": 8456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8449, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20614:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8450, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20621:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8451, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20627:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20621:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8453, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20620:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8454, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20640:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20620:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20614:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8457, + "nodeType": "ExpressionStatement", + "src": "20614:32:48" + }, + { + "expression": { + "id": 8462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8458, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20656:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8459, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20669:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "37", + "id": 8460, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20675:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "src": "20669:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20656:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8463, + "nodeType": "ExpressionStatement", + "src": "20656:20:48" + }, + { + "expression": { + "id": 8471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8464, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20687:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8465, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20694:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8466, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20700:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20694:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8468, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20693:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8469, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20713:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20693:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20687:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8472, + "nodeType": "ExpressionStatement", + "src": "20687:32:48" + }, + { + "expression": { + "id": 8477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8473, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20729:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8474, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20742:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "39", + "id": 8475, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20748:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "src": "20742:7:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20729:20:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8478, + "nodeType": "ExpressionStatement", + "src": "20729:20:48" + }, + { + "expression": { + "id": 8486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8479, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20760:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8480, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20767:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8481, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20773:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20767:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8483, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20766:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8484, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20786:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20766:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20760:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8487, + "nodeType": "ExpressionStatement", + "src": "20760:32:48" + }, + { + "expression": { + "id": 8492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8488, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20802:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8489, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20815:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3131", + "id": 8490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20821:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "src": "20815:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20802:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8493, + "nodeType": "ExpressionStatement", + "src": "20802:21:48" + }, + { + "expression": { + "id": 8501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8494, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20834:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8495, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20841:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8496, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20847:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20841:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8498, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20840:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8499, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20860:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20840:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20834:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8502, + "nodeType": "ExpressionStatement", + "src": "20834:32:48" + }, + { + "expression": { + "id": 8507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8503, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20876:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8504, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20889:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3133", + "id": 8505, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20895:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_13_by_1", + "typeString": "int_const 13" + }, + "value": "13" + }, + "src": "20889:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20876:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8508, + "nodeType": "ExpressionStatement", + "src": "20876:21:48" + }, + { + "expression": { + "id": 8516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8509, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20908:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8510, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20915:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8511, + "name": "z_squared", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8403, + "src": "20921:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20915:15:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 8513, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20914:17:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8514, + "name": "ONE_36", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7245, + "src": "20934:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20914:26:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20908:32:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8517, + "nodeType": "ExpressionStatement", + "src": "20908:32:48" + }, + { + "expression": { + "id": 8522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8518, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "20950:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8519, + "name": "num", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8412, + "src": "20963:3:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "hexValue": "3135", + "id": 8520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20969:2:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_15_by_1", + "typeString": "int_const 15" + }, + "value": "15" + }, + "src": "20963:8:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "20950:21:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 8523, + "nodeType": "ExpressionStatement", + "src": "20950:21:48" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8524, + "name": "seriesSum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8416, + "src": "21124:9:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "32", + "id": 8525, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21136:1:48", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "21124:13:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 8382, + "id": 8527, + "nodeType": "Return", + "src": "21117:20:48" + } + ] + }, + "documentation": { + "id": 8376, + "nodeType": "StructuredDocumentation", + "src": "19170:255:48", + "text": " @dev Intrnal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND." + }, + "id": 8529, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_ln_36", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8378, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "scope": 8529, + "src": "19446:8:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8377, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "19446:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "19445:10:48" + }, + "returnParameters": { + "id": 8382, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8381, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8529, + "src": "19478:6:48", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8380, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "19478:6:48", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "19477:8:48" + }, + "scope": 8530, + "src": "19430:1714:48", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 8531, + "src": "1681:19465:48" + } + ], + "src": "1094:20053:48" + }, + "id": 48 + }, + "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "exportedSymbols": { + "Math": [ + 8842 + ] + }, + "id": 8843, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 8532, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:49" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 8533, + "nodeType": "ImportDirective", + "scope": 8843, + "sourceUnit": 1012, + "src": "58:90:49", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 8534, + "nodeType": "StructuredDocumentation", + "src": "150:139:49", + "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow checks.\n Adapted from OpenZeppelin's SafeMath library." + }, + "fullyImplemented": true, + "id": 8842, + "linearizedBaseContracts": [ + 8842 + ], + "name": "Math", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 8556, + "nodeType": "Block", + "src": "440:56:49", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8542, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8537, + "src": "457:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "461:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "457:5:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 8552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "486:2:49", + "subExpression": { + "id": 8551, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8537, + "src": "487:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 8550, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "478:7:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 8549, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "478:7:49", + "typeDescriptions": {} + } + }, + "id": 8553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "478:11:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "457:32:49", + "trueExpression": { + "arguments": [ + { + "id": 8547, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8537, + "src": "473:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 8546, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "465:7:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 8545, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "465:7:49", + "typeDescriptions": {} + } + }, + "id": 8548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "465:10:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8541, + "id": 8555, + "nodeType": "Return", + "src": "450:39:49" + } + ] + }, + "documentation": { + "id": 8535, + "nodeType": "StructuredDocumentation", + "src": "309:71:49", + "text": " @dev Returns the absolute value of a signed integer." + }, + "id": 8557, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "abs", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8538, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8537, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8557, + "src": "398:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8536, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "398:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "397:10:49" + }, + "returnParameters": { + "id": 8541, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8540, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8557, + "src": "431:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8539, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "431:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "430:9:49" + }, + "scope": 8842, + "src": "385:111:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8583, + "nodeType": "Block", + "src": "679:99:49", + "statements": [ + { + "assignments": [ + 8568 + ], + "declarations": [ + { + "constant": false, + "id": 8568, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 8583, + "src": "689:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8567, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "689:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8572, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8569, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8560, + "src": "701:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8570, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8562, + "src": "705:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "701:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "689:17:49" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8574, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8568, + "src": "725:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8575, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8560, + "src": "730:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "725:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8577, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "733:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 533, + "src": "733:19:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8573, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "716:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8579, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "716:37:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8580, + "nodeType": "ExpressionStatement", + "src": "716:37:49" + }, + { + "expression": { + "id": 8581, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8568, + "src": "770:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8566, + "id": 8582, + "nodeType": "Return", + "src": "763:8:49" + } + ] + }, + "documentation": { + "id": 8558, + "nodeType": "StructuredDocumentation", + "src": "502:105:49", + "text": " @dev Returns the addition of two unsigned integers of 256 bits, reverting on overflow." + }, + "id": 8584, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8563, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8560, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8584, + "src": "625:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8559, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "625:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8562, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8584, + "src": "636:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8561, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "636:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "624:22:49" + }, + "returnParameters": { + "id": 8566, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8565, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8584, + "src": "670:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8564, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "670:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "669:9:49" + }, + "scope": 8842, + "src": "612:166:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8624, + "nodeType": "Block", + "src": "944:130:49", + "statements": [ + { + "assignments": [ + 8595 + ], + "declarations": [ + { + "constant": false, + "id": 8595, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 8624, + "src": "954:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8594, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "954:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8599, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8596, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8587, + "src": "965:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 8597, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8589, + "src": "969:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "965:5:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "954:16:49" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8617, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8601, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8589, + "src": "990:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 8602, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "995:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "990:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8604, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8595, + "src": "1000:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8605, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8587, + "src": "1005:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1000:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "990:16:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 8608, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "989:18:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8609, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8589, + "src": "1012:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "30", + "id": 8610, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1016:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1012:5:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8612, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8595, + "src": "1021:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 8613, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8587, + "src": "1025:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1021:5:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1012:14:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 8616, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1011:16:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "989:38:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8618, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1029:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 533, + "src": "1029:19:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8600, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "980:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "980:69:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8621, + "nodeType": "ExpressionStatement", + "src": "980:69:49" + }, + { + "expression": { + "id": 8622, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8595, + "src": "1066:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 8593, + "id": 8623, + "nodeType": "Return", + "src": "1059:8:49" + } + ] + }, + "documentation": { + "id": 8585, + "nodeType": "StructuredDocumentation", + "src": "784:91:49", + "text": " @dev Returns the addition of two signed integers, reverting on overflow." + }, + "id": 8625, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8590, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8587, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8625, + "src": "893:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8586, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "893:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8589, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8625, + "src": "903:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8588, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "903:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "892:20:49" + }, + "returnParameters": { + "id": 8593, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8592, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8625, + "src": "936:6:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8591, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "936:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "935:8:49" + }, + "scope": 8842, + "src": "880:194:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8651, + "nodeType": "Block", + "src": "1260:99:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8636, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8630, + "src": "1279:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 8637, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8628, + "src": "1284:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1279:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8639, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1287:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 536, + "src": "1287:19:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8635, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1270:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1270:37:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8642, + "nodeType": "ExpressionStatement", + "src": "1270:37:49" + }, + { + "assignments": [ + 8644 + ], + "declarations": [ + { + "constant": false, + "id": 8644, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 8651, + "src": "1317:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8643, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1317:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8648, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8645, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8628, + "src": "1329:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8646, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8630, + "src": "1333:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1329:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1317:17:49" + }, + { + "expression": { + "id": 8649, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8644, + "src": "1351:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8634, + "id": 8650, + "nodeType": "Return", + "src": "1344:8:49" + } + ] + }, + "documentation": { + "id": 8626, + "nodeType": "StructuredDocumentation", + "src": "1080:108:49", + "text": " @dev Returns the subtraction of two unsigned integers of 256 bits, reverting on overflow." + }, + "id": 8652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8631, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8628, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8652, + "src": "1206:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8627, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1206:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8630, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8652, + "src": "1217:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1217:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1205:22:49" + }, + "returnParameters": { + "id": 8634, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8633, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8652, + "src": "1251:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8632, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1251:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1250:9:49" + }, + "scope": 8842, + "src": "1193:166:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8692, + "nodeType": "Block", + "src": "1528:130:49", + "statements": [ + { + "assignments": [ + 8663 + ], + "declarations": [ + { + "constant": false, + "id": 8663, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 8692, + "src": "1538:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8662, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1538:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "id": 8667, + "initialValue": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8664, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8655, + "src": "1549:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 8665, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "1553:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1549:5:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1538:16:49" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8669, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "1574:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "30", + "id": 8670, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1579:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1574:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8672, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "1584:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 8673, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8655, + "src": "1589:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1584:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1574:16:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 8676, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1573:18:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8677, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "1596:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "30", + "id": 8678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1600:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1596:5:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 8682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8680, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "1605:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 8681, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8655, + "src": "1609:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1605:5:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1596:14:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 8684, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1595:16:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1573:38:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8686, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1613:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 536, + "src": "1613:19:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8668, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1564:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1564:69:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8689, + "nodeType": "ExpressionStatement", + "src": "1564:69:49" + }, + { + "expression": { + "id": 8690, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "1650:1:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 8661, + "id": 8691, + "nodeType": "Return", + "src": "1643:8:49" + } + ] + }, + "documentation": { + "id": 8653, + "nodeType": "StructuredDocumentation", + "src": "1365:94:49", + "text": " @dev Returns the subtraction of two signed integers, reverting on overflow." + }, + "id": 8693, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8655, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8693, + "src": "1477:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8654, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1477:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8657, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8693, + "src": "1487:8:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8656, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1487:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1476:20:49" + }, + "returnParameters": { + "id": 8661, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8660, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8693, + "src": "1520:6:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 8659, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1520:6:49", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1519:8:49" + }, + "scope": 8842, + "src": "1464:194:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8710, + "nodeType": "Block", + "src": "1807:38:49", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8703, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8696, + "src": "1824:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 8704, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8698, + "src": "1829:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1824:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 8707, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8698, + "src": "1837:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1824:14:49", + "trueExpression": { + "id": 8706, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8696, + "src": "1833:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8702, + "id": 8709, + "nodeType": "Return", + "src": "1817:21:49" + } + ] + }, + "documentation": { + "id": 8694, + "nodeType": "StructuredDocumentation", + "src": "1664:71:49", + "text": " @dev Returns the largest of two numbers of 256 bits." + }, + "id": 8711, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "max", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8699, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8696, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8711, + "src": "1753:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8695, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1753:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8698, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8711, + "src": "1764:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8697, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1764:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1752:22:49" + }, + "returnParameters": { + "id": 8702, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8701, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8711, + "src": "1798:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1798:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1797:9:49" + }, + "scope": 8842, + "src": "1740:105:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8728, + "nodeType": "Block", + "src": "1995:37:49", + "statements": [ + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8721, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8714, + "src": "2012:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 8722, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8716, + "src": "2016:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2012:5:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 8725, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8716, + "src": "2024:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "2012:13:49", + "trueExpression": { + "id": 8724, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8714, + "src": "2020:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8720, + "id": 8727, + "nodeType": "Return", + "src": "2005:20:49" + } + ] + }, + "documentation": { + "id": 8712, + "nodeType": "StructuredDocumentation", + "src": "1851:72:49", + "text": " @dev Returns the smallest of two numbers of 256 bits." + }, + "id": 8729, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "min", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8717, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8714, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8729, + "src": "1941:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8713, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1941:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8716, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8729, + "src": "1952:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8715, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1952:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1940:22:49" + }, + "returnParameters": { + "id": 8720, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8719, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8729, + "src": "1986:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8718, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1986:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1985:9:49" + }, + "scope": 8842, + "src": "1928:104:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8760, + "nodeType": "Block", + "src": "2105:113:49", + "statements": [ + { + "assignments": [ + 8739 + ], + "declarations": [ + { + "constant": false, + "id": 8739, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 8760, + "src": "2115:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8738, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2115:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8743, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8740, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8731, + "src": "2127:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 8741, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8733, + "src": "2131:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2127:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2115:17:49" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8753, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8745, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8731, + "src": "2151:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8746, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2156:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2151:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8748, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8739, + "src": "2161:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8749, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8731, + "src": "2165:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2161:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 8751, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8733, + "src": "2170:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2161:10:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2151:20:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8754, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2173:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MUL_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 542, + "src": "2173:19:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8744, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2142:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2142:51:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8757, + "nodeType": "ExpressionStatement", + "src": "2142:51:49" + }, + { + "expression": { + "id": 8758, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8739, + "src": "2210:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8737, + "id": 8759, + "nodeType": "Return", + "src": "2203:8:49" + } + ] + }, + "id": 8761, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8734, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8731, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8761, + "src": "2051:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8730, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2051:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8733, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8761, + "src": "2062:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8732, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2062:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2050:22:49" + }, + "returnParameters": { + "id": 8737, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8736, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8761, + "src": "2096:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8735, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2096:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2095:9:49" + }, + "scope": 8842, + "src": "2038:180:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8783, + "nodeType": "Block", + "src": "2335:61:49", + "statements": [ + { + "expression": { + "condition": { + "id": 8772, + "name": "roundUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8767, + "src": "2352:7:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 8778, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8763, + "src": "2384:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8779, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8765, + "src": "2387:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8777, + "name": "divDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8806, + "src": "2376:7:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2376:13:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "2352:37:49", + "trueExpression": { + "arguments": [ + { + "id": 8774, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8763, + "src": "2368:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8775, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8765, + "src": "2371:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8773, + "name": "divUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8841, + "src": "2362:5:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2362:11:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8771, + "id": 8782, + "nodeType": "Return", + "src": "2345:44:49" + } + ] + }, + "id": 8784, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8768, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8763, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8784, + "src": "2246:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8762, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2246:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8765, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8784, + "src": "2265:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8764, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2265:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8767, + "mutability": "mutable", + "name": "roundUp", + "nodeType": "VariableDeclaration", + "scope": 8784, + "src": "2284:12:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8766, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2284:4:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2236:66:49" + }, + "returnParameters": { + "id": 8771, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8770, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8784, + "src": "2326:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8769, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2326:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2325:9:49" + }, + "scope": 8842, + "src": "2224:172:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8805, + "nodeType": "Block", + "src": "2473:77:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8794, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8788, + "src": "2492:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 8795, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2497:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2492:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8797, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2500:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ZERO_DIVISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 545, + "src": "2500:20:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8793, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2483:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2483:38:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8800, + "nodeType": "ExpressionStatement", + "src": "2483:38:49" + }, + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8801, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8786, + "src": "2538:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8802, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8788, + "src": "2542:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2538:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8792, + "id": 8804, + "nodeType": "Return", + "src": "2531:12:49" + } + ] + }, + "id": 8806, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "divDown", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8789, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8786, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8806, + "src": "2419:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8785, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2419:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8788, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8806, + "src": "2430:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8787, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2430:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2418:22:49" + }, + "returnParameters": { + "id": 8792, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8791, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8806, + "src": "2464:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8790, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2464:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2463:9:49" + }, + "scope": 8842, + "src": "2402:148:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8840, + "nodeType": "Block", + "src": "2625:163:49", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8816, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8810, + "src": "2644:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 8817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2649:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2644:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 8819, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2652:6:49", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 8820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ZERO_DIVISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 545, + "src": "2652:20:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8815, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2635:8:49", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 8821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2635:38:49", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8822, + "nodeType": "ExpressionStatement", + "src": "2635:38:49" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8823, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8808, + "src": "2688:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 8824, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2693:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2688:6:49", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8838, + "nodeType": "Block", + "src": "2735:47:49", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "31", + "id": 8829, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2756:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8830, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8808, + "src": "2761:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 8831, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2765:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2761:5:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8833, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2760:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "id": 8834, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8810, + "src": "2770:1:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2760:11:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2756:15:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 8814, + "id": 8837, + "nodeType": "Return", + "src": "2749:22:49" + } + ] + }, + "id": 8839, + "nodeType": "IfStatement", + "src": "2684:98:49", + "trueBody": { + "id": 8828, + "nodeType": "Block", + "src": "2696:33:49", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 8826, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2717:1:49", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 8814, + "id": 8827, + "nodeType": "Return", + "src": "2710:8:49" + } + ] + } + } + ] + }, + "id": 8841, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "divUp", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8811, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8808, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 8841, + "src": "2571:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2571:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8810, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 8841, + "src": "2582:9:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8809, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2582:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2570:22:49" + }, + "returnParameters": { + "id": 8814, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8813, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8841, + "src": "2616:7:49", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8812, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2616:7:49", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2615:9:49" + }, + "scope": 8842, + "src": "2556:232:49", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 8843, + "src": "290:2500:49" + } + ], + "src": "33:2758:49" + }, + "id": 49 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/EIP712.sol", + "exportedSymbols": { + "EIP712": [ + 8935 + ] + }, + "id": 8936, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 8844, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:50" + }, + { + "abstract": true, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 8845, + "nodeType": "StructuredDocumentation", + "src": "58:1142:50", + "text": " @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n they need in their contracts using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n _Available since v3.4._" + }, + "fullyImplemented": true, + "id": 8935, + "linearizedBaseContracts": [ + 8935 + ], + "name": "EIP712", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 8847, + "mutability": "immutable", + "name": "_HASHED_NAME", + "nodeType": "VariableDeclaration", + "scope": 8935, + "src": "1277:38:50", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8846, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1277:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8849, + "mutability": "immutable", + "name": "_HASHED_VERSION", + "nodeType": "VariableDeclaration", + "scope": 8935, + "src": "1321:41:50", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8848, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1321:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8851, + "mutability": "immutable", + "name": "_TYPE_HASH", + "nodeType": "VariableDeclaration", + "scope": 8935, + "src": "1368:36:50", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8850, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1368:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 8883, + "nodeType": "Block", + "src": "2075:225:50", + "statements": [ + { + "expression": { + "id": 8866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8859, + "name": "_HASHED_NAME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "2085:12:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 8863, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8854, + "src": "2116:4:50", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 8862, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2110:5:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 8861, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2110:5:50", + "typeDescriptions": {} + } + }, + "id": 8864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2110:11:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8860, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2100:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2100:22:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2085:37:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 8867, + "nodeType": "ExpressionStatement", + "src": "2085:37:50" + }, + { + "expression": { + "id": 8875, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8868, + "name": "_HASHED_VERSION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8849, + "src": "2132:15:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 8872, + "name": "version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8856, + "src": "2166:7:50", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 8871, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2160:5:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", + "typeString": "type(bytes storage pointer)" + }, + "typeName": { + "id": 8870, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2160:5:50", + "typeDescriptions": {} + } + }, + "id": 8873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2160:14:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8869, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2150:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2150:25:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2132:43:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 8876, + "nodeType": "ExpressionStatement", + "src": "2132:43:50" + }, + { + "expression": { + "id": 8881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8877, + "name": "_TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8851, + "src": "2185:10:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429", + "id": 8879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2208:84:50", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", + "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" + }, + "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f", + "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"" + } + ], + "id": 8878, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2198:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2198:95:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "2185:108:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 8882, + "nodeType": "ExpressionStatement", + "src": "2185:108:50" + } + ] + }, + "documentation": { + "id": 8852, + "nodeType": "StructuredDocumentation", + "src": "1456:559:50", + "text": " @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]." + }, + "id": 8884, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8857, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8854, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 8884, + "src": "2032:18:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 8853, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2032:6:50", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8856, + "mutability": "mutable", + "name": "version", + "nodeType": "VariableDeclaration", + "scope": 8884, + "src": "2052:21:50", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 8855, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2052:6:50", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2031:43:50" + }, + "returnParameters": { + "id": 8858, + "nodeType": "ParameterList", + "parameters": [], + "src": "2075:0:50" + }, + "scope": 8935, + "src": "2020:280:50", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 8905, + "nodeType": "Block", + "src": "2456:118:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 8893, + "name": "_TYPE_HASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8851, + "src": "2494:10:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8894, + "name": "_HASHED_NAME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8847, + "src": "2506:12:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8895, + "name": "_HASHED_VERSION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8849, + "src": "2520:15:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8896, + "name": "_getChainId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8934, + "src": "2537:11:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 8897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2537:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 8900, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2560:4:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$8935", + "typeString": "contract EIP712" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_EIP712_$8935", + "typeString": "contract EIP712" + } + ], + "id": 8899, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2552:7:50", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8898, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2552:7:50", + "typeDescriptions": {} + } + }, + "id": 8901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2552:13:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 8891, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2483:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8892, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2483:10:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 8902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2483:83:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8890, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2473:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2473:94:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8889, + "id": 8904, + "nodeType": "Return", + "src": "2466:101:50" + } + ] + }, + "documentation": { + "id": 8885, + "nodeType": "StructuredDocumentation", + "src": "2306:75:50", + "text": " @dev Returns the domain separator for the current chain." + }, + "id": 8906, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_domainSeparatorV4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8886, + "nodeType": "ParameterList", + "parameters": [], + "src": "2413:2:50" + }, + "returnParameters": { + "id": 8889, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8888, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8906, + "src": "2447:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8887, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2447:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2446:9:50" + }, + "scope": 8935, + "src": "2386:188:50", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 8924, + "nodeType": "Block", + "src": "3285:97:50", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "1901", + "id": 8917, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3329:10:50", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", + "typeString": "literal_string \"\u0019\u0001\"" + }, + "value": "\u0019\u0001" + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8918, + "name": "_domainSeparatorV4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8906, + "src": "3341:18:50", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 8919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3341:20:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 8920, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8909, + "src": "3363:10:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_301a50b291d33ce1e8e9064e3f6a6c51d902ec22892b50d58abf6357c6a45541", + "typeString": "literal_string \"\u0019\u0001\"" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 8915, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3312:3:50", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8916, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "3312:16:50", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 8921, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3312:62:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8914, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3302:9:50", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 8922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3302:73:50", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 8913, + "id": 8923, + "nodeType": "Return", + "src": "3295:80:50" + } + ] + }, + "documentation": { + "id": 8907, + "nodeType": "StructuredDocumentation", + "src": "2580:614:50", + "text": " @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n keccak256(\"Mail(address to,string contents)\"),\n mailTo,\n keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```" + }, + "id": 8925, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_hashTypedDataV4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8910, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8909, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 8925, + "src": "3225:18:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8908, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3225:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3224:20:50" + }, + "returnParameters": { + "id": 8913, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8912, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8925, + "src": "3276:7:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 8911, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3276:7:50", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3275:9:50" + }, + "scope": 8935, + "src": "3199:183:50", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 8933, + "nodeType": "Block", + "src": "3450:365:50", + "statements": [ + { + "expression": { + "id": 8930, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3685:4:50", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EIP712_$8935", + "typeString": "contract EIP712" + } + }, + "id": 8931, + "nodeType": "ExpressionStatement", + "src": "3685:4:50" + }, + { + "AST": { + "nodeType": "YulBlock", + "src": "3765:44:50", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "3779:20:50", + "value": { + "arguments": [], + "functionName": { + "name": "chainid", + "nodeType": "YulIdentifier", + "src": "3790:7:50" + }, + "nodeType": "YulFunctionCall", + "src": "3790:9:50" + }, + "variableNames": [ + { + "name": "chainId", + "nodeType": "YulIdentifier", + "src": "3779:7:50" + } + ] + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 8928, + "isOffset": false, + "isSlot": false, + "src": "3779:7:50", + "valueSize": 1 + } + ], + "id": 8932, + "nodeType": "InlineAssembly", + "src": "3756:53:50" + } + ] + }, + "id": 8934, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getChainId", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8926, + "nodeType": "ParameterList", + "parameters": [], + "src": "3408:2:50" + }, + "returnParameters": { + "id": 8929, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8928, + "mutability": "mutable", + "name": "chainId", + "nodeType": "VariableDeclaration", + "scope": 8934, + "src": "3433:15:50", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8927, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3433:7:50", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3432:17:50" + }, + "scope": 8935, + "src": "3388:427:50", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + } + ], + "scope": 8936, + "src": "1201:2616:50" + } + ], + "src": "33:3785:50" + }, + "id": 50 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "exportedSymbols": { + "ERC20": [ + 9426 + ] + }, + "id": 9427, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 8937, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:51" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 8938, + "nodeType": "ImportDirective", + "scope": 9427, + "sourceUnit": 1012, + "src": "58:90:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 8939, + "nodeType": "ImportDirective", + "scope": 9427, + "sourceUnit": 1153, + "src": "149:87:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "file": "./SafeMath.sol", + "id": 8940, + "nodeType": "ImportDirective", + "scope": 9427, + "sourceUnit": 9669, + "src": "238:24:51", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 8942, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1445:6:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 8943, + "nodeType": "InheritanceSpecifier", + "src": "1445:6:51" + } + ], + "contractDependencies": [ + 1152 + ], + "contractKind": "contract", + "documentation": { + "id": 8941, + "nodeType": "StructuredDocumentation", + "src": "264:1162:51", + "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}." + }, + "fullyImplemented": true, + "id": 9426, + "linearizedBaseContracts": [ + 9426, + 1152 + ], + "name": "ERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 8946, + "libraryName": { + "id": 8944, + "name": "SafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9668, + "src": "1464:8:51", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMath_$9668", + "typeString": "library SafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1458:27:51", + "typeName": { + "id": 8945, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1477:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "id": 8950, + "mutability": "mutable", + "name": "_balances", + "nodeType": "VariableDeclaration", + "scope": 9426, + "src": "1491:45:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "typeName": { + "id": 8949, + "keyType": { + "id": 8947, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1499:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1491:27:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 8948, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1510:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8956, + "mutability": "mutable", + "name": "_allowances", + "nodeType": "VariableDeclaration", + "scope": 9426, + "src": "1543:67:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "typeName": { + "id": 8955, + "keyType": { + "id": 8951, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1551:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1543:47:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + }, + "valueType": { + "id": 8954, + "keyType": { + "id": 8952, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1570:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1562:27:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + }, + "valueType": { + "id": 8953, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1581:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8958, + "mutability": "mutable", + "name": "_totalSupply", + "nodeType": "VariableDeclaration", + "scope": 9426, + "src": "1617:28:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8957, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1617:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8960, + "mutability": "mutable", + "name": "_name", + "nodeType": "VariableDeclaration", + "scope": 9426, + "src": "1652:20:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 8959, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1652:6:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8962, + "mutability": "mutable", + "name": "_symbol", + "nodeType": "VariableDeclaration", + "scope": 9426, + "src": "1678:22:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 8961, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1678:6:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 8964, + "mutability": "mutable", + "name": "_decimals", + "nodeType": "VariableDeclaration", + "scope": 9426, + "src": "1706:23:51", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 8963, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1706:5:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 8984, + "nodeType": "Block", + "src": "2108:81:51", + "statements": [ + { + "expression": { + "id": 8974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8972, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8960, + "src": "2118:5:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8973, + "name": "name_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8967, + "src": "2126:5:51", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "2118:13:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 8975, + "nodeType": "ExpressionStatement", + "src": "2118:13:51" + }, + { + "expression": { + "id": 8978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8976, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8962, + "src": "2141:7:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8977, + "name": "symbol_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8969, + "src": "2151:7:51", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "2141:17:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 8979, + "nodeType": "ExpressionStatement", + "src": "2141:17:51" + }, + { + "expression": { + "id": 8982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8980, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8964, + "src": "2168:9:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "3138", + "id": 8981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2180:2:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "src": "2168:14:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 8983, + "nodeType": "ExpressionStatement", + "src": "2168:14:51" + } + ] + }, + "documentation": { + "id": 8965, + "nodeType": "StructuredDocumentation", + "src": "1736:311:51", + "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction." + }, + "id": 8985, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8970, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8967, + "mutability": "mutable", + "name": "name_", + "nodeType": "VariableDeclaration", + "scope": 8985, + "src": "2064:19:51", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 8966, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2064:6:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8969, + "mutability": "mutable", + "name": "symbol_", + "nodeType": "VariableDeclaration", + "scope": 8985, + "src": "2085:21:51", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 8968, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2085:6:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2063:44:51" + }, + "returnParameters": { + "id": 8971, + "nodeType": "ParameterList", + "parameters": [], + "src": "2108:0:51" + }, + "scope": 9426, + "src": "2052:137:51", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 8993, + "nodeType": "Block", + "src": "2306:29:51", + "statements": [ + { + "expression": { + "id": 8991, + "name": "_name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8960, + "src": "2323:5:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 8990, + "id": 8992, + "nodeType": "Return", + "src": "2316:12:51" + } + ] + }, + "documentation": { + "id": 8986, + "nodeType": "StructuredDocumentation", + "src": "2195:54:51", + "text": " @dev Returns the name of the token." + }, + "functionSelector": "06fdde03", + "id": 8994, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "name", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8987, + "nodeType": "ParameterList", + "parameters": [], + "src": "2267:2:51" + }, + "returnParameters": { + "id": 8990, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8989, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 8994, + "src": "2291:13:51", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 8988, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2291:6:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2290:15:51" + }, + "scope": 9426, + "src": "2254:81:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 9002, + "nodeType": "Block", + "src": "2502:31:51", + "statements": [ + { + "expression": { + "id": 9000, + "name": "_symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8962, + "src": "2519:7:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 8999, + "id": 9001, + "nodeType": "Return", + "src": "2512:14:51" + } + ] + }, + "documentation": { + "id": 8995, + "nodeType": "StructuredDocumentation", + "src": "2341:102:51", + "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name." + }, + "functionSelector": "95d89b41", + "id": 9003, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "symbol", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8996, + "nodeType": "ParameterList", + "parameters": [], + "src": "2463:2:51" + }, + "returnParameters": { + "id": 8999, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8998, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9003, + "src": "2487:13:51", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 8997, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2487:6:51", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2486:15:51" + }, + "scope": 9426, + "src": "2448:85:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 9011, + "nodeType": "Block", + "src": "3204:33:51", + "statements": [ + { + "expression": { + "id": 9009, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8964, + "src": "3221:9:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "functionReturnParameters": 9008, + "id": 9010, + "nodeType": "Return", + "src": "3214:16:51" + } + ] + }, + "documentation": { + "id": 9004, + "nodeType": "StructuredDocumentation", + "src": "2539:612:51", + "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}." + }, + "functionSelector": "313ce567", + "id": 9012, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9005, + "nodeType": "ParameterList", + "parameters": [], + "src": "3173:2:51" + }, + "returnParameters": { + "id": 9008, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9007, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9012, + "src": "3197:5:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 9006, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "3197:5:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "3196:7:51" + }, + "scope": 9426, + "src": "3156:81:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1083 + ], + "body": { + "id": 9021, + "nodeType": "Block", + "src": "3570:36:51", + "statements": [ + { + "expression": { + "id": 9019, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8958, + "src": "3587:12:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9018, + "id": 9020, + "nodeType": "Return", + "src": "3580:19:51" + } + ] + }, + "documentation": { + "id": 9013, + "nodeType": "StructuredDocumentation", + "src": "3243:252:51", + "text": " @dev See {IERC20-totalSupply}. The total supply should only be read using this function\n Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other\n storage values)." + }, + "functionSelector": "18160ddd", + "id": 9022, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "totalSupply", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9015, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3543:8:51" + }, + "parameters": { + "id": 9014, + "nodeType": "ParameterList", + "parameters": [], + "src": "3520:2:51" + }, + "returnParameters": { + "id": 9018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9017, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9022, + "src": "3561:7:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9016, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3561:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3560:9:51" + }, + "scope": 9426, + "src": "3500:106:51", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 9032, + "nodeType": "Block", + "src": "3927:37:51", + "statements": [ + { + "expression": { + "id": 9030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9028, + "name": "_totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8958, + "src": "3937:12:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9029, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9025, + "src": "3952:5:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3937:20:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9031, + "nodeType": "ExpressionStatement", + "src": "3937:20:51" + } + ] + }, + "documentation": { + "id": 9023, + "nodeType": "StructuredDocumentation", + "src": "3612:253:51", + "text": " @dev Sets a new value for the total supply. It should only be set using this function.\n * Can be overridden by derived contracts to store the total supply in a different way (e.g. packed with other\n storage values)." + }, + "id": 9033, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setTotalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9026, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9025, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 9033, + "src": "3895:13:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9024, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3895:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3894:15:51" + }, + "returnParameters": { + "id": 9027, + "nodeType": "ParameterList", + "parameters": [], + "src": "3927:0:51" + }, + "scope": 9426, + "src": "3870:94:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1091 + ], + "body": { + "id": 9046, + "nodeType": "Block", + "src": "4097:42:51", + "statements": [ + { + "expression": { + "baseExpression": { + "id": 9042, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "4114:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9044, + "indexExpression": { + "id": 9043, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9036, + "src": "4124:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4114:18:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9041, + "id": 9045, + "nodeType": "Return", + "src": "4107:25:51" + } + ] + }, + "documentation": { + "id": 9034, + "nodeType": "StructuredDocumentation", + "src": "3970:47:51", + "text": " @dev See {IERC20-balanceOf}." + }, + "functionSelector": "70a08231", + "id": 9047, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9038, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4070:8:51" + }, + "parameters": { + "id": 9037, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9036, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 9047, + "src": "4041:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9035, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4041:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4040:17:51" + }, + "returnParameters": { + "id": 9041, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9040, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9047, + "src": "4088:7:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9039, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4088:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4087:9:51" + }, + "scope": 9426, + "src": "4022:117:51", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1101 + ], + "body": { + "id": 9067, + "nodeType": "Block", + "src": "4434:78:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9059, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4454:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4454:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9061, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9050, + "src": "4466:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9062, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9052, + "src": "4477:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9058, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9273, + "src": "4444:9:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9063, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4444:40:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9064, + "nodeType": "ExpressionStatement", + "src": "4444:40:51" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9065, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4501:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9057, + "id": 9066, + "nodeType": "Return", + "src": "4494:11:51" + } + ] + }, + "documentation": { + "id": 9048, + "nodeType": "StructuredDocumentation", + "src": "4145:192:51", + "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`." + }, + "functionSelector": "a9059cbb", + "id": 9068, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transfer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9054, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4410:8:51" + }, + "parameters": { + "id": 9053, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9050, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 9068, + "src": "4360:17:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9049, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4360:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9052, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9068, + "src": "4379:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9051, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4379:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4359:35:51" + }, + "returnParameters": { + "id": 9057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9056, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9068, + "src": "4428:4:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9055, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4428:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4427:6:51" + }, + "scope": 9426, + "src": "4342:170:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1111 + ], + "body": { + "id": 9085, + "nodeType": "Block", + "src": "4668:51:51", + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 9079, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8956, + "src": "4685:11:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 9081, + "indexExpression": { + "id": 9080, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9071, + "src": "4697:5:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4685:18:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9083, + "indexExpression": { + "id": 9082, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9073, + "src": "4704:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4685:27:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9078, + "id": 9084, + "nodeType": "Return", + "src": "4678:34:51" + } + ] + }, + "documentation": { + "id": 9069, + "nodeType": "StructuredDocumentation", + "src": "4518:47:51", + "text": " @dev See {IERC20-allowance}." + }, + "functionSelector": "dd62ed3e", + "id": 9086, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "allowance", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9075, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4641:8:51" + }, + "parameters": { + "id": 9074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9071, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 9086, + "src": "4589:13:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9070, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4589:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9073, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 9086, + "src": "4604:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9072, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4604:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4588:32:51" + }, + "returnParameters": { + "id": 9078, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9077, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9086, + "src": "4659:7:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9076, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4659:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4658:9:51" + }, + "scope": 9426, + "src": "4570:149:51", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1121 + ], + "body": { + "id": 9106, + "nodeType": "Block", + "src": "4946:75:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9098, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4965:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4965:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9100, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9089, + "src": "4977:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9101, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9091, + "src": "4986:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9097, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "4956:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4956:37:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9103, + "nodeType": "ExpressionStatement", + "src": "4956:37:51" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9104, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5010:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9096, + "id": 9105, + "nodeType": "Return", + "src": "5003:11:51" + } + ] + }, + "documentation": { + "id": 9087, + "nodeType": "StructuredDocumentation", + "src": "4725:127:51", + "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address." + }, + "functionSelector": "095ea7b3", + "id": 9107, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "approve", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9093, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4922:8:51" + }, + "parameters": { + "id": 9092, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9089, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 9107, + "src": "4874:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9088, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4874:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9091, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9107, + "src": "4891:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9090, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4891:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4873:33:51" + }, + "returnParameters": { + "id": 9096, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9095, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9107, + "src": "4940:4:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9094, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4940:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4939:6:51" + }, + "scope": 9426, + "src": "4857:164:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1133 + ], + "body": { + "id": 9145, + "nodeType": "Block", + "src": "5630:244:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9121, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9110, + "src": "5650:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9122, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9112, + "src": "5658:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9123, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9114, + "src": "5669:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9120, + "name": "_transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9273, + "src": "5640:9:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5640:36:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9125, + "nodeType": "ExpressionStatement", + "src": "5640:36:51" + }, + { + "expression": { + "arguments": [ + { + "id": 9127, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9110, + "src": "5708:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 9128, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5728:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5728:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 9137, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9114, + "src": "5788:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9138, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "5796:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_EXCEEDS_ALLOWANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 818, + "src": "5796:39:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "baseExpression": { + "id": 9130, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8956, + "src": "5752:11:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 9132, + "indexExpression": { + "id": 9131, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9110, + "src": "5764:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5752:19:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9135, + "indexExpression": { + "expression": { + "id": 9133, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5772:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5772:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5752:31:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 9667, + "src": "5752:35:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 9140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5752:84:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9126, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "5686:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5686:160:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9142, + "nodeType": "ExpressionStatement", + "src": "5686:160:51" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9143, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5863:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9119, + "id": 9144, + "nodeType": "Return", + "src": "5856:11:51" + } + ] + }, + "documentation": { + "id": 9108, + "nodeType": "StructuredDocumentation", + "src": "5027:456:51", + "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`." + }, + "functionSelector": "23b872dd", + "id": 9146, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFrom", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9116, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5606:8:51" + }, + "parameters": { + "id": 9115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9110, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 9146, + "src": "5519:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9109, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5519:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9112, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 9146, + "src": "5543:17:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9111, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5543:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9114, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9146, + "src": "5570:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9113, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5570:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5509:81:51" + }, + "returnParameters": { + "id": 9119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9118, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9146, + "src": "5624:4:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9117, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5624:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5623:6:51" + }, + "scope": 9426, + "src": "5488:386:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 9173, + "nodeType": "Block", + "src": "6363:117:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9157, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6382:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9158, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6382:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9159, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9149, + "src": "6394:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 9167, + "name": "addedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9151, + "src": "6440:10:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "baseExpression": { + "id": 9160, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8956, + "src": "6403:11:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 9163, + "indexExpression": { + "expression": { + "id": 9161, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6415:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "6415:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6403:23:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9165, + "indexExpression": { + "id": 9164, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9149, + "src": "6427:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6403:32:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9166, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 9621, + "src": "6403:36:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6403:48:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9156, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "6373:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6373:79:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9170, + "nodeType": "ExpressionStatement", + "src": "6373:79:51" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6469:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9155, + "id": 9172, + "nodeType": "Return", + "src": "6462:11:51" + } + ] + }, + "documentation": { + "id": 9147, + "nodeType": "StructuredDocumentation", + "src": "5880:384:51", + "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address." + }, + "functionSelector": "39509351", + "id": 9174, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "increaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9152, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9149, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 9174, + "src": "6296:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9148, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6296:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9151, + "mutability": "mutable", + "name": "addedValue", + "nodeType": "VariableDeclaration", + "scope": 9174, + "src": "6313:18:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9150, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6313:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6295:37:51" + }, + "returnParameters": { + "id": 9155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9154, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9174, + "src": "6357:4:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9153, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6357:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6356:6:51" + }, + "scope": 9426, + "src": "6269:211:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 9203, + "nodeType": "Block", + "src": "7066:213:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9185, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7098:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7098:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9187, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9177, + "src": "7122:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 9195, + "name": "subtractedValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9179, + "src": "7180:15:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9196, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7197:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_DECREASED_ALLOWANCE_BELOW_ZERO", + "nodeType": "MemberAccess", + "referencedDeclaration": 821, + "src": "7197:43:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "baseExpression": { + "id": 9188, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8956, + "src": "7143:11:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 9191, + "indexExpression": { + "expression": { + "id": 9189, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7155:3:51", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "7155:10:51", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7143:23:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9193, + "indexExpression": { + "id": 9192, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9177, + "src": "7167:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7143:32:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 9667, + "src": "7143:36:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 9198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7143:98:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9184, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "7076:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7076:175:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9200, + "nodeType": "ExpressionStatement", + "src": "7076:175:51" + }, + { + "expression": { + "hexValue": "74727565", + "id": 9201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7268:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 9183, + "id": 9202, + "nodeType": "Return", + "src": "7261:11:51" + } + ] + }, + "documentation": { + "id": 9175, + "nodeType": "StructuredDocumentation", + "src": "6486:476:51", + "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`." + }, + "functionSelector": "a457c2d7", + "id": 9204, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decreaseAllowance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9180, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9177, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 9204, + "src": "6994:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9176, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6994:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9179, + "mutability": "mutable", + "name": "subtractedValue", + "nodeType": "VariableDeclaration", + "scope": 9204, + "src": "7011:23:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9178, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7011:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6993:42:51" + }, + "returnParameters": { + "id": 9183, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9182, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9204, + "src": "7060:4:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9181, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7060:4:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7059:6:51" + }, + "scope": 9426, + "src": "6967:312:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 9272, + "nodeType": "Block", + "src": "7870:442:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9220, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9215, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9207, + "src": "7889:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7907:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9217, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7899:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9216, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7899:7:51", + "typeDescriptions": {} + } + }, + "id": 9219, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7899:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7889:20:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 9221, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7911:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_FROM_ZERO_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 800, + "src": "7911:39:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9214, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7880:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7880:71:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9224, + "nodeType": "ExpressionStatement", + "src": "7880:71:51" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9226, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9209, + "src": "7970:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9229, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7991:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9228, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7983:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9227, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7983:7:51", + "typeDescriptions": {} + } + }, + "id": 9230, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7983:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7970:23:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 9232, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7995:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_TO_ZERO_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 803, + "src": "7995:37:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9225, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7961:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7961:72:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9235, + "nodeType": "ExpressionStatement", + "src": "7961:72:51" + }, + { + "expression": { + "arguments": [ + { + "id": 9237, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9207, + "src": "8065:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9238, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9209, + "src": "8073:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9239, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9211, + "src": "8084:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9236, + "name": "_beforeTokenTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9425, + "src": "8044:20:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9240, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8044:47:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9241, + "nodeType": "ExpressionStatement", + "src": "8044:47:51" + }, + { + "expression": { + "id": 9253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9242, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "8102:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9244, + "indexExpression": { + "id": 9243, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9207, + "src": "8112:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8102:17:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9249, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9211, + "src": "8144:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9250, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "8152:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_TRANSFER_EXCEEDS_BALANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 824, + "src": "8152:37:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 9245, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "8122:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9247, + "indexExpression": { + "id": 9246, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9207, + "src": "8132:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8122:17:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 9667, + "src": "8122:21:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 9252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8122:68:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8102:88:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9254, + "nodeType": "ExpressionStatement", + "src": "8102:88:51" + }, + { + "expression": { + "id": 9264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9255, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "8200:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9257, + "indexExpression": { + "id": 9256, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9209, + "src": "8210:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8200:20:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9262, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9211, + "src": "8248:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 9258, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "8223:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9260, + "indexExpression": { + "id": 9259, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9209, + "src": "8233:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8223:20:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 9621, + "src": "8223:24:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8223:32:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8200:55:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9265, + "nodeType": "ExpressionStatement", + "src": "8200:55:51" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9267, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9207, + "src": "8279:6:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9268, + "name": "recipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9209, + "src": "8287:9:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9269, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9211, + "src": "8298:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9266, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1142, + "src": "8270:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8270:35:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9271, + "nodeType": "EmitStatement", + "src": "8265:40:51" + } + ] + }, + "documentation": { + "id": 9205, + "nodeType": "StructuredDocumentation", + "src": "7285:463:51", + "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`." + }, + "id": 9273, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9212, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9207, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 9273, + "src": "7781:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7781:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9209, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "scope": 9273, + "src": "7805:17:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9208, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7805:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9211, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9273, + "src": "7832:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9210, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7832:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7771:81:51" + }, + "returnParameters": { + "id": 9213, + "nodeType": "ParameterList", + "parameters": [], + "src": "7870:0:51" + }, + "scope": 9426, + "src": "7753:559:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 9318, + "nodeType": "Block", + "src": "8648:232:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 9284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8687:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9283, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8679:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9282, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8679:7:51", + "typeDescriptions": {} + } + }, + "id": 9285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8679:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9286, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9276, + "src": "8691:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9287, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9278, + "src": "8700:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9281, + "name": "_beforeTokenTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9425, + "src": "8658:20:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8658:49:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9289, + "nodeType": "ExpressionStatement", + "src": "8658:49:51" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9294, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9278, + "src": "8752:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9291, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9022, + "src": "8734:11:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 9292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8734:13:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 9621, + "src": "8734:17:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8734:25:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9290, + "name": "_setTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9033, + "src": "8718:15:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 9296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8718:42:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9297, + "nodeType": "ExpressionStatement", + "src": "8718:42:51" + }, + { + "expression": { + "id": 9307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9298, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "8770:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9300, + "indexExpression": { + "id": 9299, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9276, + "src": "8780:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8770:18:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9305, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9278, + "src": "8814:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 9301, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "8791:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9303, + "indexExpression": { + "id": 9302, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9276, + "src": "8801:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8791:18:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 9621, + "src": "8791:22:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9306, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8791:30:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8770:51:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9308, + "nodeType": "ExpressionStatement", + "src": "8770:51:51" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30", + "id": 9312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8853:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9311, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8845:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9310, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8845:7:51", + "typeDescriptions": {} + } + }, + "id": 9313, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8845:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9314, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9276, + "src": "8857:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9315, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9278, + "src": "8866:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9309, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1142, + "src": "8836:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8836:37:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9317, + "nodeType": "EmitStatement", + "src": "8831:42:51" + } + ] + }, + "documentation": { + "id": 9274, + "nodeType": "StructuredDocumentation", + "src": "8318:260:51", + "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address." + }, + "id": 9319, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9276, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 9319, + "src": "8598:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9275, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8598:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9278, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9319, + "src": "8615:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9277, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8615:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8597:33:51" + }, + "returnParameters": { + "id": 9280, + "nodeType": "ParameterList", + "parameters": [], + "src": "8648:0:51" + }, + "scope": 9426, + "src": "8583:297:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 9377, + "nodeType": "Block", + "src": "9265:346:51", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9328, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9322, + "src": "9284:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9303:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9295:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9329, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9295:7:51", + "typeDescriptions": {} + } + }, + "id": 9332, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9295:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "9284:21:51", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 9334, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "9307:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_BURN_FROM_ZERO_ADDRESS", + "nodeType": "MemberAccess", + "referencedDeclaration": 809, + "src": "9307:35:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9327, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "9275:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9275:68:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9337, + "nodeType": "ExpressionStatement", + "src": "9275:68:51" + }, + { + "expression": { + "arguments": [ + { + "id": 9339, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9322, + "src": "9375:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 9342, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9392:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9341, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9384:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9340, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9384:7:51", + "typeDescriptions": {} + } + }, + "id": 9343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9384:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9344, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9324, + "src": "9396:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9338, + "name": "_beforeTokenTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9425, + "src": "9354:20:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9354:49:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9346, + "nodeType": "ExpressionStatement", + "src": "9354:49:51" + }, + { + "expression": { + "id": 9358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 9347, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "9414:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9349, + "indexExpression": { + "id": 9348, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9322, + "src": "9424:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9414:18:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9354, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9324, + "src": "9458:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9355, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "9466:6:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC20_BURN_EXCEEDS_BALANCE", + "nodeType": "MemberAccess", + "referencedDeclaration": 878, + "src": "9466:33:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 9350, + "name": "_balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8950, + "src": "9435:9:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9352, + "indexExpression": { + "id": 9351, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9322, + "src": "9445:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9435:18:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 9667, + "src": "9435:22:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 9357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9435:65:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9414:86:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9359, + "nodeType": "ExpressionStatement", + "src": "9414:86:51" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9364, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9324, + "src": "9544:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9361, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9022, + "src": "9526:11:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 9362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9526:13:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 9639, + "src": "9526:17:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9526:25:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9360, + "name": "_setTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9033, + "src": "9510:15:51", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 9366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9510:42:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9367, + "nodeType": "ExpressionStatement", + "src": "9510:42:51" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9369, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9322, + "src": "9576:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 9372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9593:1:51", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9371, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9585:7:51", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9370, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9585:7:51", + "typeDescriptions": {} + } + }, + "id": 9373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9585:10:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9374, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9324, + "src": "9597:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9368, + "name": "Transfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1142, + "src": "9567:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9567:37:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9376, + "nodeType": "EmitStatement", + "src": "9562:42:51" + } + ] + }, + "documentation": { + "id": 9320, + "nodeType": "StructuredDocumentation", + "src": "8886:309:51", + "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens." + }, + "id": 9378, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9322, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 9378, + "src": "9215:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9321, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9215:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9324, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9378, + "src": "9232:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9323, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9232:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9214:33:51" + }, + "returnParameters": { + "id": 9326, + "nodeType": "ParameterList", + "parameters": [], + "src": "9265:0:51" + }, + "scope": 9426, + "src": "9200:411:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 9402, + "nodeType": "Block", + "src": "10147:100:51", + "statements": [ + { + "expression": { + "id": 9394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 9388, + "name": "_allowances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8956, + "src": "10157:11:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", + "typeString": "mapping(address => mapping(address => uint256))" + } + }, + "id": 9391, + "indexExpression": { + "id": 9389, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9381, + "src": "10169:5:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10157:18:51", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", + "typeString": "mapping(address => uint256)" + } + }, + "id": 9392, + "indexExpression": { + "id": 9390, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9383, + "src": "10176:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10157:27:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9393, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9385, + "src": "10187:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10157:36:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9395, + "nodeType": "ExpressionStatement", + "src": "10157:36:51" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9397, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9381, + "src": "10217:5:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9398, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9383, + "src": "10224:7:51", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9399, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9385, + "src": "10233:6:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9396, + "name": "Approval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1151, + "src": "10208:8:51", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10208:32:51", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9401, + "nodeType": "EmitStatement", + "src": "10203:37:51" + } + ] + }, + "documentation": { + "id": 9379, + "nodeType": "StructuredDocumentation", + "src": "9617:412:51", + "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address." + }, + "id": 9403, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_approve", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9386, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9381, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 9403, + "src": "10061:13:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9380, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10061:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9383, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 9403, + "src": "10084:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9382, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10084:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9385, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9403, + "src": "10109:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9384, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10109:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10051:78:51" + }, + "returnParameters": { + "id": 9387, + "nodeType": "ParameterList", + "parameters": [], + "src": "10147:0:51" + }, + "scope": 9426, + "src": "10034:213:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 9413, + "nodeType": "Block", + "src": "10620:38:51", + "statements": [ + { + "expression": { + "id": 9411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9409, + "name": "_decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8964, + "src": "10630:9:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 9410, + "name": "decimals_", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9406, + "src": "10642:9:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "10630:21:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "id": 9412, + "nodeType": "ExpressionStatement", + "src": "10630:21:51" + } + ] + }, + "documentation": { + "id": 9404, + "nodeType": "StructuredDocumentation", + "src": "10253:312:51", + "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does." + }, + "id": 9414, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setupDecimals", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9407, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9406, + "mutability": "mutable", + "name": "decimals_", + "nodeType": "VariableDeclaration", + "scope": 9414, + "src": "10594:15:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 9405, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "10594:5:51", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "10593:17:51" + }, + "returnParameters": { + "id": 9408, + "nodeType": "ParameterList", + "parameters": [], + "src": "10620:0:51" + }, + "scope": 9426, + "src": "10570:88:51", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9424, + "nodeType": "Block", + "src": "11364:64:51", + "statements": [] + }, + "documentation": { + "id": 9415, + "nodeType": "StructuredDocumentation", + "src": "10664:576:51", + "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]." + }, + "id": 9425, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeTokenTransfer", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9422, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9417, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "scope": 9425, + "src": "11284:12:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9416, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11284:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9419, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "scope": 9425, + "src": "11306:10:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9418, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11306:7:51", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9421, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9425, + "src": "11326:14:51", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9420, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11326:7:51", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11274:72:51" + }, + "returnParameters": { + "id": 9423, + "nodeType": "ParameterList", + "parameters": [], + "src": "11364:0:51" + }, + "scope": 9426, + "src": "11245:183:51", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 9427, + "src": "1427:10003:51" + } + ], + "src": "33:11398:51" + }, + "id": 51 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20Permit.sol", + "exportedSymbols": { + "ERC20Permit": [ + 9535 + ] + }, + "id": 9536, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9428, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:52" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20Permit.sol", + "id": 9429, + "nodeType": "ImportDirective", + "scope": 9536, + "sourceUnit": 1189, + "src": "58:93:52", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/ERC20.sol", + "file": "./ERC20.sol", + "id": 9430, + "nodeType": "ImportDirective", + "scope": 9536, + "sourceUnit": 9427, + "src": "153:21:52", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/EOASignaturesValidator.sol", + "file": "../helpers/EOASignaturesValidator.sol", + "id": 9431, + "nodeType": "ImportDirective", + "scope": 9536, + "sourceUnit": 5553, + "src": "175:47:52", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 9433, + "name": "ERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9426, + "src": "775:5:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$9426", + "typeString": "contract ERC20" + } + }, + "id": 9434, + "nodeType": "InheritanceSpecifier", + "src": "775:5:52" + }, + { + "baseName": { + "id": 9435, + "name": "IERC20Permit", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1188, + "src": "782:12:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Permit_$1188", + "typeString": "contract IERC20Permit" + } + }, + "id": 9436, + "nodeType": "InheritanceSpecifier", + "src": "782:12:52" + }, + { + "baseName": { + "id": 9437, + "name": "EOASignaturesValidator", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5552, + "src": "796:22:52", + "typeDescriptions": { + "typeIdentifier": "t_contract$_EOASignaturesValidator_$5552", + "typeString": "contract EOASignaturesValidator" + } + }, + "id": 9438, + "nodeType": "InheritanceSpecifier", + "src": "796:22:52" + } + ], + "contractDependencies": [ + 1040, + 1152, + 1188, + 5552, + 8935, + 9426 + ], + "contractKind": "contract", + "documentation": { + "id": 9432, + "nodeType": "StructuredDocumentation", + "src": "224:517:52", + "text": " @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n _Available since v3.4._" + }, + "fullyImplemented": false, + "id": 9535, + "linearizedBaseContracts": [ + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152 + ], + "name": "ERC20Permit", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 9443, + "mutability": "constant", + "name": "_PERMIT_TYPEHASH", + "nodeType": "VariableDeclaration", + "scope": 9535, + "src": "877:153:52", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9439, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "877:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529", + "id": 9441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "940:84:52", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9", + "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"" + }, + "value": "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9", + "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\"" + } + ], + "id": 9440, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "921:9:52", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 9442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "921:109:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 9453, + "nodeType": "Block", + "src": "1312:64:52", + "statements": [] + }, + "documentation": { + "id": 9444, + "nodeType": "StructuredDocumentation", + "src": "1037:220:52", + "text": " @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n It's a good idea to use the same `name` that is defined as the ERC20 token name." + }, + "id": 9454, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 9449, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9446, + "src": "1301:4:52", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "hexValue": "31", + "id": 9450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1307:3:52", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + }, + "value": "1" + } + ], + "id": 9451, + "modifierName": { + "id": 9448, + "name": "EIP712", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8935, + "src": "1294:6:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_EIP712_$8935_$", + "typeString": "type(contract EIP712)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1294:17:52" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9447, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9446, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 9454, + "src": "1274:18:52", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9445, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1274:6:52", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1273:20:52" + }, + "returnParameters": { + "id": 9452, + "nodeType": "ParameterList", + "parameters": [], + "src": "1312:0:52" + }, + "scope": 9535, + "src": "1262:114:52", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 1173 + ], + "body": { + "id": 9508, + "nodeType": "Block", + "src": "1635:310:52", + "statements": [ + { + "assignments": [ + 9474 + ], + "declarations": [ + { + "constant": false, + "id": 9474, + "mutability": "mutable", + "name": "structHash", + "nodeType": "VariableDeclaration", + "scope": 9508, + "src": "1645:18:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9473, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1645:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 9488, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 9478, + "name": "_PERMIT_TYPEHASH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9443, + "src": "1700:16:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 9479, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "1718:5:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9480, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9459, + "src": "1725:7:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9481, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9461, + "src": "1734:5:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 9483, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "1754:5:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9482, + "name": "getNextNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5409, + "src": "1741:12:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view returns (uint256)" + } + }, + "id": 9484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1741:19:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9485, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9463, + "src": "1762:8:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9476, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1689:3:52", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9477, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1689:10:52", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 9486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1689:82:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 9475, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1666:9:52", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 9487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1666:115:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1645:136:52" + }, + { + "expression": { + "arguments": [ + { + "id": 9490, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "1814:5:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9491, + "name": "structHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9474, + "src": "1821:10:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 9493, + "name": "v", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9465, + "src": "1851:1:52", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 9494, + "name": "r", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9467, + "src": "1854:1:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 9495, + "name": "s", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9469, + "src": "1857:1:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 9492, + "name": "_toArraySignature", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5551, + "src": "1833:17:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (uint8,bytes32,bytes32) pure returns (bytes memory)" + } + }, + "id": 9496, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1833:26:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 9497, + "name": "deadline", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9463, + "src": "1861:8:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9498, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1871:6:52", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_SIGNATURE", + "nodeType": "MemberAccess", + "referencedDeclaration": 920, + "src": "1871:24:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9489, + "name": "_ensureValidSignature", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 5433, + 5477 + ], + "referencedDeclaration": 5477, + "src": "1792:21:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,bytes32,bytes memory,uint256,uint256)" + } + }, + "id": 9500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1792:104:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9501, + "nodeType": "ExpressionStatement", + "src": "1792:104:52" + }, + { + "expression": { + "arguments": [ + { + "id": 9503, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9457, + "src": "1916:5:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9504, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9459, + "src": "1923:7:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9505, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9461, + "src": "1932:5:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9502, + "name": "_approve", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9403, + "src": "1907:8:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 9506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1907:31:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9507, + "nodeType": "ExpressionStatement", + "src": "1907:31:52" + } + ] + }, + "documentation": { + "id": 9455, + "nodeType": "StructuredDocumentation", + "src": "1382:50:52", + "text": " @dev See {IERC20Permit-permit}." + }, + "functionSelector": "d505accf", + "id": 9509, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "permit", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9471, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1626:8:52" + }, + "parameters": { + "id": 9470, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9457, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1462:13:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1462:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9459, + "mutability": "mutable", + "name": "spender", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1485:15:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9458, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1485:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9461, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1510:13:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9460, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1510:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9463, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1533:16:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9462, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1533:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9465, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1559:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 9464, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1559:5:52", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9467, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1576:9:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9466, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1576:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9469, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 9509, + "src": "1595:9:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9468, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1595:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1452:158:52" + }, + "returnParameters": { + "id": 9472, + "nodeType": "ParameterList", + "parameters": [], + "src": "1635:0:52" + }, + "scope": 9535, + "src": "1437:508:52", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 1181 + ], + "body": { + "id": 9522, + "nodeType": "Block", + "src": "2076:43:52", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9519, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9512, + "src": "2106:5:52", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9518, + "name": "getNextNonce", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5409, + "src": "2093:12:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view returns (uint256)" + } + }, + "id": 9520, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2093:19:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9517, + "id": 9521, + "nodeType": "Return", + "src": "2086:26:52" + } + ] + }, + "documentation": { + "id": 9510, + "nodeType": "StructuredDocumentation", + "src": "1951:50:52", + "text": " @dev See {IERC20Permit-nonces}." + }, + "functionSelector": "7ecebe00", + "id": 9523, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "nonces", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9514, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2049:8:52" + }, + "parameters": { + "id": 9513, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9512, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 9523, + "src": "2022:13:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9511, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2022:7:52", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2021:15:52" + }, + "returnParameters": { + "id": 9517, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9516, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9523, + "src": "2067:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9515, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2067:7:52", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2066:9:52" + }, + "scope": 9535, + "src": "2006:113:52", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 1187 + ], + "body": { + "id": 9533, + "nodeType": "Block", + "src": "2312:44:52", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9530, + "name": "getDomainSeparator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5396, + "src": "2329:18:52", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 9531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2329:20:52", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 9529, + "id": 9532, + "nodeType": "Return", + "src": "2322:27:52" + } + ] + }, + "documentation": { + "id": 9524, + "nodeType": "StructuredDocumentation", + "src": "2125:60:52", + "text": " @dev See {IERC20Permit-DOMAIN_SEPARATOR}." + }, + "functionSelector": "3644e515", + "id": 9534, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "DOMAIN_SEPARATOR", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9526, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2285:8:52" + }, + "parameters": { + "id": 9525, + "nodeType": "ParameterList", + "parameters": [], + "src": "2268:2:52" + }, + "returnParameters": { + "id": 9529, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9528, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9534, + "src": "2303:7:52", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 9527, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2303:7:52", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2302:9:52" + }, + "scope": 9535, + "src": "2243:113:52", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 9536, + "src": "742:1616:52" + } + ], + "src": "33:2326:52" + }, + "id": 52 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeCast.sol", + "exportedSymbols": { + "SafeCast": [ + 9590 + ] + }, + "id": 9591, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9537, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:53" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 9538, + "nodeType": "ImportDirective", + "scope": 9591, + "sourceUnit": 1012, + "src": "58:90:53", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 9539, + "nodeType": "StructuredDocumentation", + "src": "150:709:53", + "text": " @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always.\n Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing\n all math on `uint256` and `int256` and then downcasting." + }, + "fullyImplemented": true, + "id": 9590, + "linearizedBaseContracts": [ + 9590 + ], + "name": "SafeCast", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 9562, + "nodeType": "Block", + "src": "1117:114:53", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9548, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9542, + "src": "1136:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "323535", + "id": 9549, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1145:3:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "1136:12:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 9551, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1152:1:53", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1136:17:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 9553, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1155:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SAFE_CAST_VALUE_CANT_FIT_INT256", + "nodeType": "MemberAccess", + "referencedDeclaration": 839, + "src": "1155:38:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9547, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1127:8:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1127:67:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9556, + "nodeType": "ExpressionStatement", + "src": "1127:67:53" + }, + { + "expression": { + "arguments": [ + { + "id": 9559, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9542, + "src": "1218:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9558, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1211:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 9557, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1211:6:53", + "typeDescriptions": {} + } + }, + "id": 9560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1211:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 9546, + "id": 9561, + "nodeType": "Return", + "src": "1204:20:53" + } + ] + }, + "documentation": { + "id": 9540, + "nodeType": "StructuredDocumentation", + "src": "883:165:53", + "text": " @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256." + }, + "id": 9563, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toInt256", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9543, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9542, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 9563, + "src": "1071:13:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9541, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1071:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1070:15:53" + }, + "returnParameters": { + "id": 9546, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9545, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9563, + "src": "1109:6:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 9544, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1109:6:53", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "visibility": "internal" + } + ], + "src": "1108:8:53" + }, + "scope": 9590, + "src": "1053:178:53", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9588, + "nodeType": "Block", + "src": "1474:122:53", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9572, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9566, + "src": "1493:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "arguments": [ + { + "id": 9575, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1507:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 9574, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1507:6:53", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 9573, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1502:4:53", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9576, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1502:12:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 9577, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "1502:16:53", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "1493:25:53", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 9579, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1520:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SAFE_CAST_VALUE_CANT_FIT_UINT64", + "nodeType": "MemberAccess", + "referencedDeclaration": 902, + "src": "1520:38:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9571, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1484:8:53", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1484:75:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9582, + "nodeType": "ExpressionStatement", + "src": "1484:75:53" + }, + { + "expression": { + "arguments": [ + { + "id": 9585, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9566, + "src": "1583:5:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9584, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1576:6:53", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 9583, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1576:6:53", + "typeDescriptions": {} + } + }, + "id": 9586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1576:13:53", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 9570, + "id": 9587, + "nodeType": "Return", + "src": "1569:20:53" + } + ] + }, + "documentation": { + "id": 9564, + "nodeType": "StructuredDocumentation", + "src": "1237:168:53", + "text": " @dev Converts an unsigned uint256 into an unsigned uint64.\n Requirements:\n - input must be less than or equal to maxUint64." + }, + "id": 9589, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toUint64", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9567, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9566, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 9589, + "src": "1428:13:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9565, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1428:7:53", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1427:15:53" + }, + "returnParameters": { + "id": 9570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9569, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9589, + "src": "1466:6:53", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 9568, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1466:6:53", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "1465:8:53" + }, + "scope": 9590, + "src": "1410:186:53", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 9591, + "src": "860:738:53" + } + ], + "src": "33:1566:53" + }, + "id": 53 + }, + "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol": { + "ast": { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/openzeppelin/SafeMath.sol", + "exportedSymbols": { + "SafeMath": [ + 9668 + ] + }, + "id": 9669, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9592, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "33:23:54" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 9593, + "nodeType": "ImportDirective", + "scope": 9669, + "sourceUnit": 1012, + "src": "58:90:54", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": { + "id": 9594, + "nodeType": "StructuredDocumentation", + "src": "150:563:54", + "text": " @dev Wrappers over Solidity's arithmetic operations with added overflow\n checks.\n Arithmetic operations in Solidity wrap on overflow. This can easily result\n in bugs, because programmers usually assume that an overflow raises an\n error, which is the standard behavior in high level programming languages.\n `SafeMath` restores this intuition by reverting the transaction when an\n operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always." + }, + "fullyImplemented": true, + "id": 9668, + "linearizedBaseContracts": [ + 9668 + ], + "name": "SafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 9620, + "nodeType": "Block", + "src": "1033:100:54", + "statements": [ + { + "assignments": [ + 9605 + ], + "declarations": [ + { + "constant": false, + "id": 9605, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 9620, + "src": "1043:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9604, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1043:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9609, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9606, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9597, + "src": "1055:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 9607, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9599, + "src": "1059:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1055:5:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1043:17:54" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9611, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9605, + "src": "1079:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 9612, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9597, + "src": "1084:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1079:6:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 9614, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1087:6:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ADD_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 533, + "src": "1087:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9610, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1070:8:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1070:37:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9617, + "nodeType": "ExpressionStatement", + "src": "1070:37:54" + }, + { + "expression": { + "id": 9618, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9605, + "src": "1125:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9603, + "id": 9619, + "nodeType": "Return", + "src": "1118:8:54" + } + ] + }, + "documentation": { + "id": 9595, + "nodeType": "StructuredDocumentation", + "src": "737:224:54", + "text": " @dev Returns the addition of two unsigned integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow." + }, + "id": 9621, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9600, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9597, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 9621, + "src": "979:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9596, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "979:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9599, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 9621, + "src": "990:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9598, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "990:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "978:22:54" + }, + "returnParameters": { + "id": 9603, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9602, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9621, + "src": "1024:7:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9601, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1024:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1023:9:54" + }, + "scope": 9668, + "src": "966:167:54", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9638, + "nodeType": "Block", + "src": "1471:54:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9632, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9624, + "src": "1492:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9633, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9626, + "src": "1495:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9634, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "1498:6:54", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 9635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SUB_OVERFLOW", + "nodeType": "MemberAccess", + "referencedDeclaration": 536, + "src": "1498:19:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9631, + "name": "sub", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 9639, + 9667 + ], + "referencedDeclaration": 9667, + "src": "1488:3:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 9636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1488:30:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9630, + "id": 9637, + "nodeType": "Return", + "src": "1481:37:54" + } + ] + }, + "documentation": { + "id": 9622, + "nodeType": "StructuredDocumentation", + "src": "1139:260:54", + "text": " @dev Returns the subtraction of two unsigned integers, reverting on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow." + }, + "id": 9639, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9627, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9624, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 9639, + "src": "1417:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9623, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1417:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9626, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 9639, + "src": "1428:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1428:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1416:22:54" + }, + "returnParameters": { + "id": 9630, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9629, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9639, + "src": "1462:7:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9628, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1462:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1461:9:54" + }, + "scope": 9668, + "src": "1404:121:54", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9666, + "nodeType": "Block", + "src": "1932:90:54", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9652, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9644, + "src": "1951:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 9653, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9642, + "src": "1956:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1951:6:54", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 9655, + "name": "errorCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9646, + "src": "1959:9:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9651, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "1942:8:54", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 9656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1942:27:54", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9657, + "nodeType": "ExpressionStatement", + "src": "1942:27:54" + }, + { + "assignments": [ + 9659 + ], + "declarations": [ + { + "constant": false, + "id": 9659, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 9666, + "src": "1979:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9658, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1979:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9663, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9660, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9642, + "src": "1991:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 9661, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9644, + "src": "1995:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1991:5:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1979:17:54" + }, + { + "expression": { + "id": 9664, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9659, + "src": "2014:1:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9650, + "id": 9665, + "nodeType": "Return", + "src": "2007:8:54" + } + ] + }, + "documentation": { + "id": 9640, + "nodeType": "StructuredDocumentation", + "src": "1531:280:54", + "text": " @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n overflow (when the result is negative).\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow." + }, + "id": 9667, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9647, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9642, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "scope": 9667, + "src": "1838:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9641, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1838:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9644, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 9667, + "src": "1857:9:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9643, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1857:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9646, + "mutability": "mutable", + "name": "errorCode", + "nodeType": "VariableDeclaration", + "scope": 9667, + "src": "1876:17:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9645, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1876:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1828:71:54" + }, + "returnParameters": { + "id": 9650, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9649, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9667, + "src": "1923:7:54", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9648, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1923:7:54", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1922:9:54" + }, + "scope": 9668, + "src": "1816:206:54", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 9669, + "src": "714:1310:54" + } + ], + "src": "33:1992:54" + }, + "id": 54 + }, + "contracts/ComposableStablePool.sol": { + "ast": { + "absolutePath": "contracts/ComposableStablePool.sol", + "exportedSymbols": { + "ComposableStablePool": [ + 11876 + ] + }, + "id": 11877, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 9670, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:55" + }, + { + "id": 9671, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:55" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.sol", + "id": 9672, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 237, + "src": "747:83:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 9673, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 1012, + "src": "831:90:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "file": "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol", + "id": 9674, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 1283, + "src": "922:101:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "id": 9675, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 429, + "src": "1024:77:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol", + "id": 9676, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 462, + "src": "1102:72:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 9677, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 7233, + "src": "1176:72:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 9678, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 8843, + "src": "1249:66:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "id": 9679, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 5883, + "src": "1316:77:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "id": 9680, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 5995, + "src": "1394:77:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/BaseGeneralPool.sol", + "id": 9681, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 2469, + "src": "1473:68:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol", + "id": 9682, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 4962, + "src": "1542:73:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolStorage.sol", + "file": "./ComposableStablePoolStorage.sol", + "id": 9683, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 14194, + "src": "1617:43:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolRates.sol", + "file": "./ComposableStablePoolRates.sol", + "id": 9684, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 13151, + "src": "1661:41:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolStorage.sol", + "file": "./ComposableStablePoolStorage.sol", + "id": 9685, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 14194, + "src": "1703:43:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolRates.sol", + "file": "./ComposableStablePoolRates.sol", + "id": 9686, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 13151, + "src": "1747:41:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolProtocolFees.sol", + "file": "./ComposableStablePoolProtocolFees.sol", + "id": 9687, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 12431, + "src": "1789:48:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/StablePoolAmplification.sol", + "file": "./StablePoolAmplification.sol", + "id": 9688, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 15990, + "src": "1838:39:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/StableMath.sol", + "file": "./StableMath.sol", + "id": 9689, + "nodeType": "ImportDirective", + "scope": 11877, + "sourceUnit": 15488, + "src": "1878:26:55", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 9691, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2720:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 9692, + "nodeType": "InheritanceSpecifier", + "src": "2720:13:55" + }, + { + "baseName": { + "id": 9693, + "name": "IVersion", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 461, + "src": "2739:8:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVersion_$461", + "typeString": "contract IVersion" + } + }, + "id": 9694, + "nodeType": "InheritanceSpecifier", + "src": "2739:8:55" + }, + { + "baseName": { + "id": 9695, + "name": "BaseGeneralPool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2468, + "src": "2753:15:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BaseGeneralPool_$2468", + "typeString": "contract BaseGeneralPool" + } + }, + "id": 9696, + "nodeType": "InheritanceSpecifier", + "src": "2753:15:55" + }, + { + "baseName": { + "id": 9697, + "name": "StablePoolAmplification", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 15989, + "src": "2774:23:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StablePoolAmplification_$15989", + "typeString": "contract StablePoolAmplification" + } + }, + "id": 9698, + "nodeType": "InheritanceSpecifier", + "src": "2774:23:55" + }, + { + "baseName": { + "id": 9699, + "name": "ComposableStablePoolRates", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13150, + "src": "2803:25:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + }, + "id": 9700, + "nodeType": "InheritanceSpecifier", + "src": "2803:25:55" + }, + { + "baseName": { + "id": 9701, + "name": "ComposableStablePoolProtocolFees", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 12430, + "src": "2834:32:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolProtocolFees_$12430", + "typeString": "contract ComposableStablePoolProtocolFees" + } + }, + "id": 9702, + "nodeType": "InheritanceSpecifier", + "src": "2834:32:55" + } + ], + "contractDependencies": [ + 409, + 428, + 451, + 461, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1466, + 1491, + 2230, + 2468, + 3860, + 3955, + 4136, + 4691, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 12430, + 13150, + 14193, + 15989 + ], + "contractKind": "contract", + "documentation": { + "id": 9690, + "nodeType": "StructuredDocumentation", + "src": "1906:776:55", + "text": " @dev StablePool with preminted BPT and rate providers for each token, allowing for e.g. wrapped tokens with a known\n price ratio, such as Compound's cTokens.\n BPT is preminted on Pool initialization and registered as one of the Pool's tokens, allowing for swaps to behave as\n single-token joins or exits (by swapping a token for BPT). We also support regular joins and exits, which can mint\n and burn BPT.\n Preminted BPT is deposited in the Vault as the initial balance of the Pool, and doesn't belong to any entity until\n transferred out of the Pool. The Pool's arithmetic behaves as if it didn't exist, and the BPT total supply is not\n a useful value: we rely on the 'virtual supply' (how much BPT is actually owned outside the Vault) instead." + }, + "fullyImplemented": true, + "id": 11876, + "linearizedBaseContracts": [ + 11876, + 12430, + 4691, + 13150, + 14193, + 15989, + 2468, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1466, + 1425, + 1491, + 461, + 428 + ], + "name": "ComposableStablePool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 9705, + "libraryName": { + "id": 9703, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "2879:10:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "2873:29:55", + "typeName": { + "id": 9704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2894:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 9708, + "libraryName": { + "id": 9706, + "name": "PriceRateCache", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4961, + "src": "2913:14:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PriceRateCache_$4961", + "typeString": "library PriceRateCache" + } + }, + "nodeType": "UsingForDirective", + "src": "2907:33:55", + "typeName": { + "id": 9707, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2932:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "id": 9711, + "libraryName": { + "id": 9709, + "name": "StablePoolUserData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 236, + "src": "2951:18:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StablePoolUserData_$236", + "typeString": "library StablePoolUserData" + } + }, + "nodeType": "UsingForDirective", + "src": "2945:35:55", + "typeName": { + "id": 9710, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2974:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + { + "id": 9714, + "libraryName": { + "id": 9712, + "name": "BasePoolUserData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 286, + "src": "2991:16:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolUserData_$286", + "typeString": "library BasePoolUserData" + } + }, + "nodeType": "UsingForDirective", + "src": "2985:33:55", + "typeName": { + "id": 9713, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3012:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + } + }, + { + "constant": true, + "id": 9720, + "mutability": "constant", + "name": "_PREMINTED_TOKEN_BALANCE", + "nodeType": "VariableDeclaration", + "scope": 11876, + "src": "3182:60:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9715, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3182:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_rational_2596148429267413814265248164610048_by_1", + "typeString": "int_const 2596...(26 digits omitted)...0048" + }, + "id": 9719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "32", + "id": 9716, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3234:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "components": [ + { + "hexValue": "313131", + "id": 9717, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3238:3:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_111_by_1", + "typeString": "int_const 111" + }, + "value": "111" + } + ], + "id": 9718, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3237:5:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_111_by_1", + "typeString": "int_const 111" + } + }, + "src": "3234:8:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_2596148429267413814265248164610048_by_1", + "typeString": "int_const 2596...(26 digits omitted)...0048" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 9722, + "mutability": "mutable", + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 11876, + "src": "3249:23:55", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 9721, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3249:6:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "canonicalName": "ComposableStablePool.NewPoolParams", + "id": 9755, + "members": [ + { + "constant": false, + "id": 9724, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3405:12:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 9723, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "3405:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9726, + "mutability": "mutable", + "name": "protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3427:51:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 9725, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "3427:31:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9728, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3488:11:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9727, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3488:6:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9730, + "mutability": "mutable", + "name": "symbol", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3509:13:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9729, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3509:6:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9733, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3532:15:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 9731, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "3532:6:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 9732, + "nodeType": "ArrayTypeName", + "src": "3532:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9736, + "mutability": "mutable", + "name": "rateProviders", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3557:29:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 9734, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3557:13:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 9735, + "nodeType": "ArrayTypeName", + "src": "3557:15:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9739, + "mutability": "mutable", + "name": "tokenRateCacheDurations", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3596:33:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9737, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3596:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9738, + "nodeType": "ArrayTypeName", + "src": "3596:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9742, + "mutability": "mutable", + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3639:38:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 9740, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3639:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9741, + "nodeType": "ArrayTypeName", + "src": "3639:6:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9744, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3687:30:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3687:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9746, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3727:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9745, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3727:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9748, + "mutability": "mutable", + "name": "pauseWindowDuration", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3762:27:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9747, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3762:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9750, + "mutability": "mutable", + "name": "bufferPeriodDuration", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3799:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9749, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3799:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9752, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3837:13:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9751, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3837:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9754, + "mutability": "mutable", + "name": "version", + "nodeType": "VariableDeclaration", + "scope": 9755, + "src": "3860:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9753, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3860:6:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "name": "NewPoolParams", + "nodeType": "StructDefinition", + "scope": 11876, + "src": "3374:507:55", + "visibility": "public" + }, + { + "body": { + "id": 9820, + "nodeType": "Block", + "src": "4639:42:55", + "statements": [ + { + "expression": { + "id": 9818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9815, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9722, + "src": "4649:8:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 9816, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4660:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9817, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "version", + "nodeType": "MemberAccess", + "referencedDeclaration": 9754, + "src": "4660:14:55", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "4649:25:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 9819, + "nodeType": "ExpressionStatement", + "src": "4649:25:55" + } + ] + }, + "id": 9821, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "expression": { + "id": 9760, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "3958:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9761, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "vault", + "nodeType": "MemberAccess", + "referencedDeclaration": 9724, + "src": "3958:12:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + { + "expression": { + "expression": { + "id": 9762, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2021, + "src": "3984:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVault_$2021_$", + "typeString": "type(contract IVault)" + } + }, + "id": 9763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PoolSpecialization", + "nodeType": "MemberAccess", + "referencedDeclaration": 1680, + "src": "3984:25:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PoolSpecialization_$1680_$", + "typeString": "type(enum IVault.PoolSpecialization)" + } + }, + "id": 9764, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "GENERAL", + "nodeType": "MemberAccess", + "src": "3984:33:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + { + "expression": { + "id": 9765, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4031:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9766, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "name", + "nodeType": "MemberAccess", + "referencedDeclaration": 9728, + "src": "4031:11:55", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "expression": { + "id": 9767, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4056:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9768, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "symbol", + "nodeType": "MemberAccess", + "referencedDeclaration": 9730, + "src": "4056:13:55", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "arguments": [ + { + "expression": { + "id": 9770, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4097:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9771, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 9733, + "src": "4097:13:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 9773, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4119:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + ], + "id": 9772, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "4112:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 9774, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4112:12:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 9769, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "4083:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 9775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4083:42:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 9779, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4153:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9780, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 9733, + "src": "4153:13:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 9781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4153:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 9782, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4176:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4153:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9778, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "4139:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (address[] memory)" + }, + "typeName": { + "baseType": { + "id": 9776, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4143:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9777, + "nodeType": "ArrayTypeName", + "src": "4143:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + } + }, + "id": 9784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4139:39:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + { + "expression": { + "id": 9785, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4192:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9786, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "swapFeePercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 9746, + "src": "4192:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9787, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4230:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9788, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "pauseWindowDuration", + "nodeType": "MemberAccess", + "referencedDeclaration": 9748, + "src": "4230:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9789, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4270:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9790, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "bufferPeriodDuration", + "nodeType": "MemberAccess", + "referencedDeclaration": 9750, + "src": "4270:27:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9791, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4311:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9792, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 9752, + "src": "4311:12:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 9793, + "modifierName": { + "id": 9759, + "name": "BasePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3860, + "src": "3936:8:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePool_$3860_$", + "typeString": "type(contract BasePool)" + } + }, + "nodeType": "ModifierInvocation", + "src": "3936:397:55" + }, + { + "arguments": [ + { + "expression": { + "id": 9795, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4366:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9796, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amplificationParameter", + "nodeType": "MemberAccess", + "referencedDeclaration": 9744, + "src": "4366:29:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9797, + "modifierName": { + "id": 9794, + "name": "StablePoolAmplification", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15989, + "src": "4342:23:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolAmplification_$15989_$", + "typeString": "type(contract StablePoolAmplification)" + } + }, + "nodeType": "ModifierInvocation", + "src": "4342:54:55" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 9800, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4455:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + ], + "id": 9799, + "name": "_extractStorageParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9862, + "src": "4433:21:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_NewPoolParams_$9755_memory_ptr_$returns$_t_struct$_StorageParams_$13175_memory_ptr_$", + "typeString": "function (struct ComposableStablePool.NewPoolParams memory) view returns (struct ComposableStablePoolStorage.StorageParams memory)" + } + }, + "id": 9801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4433:29:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + } + ], + "id": 9802, + "modifierName": { + "id": 9798, + "name": "ComposableStablePoolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14193, + "src": "4405:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolStorage_$14193_$", + "typeString": "type(contract ComposableStablePoolStorage)" + } + }, + "nodeType": "ModifierInvocation", + "src": "4405:58:55" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 9805, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4518:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + ], + "id": 9804, + "name": "_extractRatesParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9839, + "src": "4498:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_NewPoolParams_$9755_memory_ptr_$returns$_t_struct$_RatesParams_$12456_memory_ptr_$", + "typeString": "function (struct ComposableStablePool.NewPoolParams memory) pure returns (struct ComposableStablePoolRates.RatesParams memory)" + } + }, + "id": 9806, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4498:27:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + } + ], + "id": 9807, + "modifierName": { + "id": 9803, + "name": "ComposableStablePoolRates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13150, + "src": "4472:25:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolRates_$13150_$", + "typeString": "type(contract ComposableStablePoolRates)" + } + }, + "nodeType": "ModifierInvocation", + "src": "4472:54:55" + }, + { + "arguments": [ + { + "expression": { + "id": 9809, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9757, + "src": "4552:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9810, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "protocolFeeProvider", + "nodeType": "MemberAccess", + "referencedDeclaration": 9726, + "src": "4552:26:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 9811, + "name": "ProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4691, + "src": "4580:16:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeCache_$4691_$", + "typeString": "type(contract ProtocolFeeCache)" + } + }, + "id": 9812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "nodeType": "MemberAccess", + "referencedDeclaration": 4453, + "src": "4580:53:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9813, + "modifierName": { + "id": 9808, + "name": "ProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4691, + "src": "4535:16:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeCache_$4691_$", + "typeString": "type(contract ProtocolFeeCache)" + } + }, + "nodeType": "ModifierInvocation", + "src": "4535:99:55" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9758, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9757, + "mutability": "mutable", + "name": "params", + "nodeType": "VariableDeclaration", + "scope": 9821, + "src": "3899:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + }, + "typeName": { + "id": 9756, + "name": "NewPoolParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9755, + "src": "3899:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_storage_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + } + }, + "visibility": "internal" + } + ], + "src": "3898:29:55" + }, + "returnParameters": { + "id": 9814, + "nodeType": "ParameterList", + "parameters": [], + "src": "4639:0:55" + }, + "scope": 11876, + "src": "3887:794:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 9838, + "nodeType": "Block", + "src": "4919:254:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 9830, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9823, + "src": "5012:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9831, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 9733, + "src": "5012:13:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "expression": { + "id": 9832, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9823, + "src": "5058:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9833, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 9736, + "src": "5058:20:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "expression": { + "id": 9834, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9823, + "src": "5121:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9835, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateCacheDurations", + "nodeType": "MemberAccess", + "referencedDeclaration": 9739, + "src": "5121:30:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 9828, + "name": "ComposableStablePoolRates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13150, + "src": "4948:25:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolRates_$13150_$", + "typeString": "type(contract ComposableStablePoolRates)" + } + }, + "id": 9829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "RatesParams", + "nodeType": "MemberAccess", + "referencedDeclaration": 12456, + "src": "4948:37:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RatesParams_$12456_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolRates.RatesParams storage pointer)" + } + }, + "id": 9836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "tokens", + "rateProviders", + "tokenRateCacheDurations" + ], + "nodeType": "FunctionCall", + "src": "4948:218:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "functionReturnParameters": 9827, + "id": 9837, + "nodeType": "Return", + "src": "4929:237:55" + } + ] + }, + "id": 9839, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_extractRatesParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9824, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9823, + "mutability": "mutable", + "name": "params", + "nodeType": "VariableDeclaration", + "scope": 9839, + "src": "4794:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + }, + "typeName": { + "id": 9822, + "name": "NewPoolParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9755, + "src": "4794:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_storage_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + } + }, + "visibility": "internal" + } + ], + "src": "4793:29:55" + }, + "returnParameters": { + "id": 9827, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9826, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9839, + "src": "4869:44:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams" + }, + "typeName": { + "id": 9825, + "name": "ComposableStablePoolRates.RatesParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 12456, + "src": "4869:37:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_storage_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams" + } + }, + "visibility": "internal" + } + ], + "src": "4868:46:55" + }, + "scope": 11876, + "src": "4765:408:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 9861, + "nodeType": "Block", + "src": "5417:318:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 9849, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9841, + "src": "5538:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9850, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 9733, + "src": "5538:13:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 9852, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "5560:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + ], + "id": 9851, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "5553:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 9853, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5553:12:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 9848, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "5524:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 9854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5524:42:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "expression": { + "id": 9855, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9841, + "src": "5604:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9856, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 9736, + "src": "5604:20:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "expression": { + "id": 9857, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9841, + "src": "5675:6:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + }, + "id": 9858, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "exemptFromYieldProtocolFeeFlags", + "nodeType": "MemberAccess", + "referencedDeclaration": 9742, + "src": "5675:38:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + ], + "expression": { + "id": 9846, + "name": "ComposableStablePoolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14193, + "src": "5446:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolStorage_$14193_$", + "typeString": "type(contract ComposableStablePoolStorage)" + } + }, + "id": 9847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "StorageParams", + "nodeType": "MemberAccess", + "referencedDeclaration": 13175, + "src": "5446:41:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_StorageParams_$13175_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolStorage.StorageParams storage pointer)" + } + }, + "id": 9859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "registeredTokens", + "tokenRateProviders", + "exemptFromYieldProtocolFeeFlags" + ], + "nodeType": "FunctionCall", + "src": "5446:282:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "functionReturnParameters": 9845, + "id": 9860, + "nodeType": "Return", + "src": "5427:301:55" + } + ] + }, + "id": 9862, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_extractStorageParams", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9842, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9841, + "mutability": "mutable", + "name": "params", + "nodeType": "VariableDeclaration", + "scope": 9862, + "src": "5288:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + }, + "typeName": { + "id": 9840, + "name": "NewPoolParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9755, + "src": "5288:13:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_storage_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + } + }, + "visibility": "internal" + } + ], + "src": "5287:29:55" + }, + "returnParameters": { + "id": 9845, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9844, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9862, + "src": "5363:48:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams" + }, + "typeName": { + "id": 9843, + "name": "ComposableStablePoolStorage.StorageParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13175, + "src": "5363:41:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_storage_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams" + } + }, + "visibility": "internal" + } + ], + "src": "5362:50:55" + }, + "scope": 11876, + "src": "5257:478:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "baseFunctions": [ + 460 + ], + "body": { + "id": 9870, + "nodeType": "Block", + "src": "5807:32:55", + "statements": [ + { + "expression": { + "id": 9868, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9722, + "src": "5824:8:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 9867, + "id": 9869, + "nodeType": "Return", + "src": "5817:15:55" + } + ] + }, + "functionSelector": "54fd4d50", + "id": 9871, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9864, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5774:8:55" + }, + "parameters": { + "id": 9863, + "nodeType": "ParameterList", + "parameters": [], + "src": "5757:2:55" + }, + "returnParameters": { + "id": 9867, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9866, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9871, + "src": "5792:13:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 9865, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5792:6:55", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "5791:15:55" + }, + "scope": 11876, + "src": "5741:98:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9880, + "nodeType": "Block", + "src": "6362:40:55", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9877, + "name": "_getMinimumBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2668, + "src": "6379:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint256_$", + "typeString": "function () pure returns (uint256)" + } + }, + "id": 9878, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6379:16:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9876, + "id": 9879, + "nodeType": "Return", + "src": "6372:23:55" + } + ] + }, + "documentation": { + "id": 9872, + "nodeType": "StructuredDocumentation", + "src": "5845:455:55", + "text": " @notice Return the minimum BPT balance, required to avoid minimum token balances.\n @dev This amount is minted and immediately burned on pool initialization, so that the total supply\n (and therefore post-exit token balances), can never be zero. This keeps the math well-behaved when\n liquidity is low. (It also provides an easy way to check whether a pool has been initialized, to\n ensure this is only done once.)" + }, + "functionSelector": "04842d4c", + "id": 9881, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getMinimumBpt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9873, + "nodeType": "ParameterList", + "parameters": [], + "src": "6327:2:55" + }, + "returnParameters": { + "id": 9876, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9875, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "6353:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9874, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6353:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6352:9:55" + }, + "scope": 11876, + "src": "6305:97:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 3400 + ], + "body": { + "id": 9894, + "nodeType": "Block", + "src": "6627:453:55", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 9886, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "6637:5:55", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePool_$11876", + "typeString": "contract super ComposableStablePool" + } + }, + "id": 9888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_beforeSwapJoinExit", + "nodeType": "MemberAccess", + "referencedDeclaration": 3400, + "src": "6637:25:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6637:27:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9890, + "nodeType": "ExpressionStatement", + "src": "6637:27:55" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9891, + "name": "_cacheTokenRatesIfNecessary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12889, + "src": "7044:27:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9892, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7044:29:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9893, + "nodeType": "ExpressionStatement", + "src": "7044:29:55" + } + ] + }, + "documentation": { + "id": 9882, + "nodeType": "StructuredDocumentation", + "src": "6430:143:55", + "text": " @dev Override base pool hook invoked before any swap, join, or exit to ensure rates are updated before\n the operation." + }, + "id": 9895, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeSwapJoinExit", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9884, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "6618:8:55" + }, + "parameters": { + "id": 9883, + "nodeType": "ParameterList", + "parameters": [], + "src": "6606:2:55" + }, + "returnParameters": { + "id": 9885, + "nodeType": "ParameterList", + "parameters": [], + "src": "6627:0:55" + }, + "scope": 11876, + "src": "6578:502:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2360 + ], + "body": { + "id": 9945, + "nodeType": "Block", + "src": "8154:475:55", + "statements": [ + { + "expression": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 9919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9914, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9898, + "src": "8184:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 9915, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 1475, + "src": "8184:19:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9917, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "8214:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + ], + "id": 9916, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "8207:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 9918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8207:12:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "8184:35:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 9925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9920, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9898, + "src": "8223:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 9921, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 1477, + "src": "8223:20:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9923, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "8254:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + ], + "id": 9922, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "8247:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 9924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8247:12:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "8223:36:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8184:75:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 9927, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8183:77:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 9937, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9898, + "src": "8438:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 9938, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9901, + "src": "8471:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 9939, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9903, + "src": "8511:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9940, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9905, + "src": "8550:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9941, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9908, + "src": "8590:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 9935, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "8398:5:55", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePool_$11876", + "typeString": "contract super ComposableStablePool" + } + }, + "id": 9936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_swapGivenIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 2360, + "src": "8398:18:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256,uint256[] memory) returns (uint256)" + } + }, + "id": 9942, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8398:224:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "8183:439:55", + "trueExpression": { + "arguments": [ + { + "id": 9929, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9898, + "src": "8292:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 9930, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9901, + "src": "8305:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 9931, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9903, + "src": "8325:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9932, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9905, + "src": "8344:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9933, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9908, + "src": "8364:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 9928, + "name": "_swapWithBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10243, + "src": "8279:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256,uint256[] memory) returns (uint256)" + } + }, + "id": 9934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8279:100:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9913, + "id": 9944, + "nodeType": "Return", + "src": "8164:458:55" + } + ] + }, + "documentation": { + "id": 9896, + "nodeType": "StructuredDocumentation", + "src": "7105:775:55", + "text": " @dev Override this hook called by the base class `onSwap`, to check whether we are doing a regular swap,\n or a swap involving BPT, which is equivalent to a single token join or exit. Since one of the Pool's\n tokens is the preminted BPT, we need to handle swaps where BPT is involved separately.\n At this point, the balances are unscaled. The indices are coming from the Vault, so they are indices into\n the array of registered tokens (including BPT).\n If this is a swap involving BPT, call `_swapWithBpt`, which computes the amountOut using the swapFeePercentage\n and charges protocol fees, in the same manner as single token join/exits. Otherwise, perform the default\n processing for a regular swap." + }, + "id": 9946, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_swapGivenIn", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9910, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8127:8:55" + }, + "parameters": { + "id": 9909, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9898, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "7916:30:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 9897, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "7916:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9901, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "7956:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9899, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7956:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9900, + "nodeType": "ArrayTypeName", + "src": "7956:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9903, + "mutability": "mutable", + "name": "registeredIndexIn", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "8001:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9902, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8001:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9905, + "mutability": "mutable", + "name": "registeredIndexOut", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "8036:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9904, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8036:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9908, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "8072:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9906, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8072:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9907, + "nodeType": "ArrayTypeName", + "src": "8072:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "7906:203:55" + }, + "returnParameters": { + "id": 9913, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9912, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "8145:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9911, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8145:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8144:9:55" + }, + "scope": 11876, + "src": "7885:744:55", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2417 + ], + "body": { + "id": 9996, + "nodeType": "Block", + "src": "9693:476:55", + "statements": [ + { + "expression": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 9970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9965, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9949, + "src": "9723:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 9966, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 1475, + "src": "9723:19:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9968, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9753:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + ], + "id": 9967, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "9746:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 9969, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9746:12:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "9723:35:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 9976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9971, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9949, + "src": "9762:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 9972, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 1477, + "src": "9762:20:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "id": 9974, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9793:4:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + ], + "id": 9973, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "9786:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 9975, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9786:12:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "9762:36:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9723:75:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 9978, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9722:77:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 9988, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9949, + "src": "9978:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 9989, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9952, + "src": "10011:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 9990, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9954, + "src": "10051:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9991, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "10090:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9992, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9959, + "src": "10130:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 9986, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "9937:5:55", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePool_$11876", + "typeString": "contract super ComposableStablePool" + } + }, + "id": 9987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_swapGivenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 2417, + "src": "9937:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256,uint256[] memory) returns (uint256)" + } + }, + "id": 9993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9937:225:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9722:440:55", + "trueExpression": { + "arguments": [ + { + "id": 9980, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9949, + "src": "9831:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 9981, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9952, + "src": "9844:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 9982, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9954, + "src": "9864:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9983, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "9883:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9984, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9959, + "src": "9903:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 9979, + "name": "_swapWithBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10243, + "src": "9818:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256,uint256[] memory) returns (uint256)" + } + }, + "id": 9985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9818:100:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 9964, + "id": 9995, + "nodeType": "Return", + "src": "9703:459:55" + } + ] + }, + "documentation": { + "id": 9947, + "nodeType": "StructuredDocumentation", + "src": "8635:783:55", + "text": " @dev Override this hook called by the base class `onSwap`, to check whether we are doing a regular swap,\n or a swap involving BPT, which is equivalent to a single token join or exit. Since one of the Pool's\n tokens is the preminted BPT, we need to handle swaps where BPT is involved separately.\n At this point, the balances are unscaled. The indices and balances are coming from the Vault, so they\n refer to the full set of registered tokens (including BPT).\n If this is a swap involving BPT, call `_swapWithBpt`, which computes the amountOut using the swapFeePercentage\n and charges protocol fees, in the same manner as single token join/exits. Otherwise, perform the default\n processing for a regular swap." + }, + "id": 9997, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_swapGivenOut", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 9961, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9666:8:55" + }, + "parameters": { + "id": 9960, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9949, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 9997, + "src": "9455:30:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 9948, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "9455:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9952, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 9997, + "src": "9495:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9950, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9495:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9951, + "nodeType": "ArrayTypeName", + "src": "9495:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9954, + "mutability": "mutable", + "name": "registeredIndexIn", + "nodeType": "VariableDeclaration", + "scope": 9997, + "src": "9540:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9953, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9540:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9956, + "mutability": "mutable", + "name": "registeredIndexOut", + "nodeType": "VariableDeclaration", + "scope": 9997, + "src": "9575:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9955, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9575:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9959, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 9997, + "src": "9611:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9957, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9611:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9958, + "nodeType": "ArrayTypeName", + "src": "9611:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "9445:203:55" + }, + "returnParameters": { + "id": 9964, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9963, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9997, + "src": "9684:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9962, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9684:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9683:9:55" + }, + "scope": 11876, + "src": "9423:746:55", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2431 + ], + "body": { + "id": 10022, + "nodeType": "Block", + "src": "10679:237:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "74727565", + "id": 10014, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10740:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "expression": { + "id": 10015, + "name": "request", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10000, + "src": "10774:7:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10016, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "10774:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10017, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10003, + "src": "10806:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10018, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10005, + "src": "10842:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10019, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10007, + "src": "10877:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10013, + "name": "_onRegularSwap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10125, + "src": "10708:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bool_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (bool,uint256,uint256[] memory,uint256,uint256) view returns (uint256)" + } + }, + "id": 10020, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10708:201:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10012, + "id": 10021, + "nodeType": "Return", + "src": "10689:220:55" + } + ] + }, + "documentation": { + "id": 9998, + "nodeType": "StructuredDocumentation", + "src": "10175:273:55", + "text": " @dev This is called from the base class `_swapGivenIn`, so at this point the amount has been adjusted\n for swap fees, and balances have had scaling applied. This will only be called for regular (non-BPT) swaps,\n so forward to `onRegularSwap`." + }, + "id": 10023, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onSwapGivenIn", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10009, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10652:8:55" + }, + "parameters": { + "id": 10008, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10000, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 10023, + "src": "10486:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 9999, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "10486:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10003, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10023, + "src": "10522:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10001, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10522:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10002, + "nodeType": "ArrayTypeName", + "src": "10522:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10005, + "mutability": "mutable", + "name": "registeredIndexIn", + "nodeType": "VariableDeclaration", + "scope": 10023, + "src": "10567:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10004, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10567:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10007, + "mutability": "mutable", + "name": "registeredIndexOut", + "nodeType": "VariableDeclaration", + "scope": 10023, + "src": "10602:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10006, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10602:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10476:158:55" + }, + "returnParameters": { + "id": 10012, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10011, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10023, + "src": "10670:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10010, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10670:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10669:9:55" + }, + "scope": 11876, + "src": "10453:463:55", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2445 + ], + "body": { + "id": 10048, + "nodeType": "Block", + "src": "11428:239:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "66616c7365", + "id": 10040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11489:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "expression": { + "id": 10041, + "name": "request", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10026, + "src": "11525:7:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10042, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "11525:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10043, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10029, + "src": "11557:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10044, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10031, + "src": "11593:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10045, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10033, + "src": "11628:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10039, + "name": "_onRegularSwap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10125, + "src": "11457:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bool_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (bool,uint256,uint256[] memory,uint256,uint256) view returns (uint256)" + } + }, + "id": 10046, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11457:203:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10038, + "id": 10047, + "nodeType": "Return", + "src": "11438:222:55" + } + ] + }, + "documentation": { + "id": 10024, + "nodeType": "StructuredDocumentation", + "src": "10922:274:55", + "text": " @dev This is called from the base class `_swapGivenOut`, so at this point the amount has been adjusted\n for swap fees, and balances have had scaling applied. This will only be called for regular (non-BPT) swaps,\n so forward to `onRegularSwap`." + }, + "id": 10049, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onSwapGivenOut", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10035, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11401:8:55" + }, + "parameters": { + "id": 10034, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10026, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 10049, + "src": "11235:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 10025, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "11235:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10029, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10049, + "src": "11271:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10027, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11271:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10028, + "nodeType": "ArrayTypeName", + "src": "11271:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10031, + "mutability": "mutable", + "name": "registeredIndexIn", + "nodeType": "VariableDeclaration", + "scope": 10049, + "src": "11316:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10030, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11316:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10033, + "mutability": "mutable", + "name": "registeredIndexOut", + "nodeType": "VariableDeclaration", + "scope": 10049, + "src": "11351:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10032, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11351:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11225:158:55" + }, + "returnParameters": { + "id": 10038, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10037, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10049, + "src": "11419:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10036, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11419:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11418:9:55" + }, + "scope": 11876, + "src": "11201:466:55", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 10124, + "nodeType": "Block", + "src": "12131:675:55", + "statements": [ + { + "assignments": [ + 10070 + ], + "declarations": [ + { + "constant": false, + "id": 10070, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10124, + "src": "12194:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10068, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12194:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10069, + "nodeType": "ArrayTypeName", + "src": "12194:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10074, + "initialValue": { + "arguments": [ + { + "id": 10072, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10057, + "src": "12235:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 10071, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "12222:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 10073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12222:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12194:60:55" + }, + { + "assignments": [ + 10076 + ], + "declarations": [ + { + "constant": false, + "id": 10076, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 10124, + "src": "12264:15:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10075, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12264:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10080, + "initialValue": { + "arguments": [ + { + "id": 10078, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10059, + "src": "12296:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10077, + "name": "_skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13797, + "src": "12282:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 10079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12282:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12264:50:55" + }, + { + "assignments": [ + 10082 + ], + "declarations": [ + { + "constant": false, + "id": 10082, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 10124, + "src": "12324:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10081, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12324:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10086, + "initialValue": { + "arguments": [ + { + "id": 10084, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10061, + "src": "12357:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10083, + "name": "_skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13797, + "src": "12343:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 10085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12343:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12324:52:55" + }, + { + "assignments": [ + 10088, + null + ], + "declarations": [ + { + "constant": false, + "id": 10088, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10124, + "src": "12388:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10087, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12388:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10091, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10089, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "12412:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 10090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12412:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12387:53:55" + }, + { + "assignments": [ + 10093 + ], + "declarations": [ + { + "constant": false, + "id": 10093, + "mutability": "mutable", + "name": "invariant", + "nodeType": "VariableDeclaration", + "scope": 10124, + "src": "12450:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10092, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12450:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10099, + "initialValue": { + "arguments": [ + { + "id": 10096, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10088, + "src": "12501:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10097, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10070, + "src": "12513:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 10094, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "12470:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "12470:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 10098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12470:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12450:72:55" + }, + { + "condition": { + "id": 10100, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10052, + "src": "12537:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10122, + "nodeType": "Block", + "src": "12677:123:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10114, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10088, + "src": "12725:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10115, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10070, + "src": "12737:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10116, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10076, + "src": "12747:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10117, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10082, + "src": "12756:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10118, + "name": "amountGiven", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10054, + "src": "12766:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10119, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10093, + "src": "12779:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10112, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "12698:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcInGivenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 14519, + "src": "12698:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12698:91:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10065, + "id": 10121, + "nodeType": "Return", + "src": "12691:98:55" + } + ] + }, + "id": 10123, + "nodeType": "IfStatement", + "src": "12533:267:55", + "trueBody": { + "id": 10111, + "nodeType": "Block", + "src": "12548:123:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10103, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10088, + "src": "12596:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10104, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10070, + "src": "12608:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10105, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10076, + "src": "12618:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10106, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10082, + "src": "12627:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10107, + "name": "amountGiven", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10054, + "src": "12637:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10108, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10093, + "src": "12650:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10101, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "12569:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcOutGivenIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 14460, + "src": "12569:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12569:91:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10065, + "id": 10110, + "nodeType": "Return", + "src": "12562:98:55" + } + ] + } + } + ] + }, + "documentation": { + "id": 10050, + "nodeType": "StructuredDocumentation", + "src": "11673:223:55", + "text": " @dev Perform a swap between non-BPT tokens. Scaling and fee adjustments have been performed upstream, so\n all we need to do here is calculate the price quote, depending on the direction of the swap." + }, + "id": 10125, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onRegularSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10062, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10052, + "mutability": "mutable", + "name": "isGivenIn", + "nodeType": "VariableDeclaration", + "scope": 10125, + "src": "11934:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10051, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11934:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10054, + "mutability": "mutable", + "name": "amountGiven", + "nodeType": "VariableDeclaration", + "scope": 10125, + "src": "11958:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10053, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11958:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10057, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10125, + "src": "11987:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11987:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10056, + "nodeType": "ArrayTypeName", + "src": "11987:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10059, + "mutability": "mutable", + "name": "registeredIndexIn", + "nodeType": "VariableDeclaration", + "scope": 10125, + "src": "12032:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10058, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12032:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10061, + "mutability": "mutable", + "name": "registeredIndexOut", + "nodeType": "VariableDeclaration", + "scope": 10125, + "src": "12067:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10060, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12067:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11924:175:55" + }, + "returnParameters": { + "id": 10065, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10064, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10125, + "src": "12122:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10063, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12122:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12121:9:55" + }, + "scope": 11876, + "src": "11901:905:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 10242, + "nodeType": "Block", + "src": "13639:1713:55", + "statements": [ + { + "assignments": [ + 10144 + ], + "declarations": [ + { + "constant": false, + "id": 10144, + "mutability": "mutable", + "name": "isGivenIn", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "13649:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10143, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13649:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 10151, + "initialValue": { + "commonType": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + }, + "id": 10150, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10145, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10128, + "src": "13666:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10146, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "kind", + "nodeType": "MemberAccess", + "referencedDeclaration": 1473, + "src": "13666:16:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 10147, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2021, + "src": "13686:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVault_$2021_$", + "typeString": "type(contract IVault)" + } + }, + "id": 10148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SwapKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 1845, + "src": "13686:15:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_SwapKind_$1845_$", + "typeString": "type(enum IVault.SwapKind)" + } + }, + "id": 10149, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "GIVEN_IN", + "nodeType": "MemberAccess", + "src": "13686:24:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_SwapKind_$1845", + "typeString": "enum IVault.SwapKind" + } + }, + "src": "13666:44:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13649:61:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10153, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10131, + "src": "13735:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10154, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10138, + "src": "13755:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 10152, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "13721:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 10155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13721:49:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10156, + "nodeType": "ExpressionStatement", + "src": "13721:49:55" + }, + { + "expression": { + "id": 10170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 10157, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10128, + "src": "13780:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10159, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "13780:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 10161, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10128, + "src": "13823:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10162, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "13823:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 10163, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10138, + "src": "13855:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10168, + "indexExpression": { + "condition": { + "id": 10164, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10144, + "src": "13870:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 10166, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10135, + "src": "13902:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "13870:50:55", + "trueExpression": { + "id": 10165, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10133, + "src": "13882:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13855:66:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10160, + "name": "_upscale", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3547, + "src": "13801:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13801:130:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13780:151:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10171, + "nodeType": "ExpressionStatement", + "src": "13780:151:55" + }, + { + "assignments": [ + 10173, + 10176, + 10178, + 10180 + ], + "declarations": [ + { + "constant": false, + "id": 10173, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "13956:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10172, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13956:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10176, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "13995:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10174, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13995:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10175, + "nodeType": "ArrayTypeName", + "src": "13995:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10178, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "14034:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10177, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14034:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10180, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "14066:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14066:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10184, + "initialValue": { + "arguments": [ + { + "id": 10182, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10131, + "src": "14123:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 10181, + "name": "_beforeJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10966, + "src": "14107:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory) returns (uint256,uint256[] memory,uint256,uint256)" + } + }, + "id": 10183, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14107:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13942:200:55" + }, + { + "assignments": [ + 10186, + 10188 + ], + "declarations": [ + { + "constant": false, + "id": 10186, + "mutability": "mutable", + "name": "amountCalculated", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "14241:24:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10185, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14241:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10188, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10242, + "src": "14267:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14267:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10218, + "initialValue": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10189, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10135, + "src": "14297:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10190, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "14319:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 10191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14319:13:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14297:35:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 10206, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10144, + "src": "14656:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 10207, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10128, + "src": "14683:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10208, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "14683:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10209, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10176, + "src": "14719:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "id": 10211, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10135, + "src": "14759:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10210, + "name": "_skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13797, + "src": "14745:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 10212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14745:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10213, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10178, + "src": "14796:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10214, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10173, + "src": "14824:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10215, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10180, + "src": "14859:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10205, + "name": "_doExitSwap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10462, + "src": "14627:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bool_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (bool,uint256,uint256[] memory,uint256,uint256,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 10216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14627:266:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "id": 10217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "14297:596:55", + "trueExpression": { + "arguments": [ + { + "id": 10194, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10144, + "src": "14376:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 10195, + "name": "swapRequest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10128, + "src": "14403:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + "id": 10196, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 1479, + "src": "14403:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10197, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10176, + "src": "14439:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "id": 10199, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10133, + "src": "14479:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10198, + "name": "_skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13797, + "src": "14465:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 10200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14465:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10201, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10178, + "src": "14515:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10202, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10173, + "src": "14543:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10203, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10180, + "src": "14578:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10193, + "name": "_doJoinSwap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10286, + "src": "14347:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bool_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (bool,uint256,uint256[] memory,uint256,uint256,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 10204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14347:265:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14240:653:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10220, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10178, + "src": "14947:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10221, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10176, + "src": "14971:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10222, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10180, + "src": "14993:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10223, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10173, + "src": "15027:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10224, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10188, + "src": "15058:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10219, + "name": "_updateInvariantAfterJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12354, + "src": "14904:29:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256)" + } + }, + "id": 10225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14904:182:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10226, + "nodeType": "ExpressionStatement", + "src": "14904:182:55" + }, + { + "expression": { + "condition": { + "id": 10227, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10144, + "src": "15116:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 10235, + "name": "amountCalculated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10186, + "src": "15270:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 10236, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10138, + "src": "15288:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10238, + "indexExpression": { + "id": 10237, + "name": "registeredIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10133, + "src": "15303:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "15288:33:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10234, + "name": "_downscaleUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3681, + "src": "15257:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15257:65:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10240, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "15116:206:55", + "trueExpression": { + "arguments": [ + { + "id": 10229, + "name": "amountCalculated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10186, + "src": "15159:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 10230, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10138, + "src": "15177:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10232, + "indexExpression": { + "id": 10231, + "name": "registeredIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10135, + "src": "15192:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "15177:34:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10228, + "name": "_downscaleDown", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3614, + "src": "15144:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15144:68:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10142, + "id": 10241, + "nodeType": "Return", + "src": "15097:225:55" + } + ] + }, + "documentation": { + "id": 10126, + "nodeType": "StructuredDocumentation", + "src": "12812:571:55", + "text": " @dev Perform a swap involving the BPT token, equivalent to a single-token join or exit. As with the standard\n joins and swaps, we first pay any protocol fees pending from swaps that occurred since the previous join or\n exit, then perform the operation (joinSwap or exitSwap), and finally store the \"post operation\" invariant and\n amp, which establishes the new basis for protocol fees.\n At this point, the scaling factors (including rates) have been computed by the base class, but not yet applied\n to the balances." + }, + "id": 10243, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_swapWithBpt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10139, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10128, + "mutability": "mutable", + "name": "swapRequest", + "nodeType": "VariableDeclaration", + "scope": 10243, + "src": "13419:30:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 10127, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "13419:11:55", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10131, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10243, + "src": "13459:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10129, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13459:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10130, + "nodeType": "ArrayTypeName", + "src": "13459:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10133, + "mutability": "mutable", + "name": "registeredIndexIn", + "nodeType": "VariableDeclaration", + "scope": 10243, + "src": "13504:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10132, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13504:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10135, + "mutability": "mutable", + "name": "registeredIndexOut", + "nodeType": "VariableDeclaration", + "scope": 10243, + "src": "13539:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13539:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10138, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 10243, + "src": "13575:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10136, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13575:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10137, + "nodeType": "ArrayTypeName", + "src": "13575:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "13409:203:55" + }, + "returnParameters": { + "id": 10142, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10141, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10243, + "src": "13630:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10140, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13630:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13629:9:55" + }, + "scope": 11876, + "src": "13388:1964:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 10285, + "nodeType": "Block", + "src": "15868:569:55", + "statements": [ + { + "expression": { + "condition": { + "id": 10266, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10246, + "src": "15897:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 10276, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10248, + "src": "16239:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10277, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10251, + "src": "16267:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10278, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10253, + "src": "16297:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10279, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10255, + "src": "16326:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10280, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10257, + "src": "16358:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10281, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10259, + "src": "16392:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10275, + "name": "_joinSwapExactBptOutForTokenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10419, + "src": "16187:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 10282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16187:243:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "id": 10283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "15897:533:55", + "trueExpression": { + "arguments": [ + { + "id": 10268, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10248, + "src": "15977:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10269, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10251, + "src": "16005:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10270, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10253, + "src": "16035:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10271, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10255, + "src": "16064:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10272, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10257, + "src": "16096:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10273, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10259, + "src": "16130:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10267, + "name": "_joinSwapExactTokenInForBptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "15925:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 10274, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15925:243:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10265, + "id": 10284, + "nodeType": "Return", + "src": "15878:552:55" + } + ] + }, + "documentation": { + "id": 10244, + "nodeType": "StructuredDocumentation", + "src": "15358:233:55", + "text": " @dev This mutates `balances` so that they become the post-joinswap balances. The StableMath interfaces\n are different depending on the swap direction, so we forward to the appropriate low-level join function." + }, + "id": 10286, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_doJoinSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10260, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10246, + "mutability": "mutable", + "name": "isGivenIn", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15626:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10245, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15626:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10248, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15650:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10247, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15650:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10251, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15674:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10249, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15674:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10250, + "nodeType": "ArrayTypeName", + "src": "15674:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10253, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15709:15:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10252, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15709:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10255, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15734:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10254, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15734:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10257, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15762:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10256, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15762:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10259, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15792:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10258, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15792:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15616:210:55" + }, + "returnParameters": { + "id": 10265, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10262, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15850:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10261, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15850:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10264, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10286, + "src": "15859:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10263, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15859:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15849:18:55" + }, + "scope": 11876, + "src": "15596:841:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10360, + "nodeType": "Block", + "src": "16975:714:55", + "statements": [ + { + "assignments": [ + 10311 + ], + "declarations": [ + { + "constant": false, + "id": 10311, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 10360, + "src": "17170:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10309, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17170:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10310, + "nodeType": "ArrayTypeName", + "src": "17170:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10318, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10315, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10292, + "src": "17213:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "17213:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "17199:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 10312, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17203:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10313, + "nodeType": "ArrayTypeName", + "src": "17203:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 10317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17199:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17170:59:55" + }, + { + "expression": { + "id": 10323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10319, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10311, + "src": "17239:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10321, + "indexExpression": { + "id": 10320, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10294, + "src": "17249:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "17239:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10322, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10289, + "src": "17260:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17239:29:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10324, + "nodeType": "ExpressionStatement", + "src": "17239:29:55" + }, + { + "assignments": [ + 10326 + ], + "declarations": [ + { + "constant": false, + "id": 10326, + "mutability": "mutable", + "name": "bptOut", + "nodeType": "VariableDeclaration", + "scope": 10360, + "src": "17279:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17279:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10337, + "initialValue": { + "arguments": [ + { + "id": 10329, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10296, + "src": "17350:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10330, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10292, + "src": "17374:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10331, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10311, + "src": "17396:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10332, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10298, + "src": "17419:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10333, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10300, + "src": "17445:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10334, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "17479:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 10335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17479:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10327, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "17296:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcBptOutGivenExactTokensIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 14752, + "src": "17296:40:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256[] memory,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17296:215:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17279:232:55" + }, + { + "expression": { + "id": 10347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10338, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10292, + "src": "17522:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10340, + "indexExpression": { + "id": 10339, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10294, + "src": "17531:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "17522:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10345, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10289, + "src": "17564:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 10341, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10292, + "src": "17542:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10343, + "indexExpression": { + "id": 10342, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10294, + "src": "17551:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17542:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "17542:21:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17542:31:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17522:51:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10348, + "nodeType": "ExpressionStatement", + "src": "17522:51:55" + }, + { + "assignments": [ + 10350 + ], + "declarations": [ + { + "constant": false, + "id": 10350, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10360, + "src": "17583:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10349, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17583:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10355, + "initialValue": { + "arguments": [ + { + "id": 10353, + "name": "bptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10326, + "src": "17629:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10351, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10298, + "src": "17612:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "17612:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17612:24:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17583:53:55" + }, + { + "expression": { + "components": [ + { + "id": 10356, + "name": "bptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10326, + "src": "17655:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10357, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10350, + "src": "17663:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10358, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17654:28:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10306, + "id": 10359, + "nodeType": "Return", + "src": "17647:35:55" + } + ] + }, + "documentation": { + "id": 10287, + "nodeType": "StructuredDocumentation", + "src": "16443:258:55", + "text": " @dev Since this is a join, we know the tokenOut is BPT. Since it is GivenIn, we know the tokenIn amount,\n and must calculate the BPT amount out.\n We are moving preminted BPT out of the Vault, which increases the virtual supply." + }, + "id": 10361, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_joinSwapExactTokenInForBptOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10301, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10289, + "mutability": "mutable", + "name": "amountIn", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16755:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10288, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16755:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10292, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16781:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10290, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16781:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10291, + "nodeType": "ArrayTypeName", + "src": "16781:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10294, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16816:15:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10293, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16816:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10296, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16841:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10295, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16841:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10298, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16869:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16869:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10300, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16899:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10299, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16899:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16745:188:55" + }, + "returnParameters": { + "id": 10306, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10303, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16957:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16957:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10305, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "16966:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10304, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16966:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16956:18:55" + }, + "scope": 11876, + "src": "16706:983:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10418, + "nodeType": "Block", + "src": "18223:441:55", + "statements": [ + { + "assignments": [ + 10383 + ], + "declarations": [ + { + "constant": false, + "id": 10383, + "mutability": "mutable", + "name": "amountIn", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "18233:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10382, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18233:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10395, + "initialValue": { + "arguments": [ + { + "id": 10386, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10371, + "src": "18305:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10387, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10367, + "src": "18329:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10388, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10369, + "src": "18351:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10389, + "name": "bptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10364, + "src": "18372:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10390, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10373, + "src": "18392:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10391, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10375, + "src": "18418:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10392, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "18452:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 10393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18452:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10384, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "18252:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcTokenInGivenExactBptOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 14870, + "src": "18252:39:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18252:232:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18233:251:55" + }, + { + "expression": { + "id": 10405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10396, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10367, + "src": "18495:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10398, + "indexExpression": { + "id": 10397, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10369, + "src": "18504:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "18495:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10403, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10383, + "src": "18537:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 10399, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10367, + "src": "18515:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10401, + "indexExpression": { + "id": 10400, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10369, + "src": "18524:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "18515:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "18515:21:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18515:31:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "18495:51:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10406, + "nodeType": "ExpressionStatement", + "src": "18495:51:55" + }, + { + "assignments": [ + 10408 + ], + "declarations": [ + { + "constant": false, + "id": 10408, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10418, + "src": "18556:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10407, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18556:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10413, + "initialValue": { + "arguments": [ + { + "id": 10411, + "name": "bptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10364, + "src": "18602:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10409, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10373, + "src": "18585:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "18585:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18585:24:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18556:53:55" + }, + { + "expression": { + "components": [ + { + "id": 10414, + "name": "amountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10383, + "src": "18628:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10415, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10408, + "src": "18638:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10416, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18627:30:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10381, + "id": 10417, + "nodeType": "Return", + "src": "18620:37:55" + } + ] + }, + "documentation": { + "id": 10362, + "nodeType": "StructuredDocumentation", + "src": "17695:256:55", + "text": " @dev Since this is a join, we know the tokenOut is BPT. Since it is GivenOut, we know the BPT amount,\n and must calculate the token amount in.\n We are moving preminted BPT out of the Vault, which increases the virtual supply." + }, + "id": 10419, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_joinSwapExactBptOutForTokenIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10364, + "mutability": "mutable", + "name": "bptOut", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18005:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18005:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10367, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18029:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10365, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18029:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10366, + "nodeType": "ArrayTypeName", + "src": "18029:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10369, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18064:15:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10368, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18064:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10371, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18089:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18089:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10373, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18117:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10372, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18117:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10375, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18147:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10374, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18147:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17995:186:55" + }, + "returnParameters": { + "id": 10381, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10378, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18205:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10377, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18205:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10380, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10419, + "src": "18214:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10379, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18214:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18204:18:55" + }, + "scope": 11876, + "src": "17956:708:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10461, + "nodeType": "Block", + "src": "19179:571:55", + "statements": [ + { + "expression": { + "condition": { + "id": 10442, + "name": "isGivenIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10422, + "src": "19208:9:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 10452, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10424, + "src": "19551:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10453, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10427, + "src": "19579:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10454, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10429, + "src": "19609:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10455, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10431, + "src": "19639:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10456, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10433, + "src": "19671:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10457, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10435, + "src": "19705:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10451, + "name": "_exitSwapExactTokenOutForBptIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10595, + "src": "19499:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 10458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19499:244:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "id": 10459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "19208:535:55", + "trueExpression": { + "arguments": [ + { + "id": 10444, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10424, + "src": "19288:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10445, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10427, + "src": "19316:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10446, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10429, + "src": "19346:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10447, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10431, + "src": "19376:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10448, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10433, + "src": "19408:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10449, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10435, + "src": "19442:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10443, + "name": "_exitSwapExactBptInForTokenOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10520, + "src": "19236:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 10450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19236:244:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10441, + "id": 10460, + "nodeType": "Return", + "src": "19189:554:55" + } + ] + }, + "documentation": { + "id": 10420, + "nodeType": "StructuredDocumentation", + "src": "18670:231:55", + "text": " @dev This mutates balances so that they become the post-exitswap balances. The StableMath interfaces are\n different depending on the swap direction, so we forward to the appropriate low-level exit function." + }, + "id": 10462, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_doExitSwap", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10436, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10422, + "mutability": "mutable", + "name": "isGivenIn", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "18936:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10421, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "18936:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10424, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "18960:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10423, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18960:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10427, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "18984:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10425, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18984:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10426, + "nodeType": "ArrayTypeName", + "src": "18984:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10429, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "19019:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19019:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10431, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "19045:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10430, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19045:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10433, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "19073:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10432, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19073:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10435, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "19103:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10434, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19103:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18926:211:55" + }, + "returnParameters": { + "id": 10441, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10438, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "19161:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19161:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10440, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10462, + "src": "19170:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10439, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19170:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "19160:18:55" + }, + "scope": 11876, + "src": "18906:844:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10519, + "nodeType": "Block", + "src": "20299:453:55", + "statements": [ + { + "assignments": [ + 10484 + ], + "declarations": [ + { + "constant": false, + "id": 10484, + "mutability": "mutable", + "name": "amountOut", + "nodeType": "VariableDeclaration", + "scope": 10519, + "src": "20309:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10483, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20309:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10496, + "initialValue": { + "arguments": [ + { + "id": 10487, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10472, + "src": "20382:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10488, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10468, + "src": "20406:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10489, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10470, + "src": "20428:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10490, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10465, + "src": "20450:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10491, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10474, + "src": "20473:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10492, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10476, + "src": "20499:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10493, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "20533:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 10494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20533:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10485, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "20329:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcTokenOutGivenExactBptIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 15209, + "src": "20329:39:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20329:236:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20309:256:55" + }, + { + "expression": { + "id": 10506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10497, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10468, + "src": "20576:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10499, + "indexExpression": { + "id": 10498, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10470, + "src": "20585:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "20576:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10504, + "name": "amountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10484, + "src": "20620:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 10500, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10468, + "src": "20597:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10502, + "indexExpression": { + "id": 10501, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10470, + "src": "20606:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20597:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "20597:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20597:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20576:54:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10507, + "nodeType": "ExpressionStatement", + "src": "20576:54:55" + }, + { + "assignments": [ + 10509 + ], + "declarations": [ + { + "constant": false, + "id": 10509, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10519, + "src": "20640:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10508, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20640:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10514, + "initialValue": { + "arguments": [ + { + "id": 10512, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10465, + "src": "20686:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10510, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10474, + "src": "20669:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "20669:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20669:27:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20640:56:55" + }, + { + "expression": { + "components": [ + { + "id": 10515, + "name": "amountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10484, + "src": "20715:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10516, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10509, + "src": "20726:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10517, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20714:31:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10482, + "id": 10518, + "nodeType": "Return", + "src": "20707:38:55" + } + ] + }, + "documentation": { + "id": 10463, + "nodeType": "StructuredDocumentation", + "src": "19756:267:55", + "text": " @dev Since this is an exit, we know the tokenIn is BPT. Since it is GivenIn, we know the BPT amount,\n and must calculate the token amount out.\n We are moving BPT out of circulation and into the Vault, which decreases the virtual supply." + }, + "id": 10520, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_exitSwapExactBptInForTokenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10477, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10465, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20077:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10464, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20077:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10468, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20104:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10466, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20104:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10467, + "nodeType": "ArrayTypeName", + "src": "20104:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10470, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20139:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10469, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20139:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10472, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20165:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10471, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20165:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10474, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20193:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10473, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20193:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10476, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20223:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10475, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20223:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "20067:190:55" + }, + "returnParameters": { + "id": 10482, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10479, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20281:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10478, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20281:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10481, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10520, + "src": "20290:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10480, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20290:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "20280:18:55" + }, + "scope": 11876, + "src": "20028:724:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10594, + "nodeType": "Block", + "src": "21305:731:55", + "statements": [ + { + "assignments": [ + 10545 + ], + "declarations": [ + { + "constant": false, + "id": 10545, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 10594, + "src": "21500:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10543, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21500:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10544, + "nodeType": "ArrayTypeName", + "src": "21500:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10552, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10549, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10526, + "src": "21544:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "21544:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10548, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "21530:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 10546, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21534:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10547, + "nodeType": "ArrayTypeName", + "src": "21534:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 10551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21530:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21500:60:55" + }, + { + "expression": { + "id": 10557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10553, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10545, + "src": "21570:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10555, + "indexExpression": { + "id": 10554, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10528, + "src": "21581:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "21570:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10556, + "name": "amountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10523, + "src": "21593:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21570:32:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10558, + "nodeType": "ExpressionStatement", + "src": "21570:32:55" + }, + { + "assignments": [ + 10560 + ], + "declarations": [ + { + "constant": false, + "id": 10560, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 10594, + "src": "21613:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10559, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21613:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10571, + "initialValue": { + "arguments": [ + { + "id": 10563, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10530, + "src": "21687:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10564, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10526, + "src": "21711:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10565, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10545, + "src": "21733:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10566, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10532, + "src": "21757:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10567, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10534, + "src": "21783:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10568, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "21817:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 10569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21817:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10561, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "21633:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcBptInGivenExactTokensOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 15091, + "src": "21633:40:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256[] memory,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 10570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21633:216:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21613:236:55" + }, + { + "expression": { + "id": 10581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10572, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10526, + "src": "21860:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10574, + "indexExpression": { + "id": 10573, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10528, + "src": "21869:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "21860:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 10579, + "name": "amountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10523, + "src": "21904:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 10575, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10526, + "src": "21881:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10577, + "indexExpression": { + "id": 10576, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10528, + "src": "21890:8:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "21881:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "21881:22:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21881:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21860:54:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10582, + "nodeType": "ExpressionStatement", + "src": "21860:54:55" + }, + { + "assignments": [ + 10584 + ], + "declarations": [ + { + "constant": false, + "id": 10584, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10594, + "src": "21924:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10583, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21924:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10589, + "initialValue": { + "arguments": [ + { + "id": 10587, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10560, + "src": "21970:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10585, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10532, + "src": "21953:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "21953:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21953:27:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21924:56:55" + }, + { + "expression": { + "components": [ + { + "id": 10590, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10560, + "src": "21999:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10591, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10584, + "src": "22010:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10592, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21998:31:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10540, + "id": 10593, + "nodeType": "Return", + "src": "21991:38:55" + } + ] + }, + "documentation": { + "id": 10521, + "nodeType": "StructuredDocumentation", + "src": "20758:271:55", + "text": " @dev Since this is an exit, we know the tokenIn is BPT. Since it is GivenOut, we know the token amount out,\n and must calculate the BPT amount in.\n We are moving BPT out of circulation and into the Vault, which decreases the virtual supply." + }, + "id": 10595, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_exitSwapExactTokenOutForBptIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10535, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10523, + "mutability": "mutable", + "name": "amountOut", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21083:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21083:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10526, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21110:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10524, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21110:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10525, + "nodeType": "ArrayTypeName", + "src": "21110:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10528, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21145:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10527, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21145:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10530, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21171:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10529, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21171:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10532, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21199:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10531, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21199:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10534, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21229:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10533, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21229:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "21073:190:55" + }, + "returnParameters": { + "id": 10540, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10537, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21287:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10536, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21287:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10539, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10595, + "src": "21296:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10538, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21296:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "21286:18:55" + }, + "scope": 11876, + "src": "21034:1002:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3338 + ], + "body": { + "id": 10711, + "nodeType": "Block", + "src": "22801:1771:55", + "statements": [ + { + "assignments": [ + 10619 + ], + "declarations": [ + { + "constant": false, + "id": 10619, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "22811:32:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "typeName": { + "id": 10618, + "name": "StablePoolUserData.JoinKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 35, + "src": "22811:27:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "visibility": "internal" + } + ], + "id": 10623, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 10620, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10607, + "src": "22846:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "joinKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 54, + "src": "22846:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_enum$_JoinKind_$35_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (enum StablePoolUserData.JoinKind)" + } + }, + "id": 10622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22846:19:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22811:54:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "id": 10629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10625, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10619, + "src": "22884:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 10626, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "22892:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 10627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "JoinKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "22892:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + "id": 10628, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "INIT", + "nodeType": "MemberAccess", + "src": "22892:32:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "src": "22884:40:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 10630, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "22926:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 10631, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNINITIALIZED", + "nodeType": "MemberAccess", + "referencedDeclaration": 596, + "src": "22926:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10624, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "22875:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 10632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22875:72:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10633, + "nodeType": "ExpressionStatement", + "src": "22875:72:55" + }, + { + "assignments": [ + 10638 + ], + "declarations": [ + { + "constant": false, + "id": 10638, + "mutability": "mutable", + "name": "amountsInIncludingBpt", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "23061:38:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10636, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23061:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10637, + "nodeType": "ArrayTypeName", + "src": "23061:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10642, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 10639, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10607, + "src": "23102:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "initialAmountsIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 91, + "src": "23102:25:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256[] memory)" + } + }, + "id": 10641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23102:27:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23061:68:55" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 10646, + "name": "amountsInIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10638, + "src": "23175:21:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "23175:28:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10648, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10605, + "src": "23205:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "23205:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10643, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "23139:12:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 10645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "23139:35:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 10650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23139:88:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10651, + "nodeType": "ExpressionStatement", + "src": "23139:88:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10653, + "name": "amountsInIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10638, + "src": "23251:21:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10654, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10605, + "src": "23274:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 10652, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "23237:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 10655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23237:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10656, + "nodeType": "ExpressionStatement", + "src": "23237:52:55" + }, + { + "assignments": [ + 10658, + null + ], + "declarations": [ + { + "constant": false, + "id": 10658, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "23301:11:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10657, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23301:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10661, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10659, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "23318:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 10660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23318:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23300:46:55" + }, + { + "assignments": [ + 10666 + ], + "declarations": [ + { + "constant": false, + "id": 10666, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "23356:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10664, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23356:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10665, + "nodeType": "ArrayTypeName", + "src": "23356:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10670, + "initialValue": { + "arguments": [ + { + "id": 10668, + "name": "amountsInIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10638, + "src": "23398:21:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 10667, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "23385:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 10669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23385:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23356:64:55" + }, + { + "assignments": [ + 10672 + ], + "declarations": [ + { + "constant": false, + "id": 10672, + "mutability": "mutable", + "name": "invariantAfterJoin", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "23430:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10671, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23430:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10678, + "initialValue": { + "arguments": [ + { + "id": 10675, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10658, + "src": "23490:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10676, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10666, + "src": "23495:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 10673, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "23459:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "23459:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 10677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23459:46:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23430:75:55" + }, + { + "assignments": [ + 10680 + ], + "declarations": [ + { + "constant": false, + "id": 10680, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "23577:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10679, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23577:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10682, + "initialValue": { + "id": 10681, + "name": "invariantAfterJoin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10672, + "src": "23600:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23577:41:55" + }, + { + "assignments": [ + 10684 + ], + "declarations": [ + { + "constant": false, + "id": 10684, + "mutability": "mutable", + "name": "initialBpt", + "nodeType": "VariableDeclaration", + "scope": 10711, + "src": "24211:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10683, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24211:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10689, + "initialValue": { + "arguments": [ + { + "id": 10687, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10680, + "src": "24261:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10685, + "name": "_PREMINTED_TOKEN_BALANCE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9720, + "src": "24232:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "24232:28:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10688, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24232:42:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24211:63:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10691, + "name": "sender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "24301:6:55", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10692, + "name": "initialBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10684, + "src": "24309:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10690, + "name": "_mintPoolTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2216, + "src": "24285:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 10693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24285:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10694, + "nodeType": "ExpressionStatement", + "src": "24285:35:55" + }, + { + "expression": { + "id": 10700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10695, + "name": "amountsInIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10638, + "src": "24330:21:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10698, + "indexExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10696, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "24352:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 10697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24352:13:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "24330:36:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10699, + "name": "initialBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10684, + "src": "24369:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "24330:49:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10701, + "nodeType": "ExpressionStatement", + "src": "24330:49:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10703, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10658, + "src": "24486:3:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10704, + "name": "invariantAfterJoin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10672, + "src": "24491:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10702, + "name": "_updatePostJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12382, + "src": "24466:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 10705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24466:44:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10706, + "nodeType": "ExpressionStatement", + "src": "24466:44:55" + }, + { + "expression": { + "components": [ + { + "id": 10707, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10680, + "src": "24529:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10708, + "name": "amountsInIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10638, + "src": "24543:21:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 10709, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "24528:37:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10615, + "id": 10710, + "nodeType": "Return", + "src": "24521:44:55" + } + ] + }, + "documentation": { + "id": 10596, + "nodeType": "StructuredDocumentation", + "src": "22061:518:55", + "text": " Since this Pool has preminted BPT which is stored in the Vault, it cannot simply be minted at construction.\n We take advantage of the fact that StablePools have an initialization step where BPT is minted to the first\n account joining them, and perform both actions at once. By minting the entire BPT supply for the initial joiner\n and then pulling all tokens except those due the joiner, we arrive at the desired state of the Pool holding all\n BPT except the joiner's." + }, + "id": 10712, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onInitializePool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10609, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "22756:8:55" + }, + "parameters": { + "id": 10608, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10598, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22620:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10597, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "22620:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10600, + "mutability": "mutable", + "name": "sender", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22637:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10599, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22637:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10602, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22661:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10601, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22661:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10605, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22678:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10603, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22678:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10604, + "nodeType": "ArrayTypeName", + "src": "22678:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10607, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22719:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10606, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "22719:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "22610:136:55" + }, + "returnParameters": { + "id": 10615, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10611, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22774:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10610, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22774:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10614, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10712, + "src": "22783:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10612, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22783:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10613, + "nodeType": "ArrayTypeName", + "src": "22783:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "22773:27:55" + }, + "scope": 11876, + "src": "22584:1988:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3365 + ], + "body": { + "id": 10747, + "nodeType": "Block", + "src": "24985:91:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "74727565", + "id": 10741, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25018:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 10742, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10722, + "src": "25024:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10743, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10729, + "src": "25044:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10744, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10731, + "src": "25060:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 10740, + "name": "_onJoinExitPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10905, + "src": "25002:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bool,uint256[] memory,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 10745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25002:67:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10739, + "id": 10746, + "nodeType": "Return", + "src": "24995:74:55" + } + ] + }, + "documentation": { + "id": 10713, + "nodeType": "StructuredDocumentation", + "src": "24578:119:55", + "text": " @dev Base pool hook called from `onJoinPool`. Forward to `onJoinExitPool` with `isJoin` set to true." + }, + "id": 10748, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onJoinPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10733, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "24940:8:55" + }, + "parameters": { + "id": 10732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10715, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24732:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10714, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "24732:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10717, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24749:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10716, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "24749:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10719, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24766:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10718, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "24766:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10722, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24783:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10720, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24783:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10721, + "nodeType": "ArrayTypeName", + "src": "24783:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10724, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24828:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10723, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24828:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10726, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24845:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10725, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24845:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10729, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24862:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10727, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24862:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10728, + "nodeType": "ArrayTypeName", + "src": "24862:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10731, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24903:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10730, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "24903:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "24722:208:55" + }, + "returnParameters": { + "id": 10739, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10735, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24958:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10734, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24958:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10738, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10748, + "src": "24967:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10736, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24967:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10737, + "nodeType": "ArrayTypeName", + "src": "24967:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "24957:27:55" + }, + "scope": 11876, + "src": "24702:374:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3392 + ], + "body": { + "id": 10783, + "nodeType": "Block", + "src": "25554:92:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "66616c7365", + "id": 10777, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25587:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 10778, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10758, + "src": "25594:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10779, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10765, + "src": "25614:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10780, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10767, + "src": "25630:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 10776, + "name": "_onJoinExitPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10905, + "src": "25571:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bool,uint256[] memory,uint256[] memory,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 10781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25571:68:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10775, + "id": 10782, + "nodeType": "Return", + "src": "25564:75:55" + } + ] + }, + "documentation": { + "id": 10749, + "nodeType": "StructuredDocumentation", + "src": "25082:184:55", + "text": " @dev Base pool hook called from `onExitPool`. Forward to `onJoinExitPool` with `isJoin` set to false.\n Note that recovery mode exits do not call `_onExitPool`." + }, + "id": 10784, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onExitPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 10769, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "25509:8:55" + }, + "parameters": { + "id": 10768, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10751, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25301:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 10750, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "25301:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10753, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25318:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10752, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25318:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10755, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25335:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10754, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25335:7:55", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10758, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25352:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10756, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25352:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10757, + "nodeType": "ArrayTypeName", + "src": "25352:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10760, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25397:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10759, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25397:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10762, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25414:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10761, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25414:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10765, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25431:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10763, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25431:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10764, + "nodeType": "ArrayTypeName", + "src": "25431:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10767, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25472:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10766, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "25472:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "25291:208:55" + }, + "returnParameters": { + "id": 10775, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10771, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25527:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10770, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25527:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10774, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10784, + "src": "25536:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10772, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25536:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10773, + "nodeType": "ArrayTypeName", + "src": "25536:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "25526:27:55" + }, + "scope": 11876, + "src": "25271:375:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10904, + "nodeType": "Block", + "src": "26039:1757:55", + "statements": [ + { + "assignments": [ + 10804, + 10807, + 10809, + 10811 + ], + "declarations": [ + { + "constant": false, + "id": 10804, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26063:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26063:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10807, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26102:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10805, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26102:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10806, + "nodeType": "ArrayTypeName", + "src": "26102:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10809, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26141:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10808, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26141:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10811, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26173:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26173:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10815, + "initialValue": { + "arguments": [ + { + "id": 10813, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10790, + "src": "26230:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 10812, + "name": "_beforeJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10966, + "src": "26214:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory) returns (uint256,uint256[] memory,uint256,uint256)" + } + }, + "id": 10814, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26214:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26049:200:55" + }, + { + "assignments": [ + 10838 + ], + "declarations": [ + { + "constant": false, + "id": 10838, + "mutability": "mutable", + "name": "_doJoinOrExit", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26265:197:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[],uint256,uint256,uint256,uint256[],bytes) view returns (uint256,uint256[])" + }, + "typeName": { + "id": 10837, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 10830, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10818, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26274:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10816, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26274:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10817, + "nodeType": "ArrayTypeName", + "src": "26274:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10820, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26292:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10819, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26292:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10822, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26301:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26301:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10824, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26310:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10823, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26310:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10827, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26319:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10825, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26319:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10826, + "nodeType": "ArrayTypeName", + "src": "26319:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10829, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26337:12:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10828, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "26337:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "26273:77:55" + }, + "returnParameterTypes": { + "id": 10836, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10832, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26422:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10831, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26422:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10835, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10837, + "src": "26431:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10833, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26431:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10834, + "nodeType": "ArrayTypeName", + "src": "26431:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "26421:27:55" + }, + "src": "26265:197:55", + "stateMutability": "view", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[],uint256,uint256,uint256,uint256[],bytes) view returns (uint256,uint256[])" + }, + "visibility": "internal" + }, + "visibility": "internal" + } + ], + "id": 10844, + "initialValue": { + "components": [ + { + "condition": { + "id": 10839, + "name": "isJoin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10787, + "src": "26475:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 10841, + "name": "_doExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11315, + "src": "26494:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 10842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "26475:26:55", + "trueExpression": { + "id": 10840, + "name": "_doJoin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11048, + "src": "26484:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + } + ], + "id": 10843, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "26474:28:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26265:237:55" + }, + { + "assignments": [ + 10846, + 10849 + ], + "declarations": [ + { + "constant": false, + "id": 10846, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26514:17:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10845, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26514:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10849, + "mutability": "mutable", + "name": "amountsDelta", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26533:29:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10847, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26533:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10848, + "nodeType": "ArrayTypeName", + "src": "26533:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10858, + "initialValue": { + "arguments": [ + { + "id": 10851, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10807, + "src": "26593:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10852, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10809, + "src": "26615:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10853, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10804, + "src": "26639:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10854, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "26670:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10855, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10793, + "src": "26704:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10856, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10795, + "src": "26732:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 10850, + "name": "_doJoinOrExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10838, + "src": "26566:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 10857, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26566:184:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26513:237:55" + }, + { + "assignments": [ + 10868 + ], + "declarations": [ + { + "constant": false, + "id": 10868, + "mutability": "mutable", + "name": "_addOrSub", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "26911:68:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + }, + "typeName": { + "id": 10867, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 10863, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10860, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10867, + "src": "26920:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10859, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26920:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10862, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10867, + "src": "26929:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10861, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26929:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26919:18:55" + }, + "returnParameterTypes": { + "id": 10866, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10865, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10867, + "src": "26961:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10864, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26961:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26960:9:55" + }, + "src": "26911:68:55", + "stateMutability": "pure", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + }, + "visibility": "internal" + }, + "visibility": "internal" + } + ], + "id": 10875, + "initialValue": { + "condition": { + "id": 10869, + "name": "isJoin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10787, + "src": "26982:6:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "expression": { + "id": 10872, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "27008:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 10873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "27008:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "26982:40:55", + "trueExpression": { + "expression": { + "id": 10870, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "26991:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 10871, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "26991:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26911:111:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10877, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10807, + "src": "27047:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10878, + "name": "amountsDelta", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10849, + "src": "27057:12:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10879, + "name": "_addOrSub", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10868, + "src": "27071:9:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + ], + "id": 10876, + "name": "_mutateAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11856, + "src": "27032:14:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory,function (uint256,uint256) pure returns (uint256)) pure" + } + }, + "id": 10880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27032:49:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10881, + "nodeType": "ExpressionStatement", + "src": "27032:49:55" + }, + { + "assignments": [ + 10883 + ], + "declarations": [ + { + "constant": false, + "id": 10883, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10904, + "src": "27091:26:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10882, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27091:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10888, + "initialValue": { + "arguments": [ + { + "id": 10885, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10804, + "src": "27130:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10886, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10846, + "src": "27149:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10884, + "name": "_addOrSub", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10868, + "src": "27120:9:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10887, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27120:39:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27091:68:55" + }, + { + "expression": { + "arguments": [ + { + "id": 10890, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10809, + "src": "27377:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10891, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10807, + "src": "27401:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10892, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "27423:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10893, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10804, + "src": "27457:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10894, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10883, + "src": "27488:18:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10889, + "name": "_updateInvariantAfterJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12354, + "src": "27334:29:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256)" + } + }, + "id": 10895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27334:182:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10896, + "nodeType": "ExpressionStatement", + "src": "27334:182:55" + }, + { + "expression": { + "components": [ + { + "id": 10897, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10846, + "src": "27749:9:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 10899, + "name": "amountsDelta", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10849, + "src": "27772:12:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "hexValue": "30", + "id": 10900, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27786:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10898, + "name": "_addBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13970, + "src": "27760:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256) view returns (uint256[] memory)" + } + }, + "id": 10901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27760:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 10902, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "27748:41:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10802, + "id": 10903, + "nodeType": "Return", + "src": "27741:48:55" + } + ] + }, + "documentation": { + "id": 10785, + "nodeType": "StructuredDocumentation", + "src": "25652:168:55", + "text": " @dev Pay protocol fees before the operation, and call `_updateInvariantAfterJoinExit` afterward, to establish\n the new basis for protocol fees." + }, + "id": 10905, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onJoinExitPool", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10796, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10787, + "mutability": "mutable", + "name": "isJoin", + "nodeType": "VariableDeclaration", + "scope": 10905, + "src": "25859:11:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10786, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "25859:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10790, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10905, + "src": "25880:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10788, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25880:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10789, + "nodeType": "ArrayTypeName", + "src": "25880:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10793, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 10905, + "src": "25925:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10791, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25925:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10792, + "nodeType": "ArrayTypeName", + "src": "25925:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10795, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 10905, + "src": "25966:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10794, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "25966:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "25849:144:55" + }, + "returnParameters": { + "id": 10802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10798, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10905, + "src": "26012:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10797, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26012:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10801, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10905, + "src": "26021:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10799, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26021:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10800, + "nodeType": "ArrayTypeName", + "src": "26021:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "26011:27:55" + }, + "scope": 11876, + "src": "25825:1971:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10965, + "nodeType": "Block", + "src": "28120:886:55", + "statements": [ + { + "assignments": [ + 10922, + 10924 + ], + "declarations": [ + { + "constant": false, + "id": 10922, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28131:23:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10921, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28131:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10924, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28156:33:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10923, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28156:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10927, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10925, + "name": "getLastJoinExitData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12411, + "src": "28193:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256,uint256)" + } + }, + "id": 10926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28193:21:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28130:84:55" + }, + { + "assignments": [ + 10929, + 10932, + 10934 + ], + "declarations": [ + { + "constant": false, + "id": 10929, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28238:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10928, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28238:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10932, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28277:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10930, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28277:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10931, + "nodeType": "ArrayTypeName", + "src": "28277:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10934, + "mutability": "mutable", + "name": "oldAmpPreJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28316:34:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10933, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28316:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10940, + "initialValue": { + "arguments": [ + { + "id": 10936, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10909, + "src": "28394:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10937, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10922, + "src": "28414:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10938, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10924, + "src": "28431:25:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10935, + "name": "_payProtocolFeesBeforeJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12108, + "src": "28363:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256,uint256) returns (uint256,uint256[] memory,uint256)" + } + }, + "id": 10939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28363:94:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28224:233:55" + }, + { + "assignments": [ + 10942, + null + ], + "declarations": [ + { + "constant": false, + "id": 10942, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28688:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10941, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28688:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10945, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10943, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "28712:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 10944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28712:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28687:53:55" + }, + { + "assignments": [ + 10947 + ], + "declarations": [ + { + "constant": false, + "id": 10947, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 10965, + "src": "28750:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10946, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28750:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10958, + "initialValue": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10948, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10942, + "src": "28781:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 10949, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10922, + "src": "28795:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28781:29:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 10954, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10942, + "src": "28897:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10955, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10932, + "src": "28909:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 10952, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "28866:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 10953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "28866:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 10956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28866:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "28781:137:55", + "trueExpression": { + "id": 10951, + "name": "oldAmpPreJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10934, + "src": "28825:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28750:168:55" + }, + { + "expression": { + "components": [ + { + "id": 10959, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10929, + "src": "28937:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10960, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10932, + "src": "28956:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 10961, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10942, + "src": "28966:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10962, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10947, + "src": "28978:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10963, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "28936:63:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256,uint256)" + } + }, + "functionReturnParameters": 10920, + "id": 10964, + "nodeType": "Return", + "src": "28929:70:55" + } + ] + }, + "documentation": { + "id": 10906, + "nodeType": "StructuredDocumentation", + "src": "27802:110:55", + "text": " @dev Pay any due protocol fees and calculate values necessary for performing the join/exit." + }, + "id": 10966, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10910, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10909, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 10966, + "src": "27942:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10907, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27942:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10908, + "nodeType": "ArrayTypeName", + "src": "27942:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "27941:37:55" + }, + "returnParameters": { + "id": 10920, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10912, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10966, + "src": "28026:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10911, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28026:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10915, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10966, + "src": "28047:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10913, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28047:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10914, + "nodeType": "ArrayTypeName", + "src": "28047:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10917, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10966, + "src": "28077:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10916, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28077:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10919, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10966, + "src": "28098:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10918, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28098:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "28012:103:55" + }, + "scope": 11876, + "src": "27917:1089:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11047, + "nodeType": "Block", + "src": "29394:902:55", + "statements": [ + { + "assignments": [ + 10992 + ], + "declarations": [ + { + "constant": false, + "id": 10992, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 11047, + "src": "29404:32:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "typeName": { + "id": 10991, + "name": "StablePoolUserData.JoinKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 35, + "src": "29404:27:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "visibility": "internal" + } + ], + "id": 10996, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 10993, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10981, + "src": "29439:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "joinKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 54, + "src": "29439:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_enum$_JoinKind_$35_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (enum StablePoolUserData.JoinKind)" + } + }, + "id": 10995, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29439:19:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "29404:54:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "id": 11001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10997, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10992, + "src": "29472:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 10998, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "29480:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 10999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "JoinKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "29480:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + "id": 11000, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "EXACT_TOKENS_IN_FOR_BPT_OUT", + "nodeType": "MemberAccess", + "src": "29480:55:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "src": "29472:63:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "id": 11016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11012, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10992, + "src": "29849:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 11013, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "29857:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 11014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "JoinKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "29857:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + "id": 11015, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ALL_TOKENS_IN_FOR_EXACT_BPT_OUT", + "nodeType": "MemberAccess", + "src": "29857:59:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "src": "29849:67:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + }, + "id": 11028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11024, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10992, + "src": "30029:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 11025, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "30037:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 11026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "JoinKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "30037:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_JoinKind_$35_$", + "typeString": "type(enum StablePoolUserData.JoinKind)" + } + }, + "id": 11027, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "TOKEN_IN_FOR_EXACT_BPT_OUT", + "nodeType": "MemberAccess", + "src": "30037:54:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_JoinKind_$35", + "typeString": "enum StablePoolUserData.JoinKind" + } + }, + "src": "30029:62:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 11043, + "nodeType": "Block", + "src": "30230:60:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 11039, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "30252:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 11040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNHANDLED_JOIN_KIND", + "nodeType": "MemberAccess", + "referencedDeclaration": 644, + "src": "30252:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11038, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "30244:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 11041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30244:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11042, + "nodeType": "ExpressionStatement", + "src": "30244:35:55" + } + ] + }, + "id": 11044, + "nodeType": "IfStatement", + "src": "30025:265:55", + "trueBody": { + "id": 11037, + "nodeType": "Block", + "src": "30093:131:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11030, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10974, + "src": "30141:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11031, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10976, + "src": "30160:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11032, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10972, + "src": "30182:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11033, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10970, + "src": "30194:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11034, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10981, + "src": "30204:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11029, + "name": "_joinTokenInForExactBPTOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11233, + "src": "30114:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 11035, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30114:99:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10988, + "id": 11036, + "nodeType": "Return", + "src": "30107:106:55" + } + ] + } + }, + "id": 11045, + "nodeType": "IfStatement", + "src": "29845:445:55", + "trueBody": { + "id": 11023, + "nodeType": "Block", + "src": "29918:101:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11018, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10974, + "src": "29970:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11019, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10970, + "src": "29989:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11020, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10981, + "src": "29999:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11017, + "name": "_joinAllTokensInForExactBptOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11087, + "src": "29939:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256,uint256[] memory,bytes memory) pure returns (uint256,uint256[] memory)" + } + }, + "id": 11021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29939:69:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10988, + "id": 11022, + "nodeType": "Return", + "src": "29932:76:55" + } + ] + } + }, + "id": 11046, + "nodeType": "IfStatement", + "src": "29468:822:55", + "trueBody": { + "id": 11011, + "nodeType": "Block", + "src": "29537:302:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11003, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10974, + "src": "29623:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11004, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10976, + "src": "29662:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11005, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10972, + "src": "29704:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11006, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10970, + "src": "29736:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11007, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10979, + "src": "29766:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11008, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10981, + "src": "29802:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11002, + "name": "_joinExactTokensInForBPTOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11163, + "src": "29574:27:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256,uint256,uint256,uint256[] memory,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 11009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29574:254:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 10988, + "id": 11010, + "nodeType": "Return", + "src": "29551:277:55" + } + ] + } + } + ] + }, + "documentation": { + "id": 10967, + "nodeType": "StructuredDocumentation", + "src": "29012:96:55", + "text": " @dev Support single- and multi-token joins, plus explicit proportional joins." + }, + "id": 11048, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_doJoin", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10982, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10970, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29139:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10968, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29139:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10969, + "nodeType": "ArrayTypeName", + "src": "29139:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10972, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29174:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10971, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29174:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10974, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29202:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10973, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29202:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10976, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29237:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10975, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29237:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10979, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29275:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10977, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29275:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10978, + "nodeType": "ArrayTypeName", + "src": "29275:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10981, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29316:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10980, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "29316:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "29129:214:55" + }, + "returnParameters": { + "id": 10988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10984, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29367:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10983, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29367:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10987, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11048, + "src": "29376:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29376:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10986, + "nodeType": "ArrayTypeName", + "src": "29376:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "29366:27:55" + }, + "scope": 11876, + "src": "29113:1183:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11086, + "nodeType": "Block", + "src": "30559:236:55", + "statements": [ + { + "assignments": [ + 11065 + ], + "declarations": [ + { + "constant": false, + "id": 11065, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 11086, + "src": "30569:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11064, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30569:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11069, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11066, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11056, + "src": "30592:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11067, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "allTokensInForExactBptOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 163, + "src": "30592:34:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256)" + } + }, + "id": 11068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30592:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "30569:59:55" + }, + { + "assignments": [ + 11074 + ], + "declarations": [ + { + "constant": false, + "id": 11074, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 11086, + "src": "30638:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11072, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30638:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11073, + "nodeType": "ArrayTypeName", + "src": "30638:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11081, + "initialValue": { + "arguments": [ + { + "id": 11077, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11054, + "src": "30708:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11078, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11065, + "src": "30718:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11079, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11051, + "src": "30732:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11075, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "30667:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_computeProportionalAmountsIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 15486, + "src": "30667:40:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)" + } + }, + "id": 11080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30667:78:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "30638:107:55" + }, + { + "expression": { + "components": [ + { + "id": 11082, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11065, + "src": "30764:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11083, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11074, + "src": "30778:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11084, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "30763:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11063, + "id": 11085, + "nodeType": "Return", + "src": "30756:32:55" + } + ] + }, + "documentation": { + "id": 11049, + "nodeType": "StructuredDocumentation", + "src": "30302:61:55", + "text": " @dev Proportional join. Pays no swap fees." + }, + "id": 11087, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_joinAllTokensInForExactBptOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11051, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "30417:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11050, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30417:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11054, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "30447:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11052, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30447:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11053, + "nodeType": "ArrayTypeName", + "src": "30447:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11056, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "30482:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11055, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "30482:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "30407:102:55" + }, + "returnParameters": { + "id": 11063, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11059, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "30532:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11058, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30532:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11062, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11087, + "src": "30541:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11060, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30541:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11061, + "nodeType": "ArrayTypeName", + "src": "30541:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "30531:27:55" + }, + "scope": 11876, + "src": "30368:427:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11162, + "nodeType": "Block", + "src": "31201:694:55", + "statements": [ + { + "assignments": [ + 11114, + 11116 + ], + "declarations": [ + { + "constant": false, + "id": 11114, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 11162, + "src": "31212:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31212:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11113, + "nodeType": "ArrayTypeName", + "src": "31212:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11116, + "mutability": "mutable", + "name": "minBPTAmountOut", + "nodeType": "VariableDeclaration", + "scope": 11162, + "src": "31240:23:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11115, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31240:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11120, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11117, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11102, + "src": "31267:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "exactTokensInForBptOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 118, + "src": "31267:31:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256[] memory,uint256)" + } + }, + "id": 11119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31267:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(uint256[] memory,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "31211:89:55" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 11124, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11097, + "src": "31346:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "31346:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 11126, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "31363:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "31363:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11121, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "31310:12:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 11123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "31310:35:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 11128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31310:70:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11129, + "nodeType": "ExpressionStatement", + "src": "31310:70:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11131, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "31477:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "id": 11133, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11100, + "src": "31501:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11132, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "31488:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 11134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31488:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11130, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "31463:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 11135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31463:54:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11136, + "nodeType": "ExpressionStatement", + "src": "31463:54:55" + }, + { + "assignments": [ + 11138 + ], + "declarations": [ + { + "constant": false, + "id": 11138, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 11162, + "src": "31528:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11137, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31528:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11149, + "initialValue": { + "arguments": [ + { + "id": 11141, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11094, + "src": "31605:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11142, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11097, + "src": "31629:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11143, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "31651:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11144, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11090, + "src": "31674:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11145, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11092, + "src": "31700:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11146, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "31734:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 11147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31734:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11139, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "31551:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcBptOutGivenExactTokensIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 14752, + "src": "31551:40:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256[] memory,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 11148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31551:215:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "31528:238:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11151, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11138, + "src": "31786:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 11152, + "name": "minBPTAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11116, + "src": "31802:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "31786:31:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 11154, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "31819:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 11155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "BPT_OUT_MIN_AMOUNT", + "nodeType": "MemberAccess", + "referencedDeclaration": 602, + "src": "31819:25:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11150, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "31777:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 11156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31777:68:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11157, + "nodeType": "ExpressionStatement", + "src": "31777:68:55" + }, + { + "expression": { + "components": [ + { + "id": 11158, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11138, + "src": "31864:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11159, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11114, + "src": "31878:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11160, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "31863:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11109, + "id": 11161, + "nodeType": "Return", + "src": "31856:32:55" + } + ] + }, + "documentation": { + "id": 11088, + "nodeType": "StructuredDocumentation", + "src": "30801:100:55", + "text": " @dev Multi-token join. Joins with proportional amounts will pay no protocol fees." + }, + "id": 11163, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_joinExactTokensInForBPTOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11103, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11090, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "30952:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11089, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30952:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11092, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "30982:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11091, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30982:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11094, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "31020:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11093, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31020:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11097, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "31048:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11095, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31048:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11096, + "nodeType": "ArrayTypeName", + "src": "31048:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11100, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "31083:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11098, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31083:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11099, + "nodeType": "ArrayTypeName", + "src": "31083:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11102, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "31124:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11101, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "31124:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "30942:209:55" + }, + "returnParameters": { + "id": 11109, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11105, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "31174:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11104, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31174:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11108, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11163, + "src": "31183:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11106, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31183:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11107, + "nodeType": "ArrayTypeName", + "src": "31183:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "31173:27:55" + }, + "scope": 11876, + "src": "30906:989:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11232, + "nodeType": "Block", + "src": "32246:968:55", + "statements": [ + { + "assignments": [ + 11184, + 11186 + ], + "declarations": [ + { + "constant": false, + "id": 11184, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 11232, + "src": "32359:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32359:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11186, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 11232, + "src": "32381:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11185, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32381:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11190, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11187, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11175, + "src": "32403:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenInForExactBptOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 143, + "src": "32403:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256,uint256)" + } + }, + "id": 11189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32403:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "32358:77:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11192, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11186, + "src": "32630:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 11193, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11173, + "src": "32643:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "32643:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "32630:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 11196, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "32660:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 11197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "32660:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11191, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "32621:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 11198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32621:60:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11199, + "nodeType": "ExpressionStatement", + "src": "32621:60:55" + }, + { + "assignments": [ + 11204 + ], + "declarations": [ + { + "constant": false, + "id": 11204, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 11232, + "src": "32768:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11202, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32768:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11203, + "nodeType": "ArrayTypeName", + "src": "32768:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11211, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 11208, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11173, + "src": "32811:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "32811:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "32797:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 11205, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32801:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11206, + "nodeType": "ArrayTypeName", + "src": "32801:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 11210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32797:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "32768:59:55" + }, + { + "expression": { + "id": 11226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11212, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11204, + "src": "32899:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11214, + "indexExpression": { + "id": 11213, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11186, + "src": "32909:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "32899:21:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 11217, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11170, + "src": "32976:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11218, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11173, + "src": "33000:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11219, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11186, + "src": "33022:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11220, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11184, + "src": "33046:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11221, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11166, + "src": "33072:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11222, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11168, + "src": "33098:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11223, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "33132:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 11224, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "33132:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11215, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "32923:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcTokenInGivenExactBptOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 14870, + "src": "32923:39:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 11225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "32923:241:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "32899:265:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11227, + "nodeType": "ExpressionStatement", + "src": "32899:265:55" + }, + { + "expression": { + "components": [ + { + "id": 11228, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11184, + "src": "33183:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11229, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11204, + "src": "33197:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11230, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "33182:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11182, + "id": 11231, + "nodeType": "Return", + "src": "33175:32:55" + } + ] + }, + "documentation": { + "id": 11164, + "nodeType": "StructuredDocumentation", + "src": "31901:87:55", + "text": " @dev Single-token join, equivalent to swapping a pool token for BPT." + }, + "id": 11233, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_joinTokenInForExactBPTOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11176, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11166, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32038:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11165, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32038:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11168, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32068:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32068:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11170, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32106:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11169, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32106:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11173, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32134:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11171, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32134:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11172, + "nodeType": "ArrayTypeName", + "src": "32134:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11175, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32169:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11174, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "32169:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "32028:168:55" + }, + "returnParameters": { + "id": 11182, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11178, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32219:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11177, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32219:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11181, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11233, + "src": "32228:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "32228:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11180, + "nodeType": "ArrayTypeName", + "src": "32228:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "32218:27:55" + }, + "scope": 11876, + "src": "31993:1221:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11314, + "nodeType": "Block", + "src": "33668:903:55", + "statements": [ + { + "assignments": [ + 11259 + ], + "declarations": [ + { + "constant": false, + "id": 11259, + "mutability": "mutable", + "name": "kind", + "nodeType": "VariableDeclaration", + "scope": 11314, + "src": "33678:32:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + }, + "typeName": { + "id": 11258, + "name": "StablePoolUserData.ExitKind", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 39, + "src": "33678:27:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "visibility": "internal" + } + ], + "id": 11263, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11260, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11248, + "src": "33713:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "exitKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 69, + "src": "33713:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_enum$_ExitKind_$39_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (enum StablePoolUserData.ExitKind)" + } + }, + "id": 11262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "33713:19:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "33678:54:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + }, + "id": 11268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11264, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11259, + "src": "33746:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 11265, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "33754:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 11266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ExitKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 39, + "src": "33754:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + }, + "id": 11267, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "BPT_IN_FOR_EXACT_TOKENS_OUT", + "nodeType": "MemberAccess", + "src": "33754:55:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "src": "33746:63:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + }, + "id": 11283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11279, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11259, + "src": "34123:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 11280, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "34131:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 11281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ExitKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 39, + "src": "34131:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + }, + "id": 11282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "EXACT_BPT_IN_FOR_ALL_TOKENS_OUT", + "nodeType": "MemberAccess", + "src": "34131:59:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "src": "34123:67:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + }, + "id": 11295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11291, + "name": "kind", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11259, + "src": "34300:4:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "expression": { + "id": 11292, + "name": "StablePoolUserData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 236, + "src": "34308:18:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolUserData_$236_$", + "typeString": "type(library StablePoolUserData)" + } + }, + "id": 11293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ExitKind", + "nodeType": "MemberAccess", + "referencedDeclaration": 39, + "src": "34308:27:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ExitKind_$39_$", + "typeString": "type(enum StablePoolUserData.ExitKind)" + } + }, + "id": 11294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "EXACT_BPT_IN_FOR_ONE_TOKEN_OUT", + "nodeType": "MemberAccess", + "src": "34308:58:55", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ExitKind_$39", + "typeString": "enum StablePoolUserData.ExitKind" + } + }, + "src": "34300:66:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 11310, + "nodeType": "Block", + "src": "34505:60:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 11306, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "34527:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 11307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNHANDLED_EXIT_KIND", + "nodeType": "MemberAccess", + "referencedDeclaration": 722, + "src": "34527:26:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11305, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "34519:7:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 11308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "34519:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11309, + "nodeType": "ExpressionStatement", + "src": "34519:35:55" + } + ] + }, + "id": 11311, + "nodeType": "IfStatement", + "src": "34296:269:55", + "trueBody": { + "id": 11304, + "nodeType": "Block", + "src": "34368:131:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11297, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11241, + "src": "34416:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11298, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11243, + "src": "34435:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11299, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11239, + "src": "34457:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11300, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11237, + "src": "34469:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11301, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11248, + "src": "34479:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11296, + "name": "_exitExactBPTInForTokenOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11499, + "src": "34389:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256,uint256,uint256,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 11302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "34389:99:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11255, + "id": 11303, + "nodeType": "Return", + "src": "34382:106:55" + } + ] + } + }, + "id": 11312, + "nodeType": "IfStatement", + "src": "34119:446:55", + "trueBody": { + "id": 11290, + "nodeType": "Block", + "src": "34192:98:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11285, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11241, + "src": "34241:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11286, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11237, + "src": "34260:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11287, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11248, + "src": "34270:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11284, + "name": "_exitExactBPTInForTokensOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11353, + "src": "34213:27:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256,uint256[] memory,bytes memory) pure returns (uint256,uint256[] memory)" + } + }, + "id": 11288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "34213:66:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11255, + "id": 11289, + "nodeType": "Return", + "src": "34206:73:55" + } + ] + } + }, + "id": 11313, + "nodeType": "IfStatement", + "src": "33742:823:55", + "trueBody": { + "id": 11278, + "nodeType": "Block", + "src": "33811:302:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11270, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11241, + "src": "33897:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11271, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11243, + "src": "33936:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11272, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11239, + "src": "33978:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11273, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11237, + "src": "34010:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11274, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11246, + "src": "34040:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11275, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11248, + "src": "34076:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11269, + "name": "_exitBPTInForExactTokensOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11429, + "src": "33848:27:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256,uint256,uint256,uint256[] memory,uint256[] memory,bytes memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 11276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "33848:254:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11255, + "id": 11277, + "nodeType": "Return", + "src": "33825:277:55" + } + ] + } + } + ] + }, + "documentation": { + "id": 11234, + "nodeType": "StructuredDocumentation", + "src": "33239:143:55", + "text": " @dev Support single- and multi-token exits, plus explicit proportional exits (in addition to the\n recovery mode exit)." + }, + "id": 11315, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_doExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11249, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11237, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33413:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11235, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33413:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11236, + "nodeType": "ArrayTypeName", + "src": "33413:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11239, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33448:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11238, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33448:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11241, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33476:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11240, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33476:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11243, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33511:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11242, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33511:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11246, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33549:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33549:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11245, + "nodeType": "ArrayTypeName", + "src": "33549:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11248, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33590:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11247, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "33590:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "33403:214:55" + }, + "returnParameters": { + "id": 11255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11251, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33641:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11250, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33641:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11254, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11315, + "src": "33650:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11252, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "33650:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11253, + "nodeType": "ArrayTypeName", + "src": "33650:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "33640:27:55" + }, + "scope": 11876, + "src": "33387:1184:55", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11352, + "nodeType": "Block", + "src": "35033:222:55", + "statements": [ + { + "assignments": [ + 11332 + ], + "declarations": [ + { + "constant": false, + "id": 11332, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 11352, + "src": "35043:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11331, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35043:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11336, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11333, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11323, + "src": "35065:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "exactBptInForTokensOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 208, + "src": "35065:31:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256)" + } + }, + "id": 11335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35065:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "35043:55:55" + }, + { + "assignments": [ + 11341 + ], + "declarations": [ + { + "constant": false, + "id": 11341, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 11352, + "src": "35108:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11339, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35108:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11340, + "nodeType": "ArrayTypeName", + "src": "35108:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11347, + "initialValue": { + "arguments": [ + { + "id": 11343, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11321, + "src": "35169:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11344, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11318, + "src": "35179:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11345, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11332, + "src": "35193:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11342, + "name": "_computeProportionalAmountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4135, + "src": "35138:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)" + } + }, + "id": 11346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35138:67:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "35108:97:55" + }, + { + "expression": { + "components": [ + { + "id": 11348, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11332, + "src": "35224:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11349, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11341, + "src": "35237:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11350, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "35223:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11330, + "id": 11351, + "nodeType": "Return", + "src": "35216:32:55" + } + ] + }, + "documentation": { + "id": 11316, + "nodeType": "StructuredDocumentation", + "src": "34577:263:55", + "text": " @dev Proportional exit. Pays no swap fees. This is functionally equivalent to the recovery mode exit,\n except this doesn't skip protocol fee collection, calling rate providers, etc., and doesn't require\n recovery mode to be enabled." + }, + "id": 11353, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_exitExactBPTInForTokensOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11324, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11318, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "34891:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11317, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34891:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11321, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "34921:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11319, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "34921:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11320, + "nodeType": "ArrayTypeName", + "src": "34921:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11323, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "34956:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11322, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "34956:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "34881:102:55" + }, + "returnParameters": { + "id": 11330, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11326, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "35006:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35006:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11329, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11353, + "src": "35015:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35015:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11328, + "nodeType": "ArrayTypeName", + "src": "35015:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "35005:27:55" + }, + "scope": 11876, + "src": "34845:410:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11428, + "nodeType": "Block", + "src": "35648:692:55", + "statements": [ + { + "assignments": [ + 11380, + 11382 + ], + "declarations": [ + { + "constant": false, + "id": 11380, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 11428, + "src": "35659:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11378, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35659:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11379, + "nodeType": "ArrayTypeName", + "src": "35659:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11382, + "mutability": "mutable", + "name": "maxBPTAmountIn", + "nodeType": "VariableDeclaration", + "scope": 11428, + "src": "35688:22:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11381, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35688:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11386, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11383, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11368, + "src": "35714:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bptInForExactTokensOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 235, + "src": "35714:31:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256[] memory,uint256)" + } + }, + "id": 11385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35714:33:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(uint256[] memory,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "35658:89:55" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 11390, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11380, + "src": "35793:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "35793:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 11392, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11363, + "src": "35812:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "35812:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11387, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "35757:12:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 11389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "35757:35:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 11394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35757:71:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11395, + "nodeType": "ExpressionStatement", + "src": "35757:71:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11397, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11380, + "src": "35925:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [ + { + "id": 11399, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11366, + "src": "35950:14:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11398, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "35937:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 11400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35937:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11396, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "35911:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 11401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35911:55:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11402, + "nodeType": "ExpressionStatement", + "src": "35911:55:55" + }, + { + "assignments": [ + 11404 + ], + "declarations": [ + { + "constant": false, + "id": 11404, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 11428, + "src": "35977:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11403, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35977:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11415, + "initialValue": { + "arguments": [ + { + "id": 11407, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11360, + "src": "36053:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11408, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11363, + "src": "36077:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11409, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11380, + "src": "36099:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11410, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11356, + "src": "36123:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11411, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11358, + "src": "36149:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11412, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "36183:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 11413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "36183:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11405, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "35999:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcBptInGivenExactTokensOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 15091, + "src": "35999:40:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256[] memory,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 11414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "35999:216:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "35977:238:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11417, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11404, + "src": "36234:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 11418, + "name": "maxBPTAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11382, + "src": "36249:14:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "36234:29:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 11420, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "36265:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 11421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "BPT_IN_MAX_AMOUNT", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "36265:24:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11416, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "36225:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 11422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "36225:65:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11423, + "nodeType": "ExpressionStatement", + "src": "36225:65:55" + }, + { + "expression": { + "components": [ + { + "id": 11424, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11404, + "src": "36309:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11425, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11380, + "src": "36322:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11426, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "36308:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11375, + "id": 11427, + "nodeType": "Return", + "src": "36301:32:55" + } + ] + }, + "documentation": { + "id": 11354, + "nodeType": "StructuredDocumentation", + "src": "35261:87:55", + "text": " @dev Multi-token exit. Proportional exits will pay no protocol fees." + }, + "id": 11429, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_exitBPTInForExactTokensOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11369, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11356, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35399:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11355, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35399:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11358, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35429:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11357, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35429:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11360, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35467:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11359, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35467:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11363, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35495:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11361, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35495:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11362, + "nodeType": "ArrayTypeName", + "src": "35495:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11366, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35530:31:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11364, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35530:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11365, + "nodeType": "ArrayTypeName", + "src": "35530:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11368, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35571:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11367, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "35571:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "35389:209:55" + }, + "returnParameters": { + "id": 11375, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11371, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35621:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35621:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11374, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11429, + "src": "35630:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11372, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "35630:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11373, + "nodeType": "ArrayTypeName", + "src": "35630:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "35620:27:55" + }, + "scope": 11876, + "src": "35353:987:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 11498, + "nodeType": "Block", + "src": "36691:890:55", + "statements": [ + { + "assignments": [ + 11450, + 11452 + ], + "declarations": [ + { + "constant": false, + "id": 11450, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 11498, + "src": "36803:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36803:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11452, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 11498, + "src": "36824:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11451, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36824:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11456, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 11453, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11441, + "src": "36846:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 11454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "exactBptInForTokenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 188, + "src": "36846:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_uint256_$bound_to$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) pure returns (uint256,uint256)" + } + }, + "id": 11455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "36846:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "36802:76:55" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11458, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11452, + "src": "36998:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 11459, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11439, + "src": "37011:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "37011:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "36998:28:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 11462, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "37028:6:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 11463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "37028:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11457, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "36989:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 11464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "36989:60:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11465, + "nodeType": "ExpressionStatement", + "src": "36989:60:55" + }, + { + "assignments": [ + 11470 + ], + "declarations": [ + { + "constant": false, + "id": 11470, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 11498, + "src": "37134:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11468, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37134:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11469, + "nodeType": "ArrayTypeName", + "src": "37134:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11477, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 11474, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11439, + "src": "37178:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "37178:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "37164:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 11471, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37168:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11472, + "nodeType": "ArrayTypeName", + "src": "37168:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 11476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "37164:30:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "37134:60:55" + }, + { + "expression": { + "id": 11492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11478, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11470, + "src": "37266:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11480, + "indexExpression": { + "id": 11479, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11452, + "src": "37277:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "37266:22:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 11483, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11436, + "src": "37344:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11484, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11439, + "src": "37368:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11485, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11452, + "src": "37390:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11486, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11450, + "src": "37414:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11487, + "name": "actualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11432, + "src": "37439:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11488, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11434, + "src": "37465:20:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11489, + "name": "getSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2682, + "src": "37499:20:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 11490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "37499:22:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11481, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "37291:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcTokenOutGivenExactBptIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 15209, + "src": "37291:39:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 11491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "37291:240:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "37266:265:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11493, + "nodeType": "ExpressionStatement", + "src": "37266:265:55" + }, + { + "expression": { + "components": [ + { + "id": 11494, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11450, + "src": "37550:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11495, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11470, + "src": "37563:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11496, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "37549:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11448, + "id": 11497, + "nodeType": "Return", + "src": "37542:32:55" + } + ] + }, + "documentation": { + "id": 11430, + "nodeType": "StructuredDocumentation", + "src": "36346:87:55", + "text": " @dev Single-token exit, equivalent to swapping BPT for a pool token." + }, + "id": 11499, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_exitExactBPTInForTokenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11442, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11432, + "mutability": "mutable", + "name": "actualSupply", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36483:20:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36483:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11434, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36513:28:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36513:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11436, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36551:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36551:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11439, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36579:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36579:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11438, + "nodeType": "ArrayTypeName", + "src": "36579:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11441, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36614:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11440, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "36614:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "36473:168:55" + }, + "returnParameters": { + "id": 11448, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11444, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36664:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11443, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36664:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11447, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11499, + "src": "36673:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "36673:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11446, + "nodeType": "ArrayTypeName", + "src": "36673:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "36663:27:55" + }, + "scope": 11876, + "src": "36438:1143:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "baseFunctions": [ + 4081 + ], + "body": { + "id": 11544, + "nodeType": "Block", + "src": "37909:938:55", + "statements": [ + { + "assignments": [ + 11517, + 11520 + ], + "declarations": [ + { + "constant": false, + "id": 11517, + "mutability": "mutable", + "name": "virtualSupply", + "nodeType": "VariableDeclaration", + "scope": 11544, + "src": "38437:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11516, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "38437:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11520, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11544, + "src": "38460:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11518, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "38460:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11519, + "nodeType": "ArrayTypeName", + "src": "38460:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11524, + "initialValue": { + "arguments": [ + { + "id": 11522, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11503, + "src": "38514:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11521, + "name": "_dropBptItemFromBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13877, + "src": "38489:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 11523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "38489:44:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "38436:97:55" + }, + { + "assignments": [ + 11526, + 11529 + ], + "declarations": [ + { + "constant": false, + "id": 11526, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 11544, + "src": "38545:19:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11525, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "38545:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11529, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 11544, + "src": "38566:27:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11527, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "38566:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11528, + "nodeType": "ArrayTypeName", + "src": "38566:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11536, + "initialValue": { + "arguments": [ + { + "id": 11532, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11520, + "src": "38636:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11533, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11517, + "src": "38658:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11534, + "name": "userData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11507, + "src": "38685:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 11530, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "38597:5:55", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePool_$11876", + "typeString": "contract super ComposableStablePool" + } + }, + "id": 11531, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_doRecoveryModeExit", + "nodeType": "MemberAccess", + "referencedDeclaration": 4081, + "src": "38597:25:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256,bytes memory) returns (uint256,uint256[] memory)" + } + }, + "id": 11535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "38597:106:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "38544:159:55" + }, + { + "expression": { + "components": [ + { + "id": 11537, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11526, + "src": "38800:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 11539, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11529, + "src": "38825:10:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "hexValue": "30", + "id": 11540, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "38837:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 11538, + "name": "_addBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13970, + "src": "38813:11:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256) view returns (uint256[] memory)" + } + }, + "id": 11541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "38813:26:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11542, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "38799:41:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 11515, + "id": 11543, + "nodeType": "Return", + "src": "38792:48:55" + } + ] + }, + "documentation": { + "id": 11500, + "nodeType": "StructuredDocumentation", + "src": "37587:127:55", + "text": " @dev We cannot use the default RecoveryMode implementation here, since we need to account for the BPT token." + }, + "id": 11545, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_doRecoveryModeExit", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11509, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "37864:8:55" + }, + "parameters": { + "id": 11508, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11503, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 11545, + "src": "37757:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11501, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37757:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11502, + "nodeType": "ArrayTypeName", + "src": "37757:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11505, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11545, + "src": "37802:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11504, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37802:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11507, + "mutability": "mutable", + "name": "userData", + "nodeType": "VariableDeclaration", + "scope": 11545, + "src": "37819:21:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 11506, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "37819:5:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "37747:99:55" + }, + "returnParameters": { + "id": 11515, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11511, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11545, + "src": "37882:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11510, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37882:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11514, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11545, + "src": "37891:16:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11512, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "37891:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11513, + "nodeType": "ArrayTypeName", + "src": "37891:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "37881:27:55" + }, + "scope": 11876, + "src": "37719:1128:55", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 11617, + "nodeType": "Block", + "src": "40109:1466:55", + "statements": [ + { + "assignments": [ + null, + 11564, + null + ], + "declarations": [ + null, + { + "constant": false, + "id": 11564, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 11617, + "src": "40299:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11562, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "40299:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11563, + "nodeType": "ArrayTypeName", + "src": "40299:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + null + ], + "id": 11571, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11568, + "name": "getPoolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2649, + "src": "40365:9:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 11569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40365:11:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11565, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "40340:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 11566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40340:10:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 11567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getPoolTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 1777, + "src": "40340:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "function (bytes32) view external returns (contract IERC20[] memory,uint256[] memory,uint256)" + } + }, + "id": 11570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40340:37:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(contract IERC20[] memory,uint256[] memory,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "40296:81:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11573, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11564, + "src": "40401:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11574, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 13125 + ], + "referencedDeclaration": 13125, + "src": "40421:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 11575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40421:17:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11572, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "40387:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 11576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40387:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11577, + "nodeType": "ExpressionStatement", + "src": "40387:52:55" + }, + { + "expression": { + "id": 11584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 11578, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11552, + "src": "40450:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11579, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11550, + "src": "40465:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 11580, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "40449:25:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 11582, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11564, + "src": "40502:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11581, + "name": "_dropBptItemFromBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13877, + "src": "40477:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 11583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40477:44:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "src": "40449:72:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11585, + "nodeType": "ExpressionStatement", + "src": "40449:72:55" + }, + { + "assignments": [ + 11587 + ], + "declarations": [ + { + "constant": false, + "id": 11587, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 11617, + "src": "40842:33:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11586, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "40842:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11588, + "nodeType": "VariableDeclarationStatement", + "src": "40842:33:55" + }, + { + "expression": { + "id": 11594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 11589, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11556, + "src": "40886:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11590, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11587, + "src": "40903:25:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 11591, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "40885:44:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11592, + "name": "getLastJoinExitData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12411, + "src": "40932:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256,uint256)" + } + }, + "id": 11593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "40932:21:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "src": "40885:68:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11595, + "nodeType": "ExpressionStatement", + "src": "40885:68:55" + }, + { + "assignments": [ + 11597 + ], + "declarations": [ + { + "constant": false, + "id": 11597, + "mutability": "mutable", + "name": "expectedProtocolOwnershipPercentage", + "nodeType": "VariableDeclaration", + "scope": 11617, + "src": "41156:43:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11596, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "41156:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11598, + "nodeType": "VariableDeclarationStatement", + "src": "41156:43:55" + }, + { + "expression": { + "id": 11607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 11599, + "name": "expectedProtocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11597, + "src": "41223:35:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11600, + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11558, + "src": "41272:35:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 11601, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "41209:108:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 11603, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11550, + "src": "41356:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11604, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11556, + "src": "41366:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11605, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11587, + "src": "41383:25:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11602, + "name": "_getProtocolPoolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12190, + "src": "41320:35:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 11606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "41320:89:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "src": "41209:200:55", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11608, + "nodeType": "ExpressionStatement", + "src": "41209:200:55" + }, + { + "expression": { + "id": 11615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11609, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11554, + "src": "41420:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 11612, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11552, + "src": "41496:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11613, + "name": "expectedProtocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11597, + "src": "41523:35:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11610, + "name": "ProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4722, + "src": "41440:12:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFees_$4722_$", + "typeString": "type(library ProtocolFees)" + } + }, + "id": 11611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bptForPoolOwnershipPercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 4721, + "src": "41440:42:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 11614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "41440:128:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "41420:148:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11616, + "nodeType": "ExpressionStatement", + "src": "41420:148:55" + } + ] + }, + "documentation": { + "id": 11546, + "nodeType": "StructuredDocumentation", + "src": "38870:934:55", + "text": " Many functions require accessing multiple internal values that might at first seem unrelated, but are actually\n quite intertwined, and computed at the same time for optimal performance (since calculating some of them also\n yields intermediate results useful for other queries). This helper function returns many of these values,\n greatly reducing bytecode size.\n The return values are:\n @return balances - The current upscaled token balances (not including BPT)\n @return virtualSupply - The Pool's virtual supply\n @return protocolFeeAmount - The amount of unpaid protocol fees in BPT\n @return lastJoinExitAmp - The Pool's amplification factor at the last join or exit operation\n @return currentInvariantWithLastJoinExitAmp - The invariant of the current balances, calculated using the\n amplification factor at the last join or exit operation." + }, + "id": 11618, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getSupplyAndFeesData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11547, + "nodeType": "ParameterList", + "parameters": [], + "src": "39839:2:55" + }, + "returnParameters": { + "id": 11559, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11550, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11618, + "src": "39901:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11548, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "39901:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11549, + "nodeType": "ArrayTypeName", + "src": "39901:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11552, + "mutability": "mutable", + "name": "virtualSupply", + "nodeType": "VariableDeclaration", + "scope": 11618, + "src": "39940:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11551, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "39940:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11554, + "mutability": "mutable", + "name": "protocolFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 11618, + "src": "39975:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11553, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "39975:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11556, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 11618, + "src": "40014:23:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11555, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "40014:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11558, + "mutability": "mutable", + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 11618, + "src": "40051:43:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11557, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "40051:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "39887:217:55" + }, + "scope": 11876, + "src": "39809:1766:55", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "baseFunctions": [ + 427 + ], + "body": { + "id": 11672, + "nodeType": "Block", + "src": "42739:1865:55", + "statements": [ + { + "assignments": [ + 11629, + 11631, + 11633, + 11635, + 11637 + ], + "declarations": [ + { + "constant": false, + "id": 11629, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43035:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11627, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43035:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11628, + "nodeType": "ArrayTypeName", + "src": "43035:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11631, + "mutability": "mutable", + "name": "virtualSupply", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43074:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11630, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43074:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11633, + "mutability": "mutable", + "name": "protocolFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43109:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11632, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43109:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11635, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43148:23:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11634, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43148:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11637, + "mutability": "mutable", + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43185:43:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11636, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43185:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11640, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11638, + "name": "_getSupplyAndFeesData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11618, + "src": "43241:21:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256[] memory,uint256,uint256,uint256,uint256)" + } + }, + "id": 11639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "43241:23:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256[] memory,uint256,uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "43021:243:55" + }, + { + "assignments": [ + 11642 + ], + "declarations": [ + { + "constant": false, + "id": 11642, + "mutability": "mutable", + "name": "actualTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43438:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11641, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43438:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11647, + "initialValue": { + "arguments": [ + { + "id": 11645, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11633, + "src": "43484:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11643, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11631, + "src": "43466:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "43466:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 11646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "43466:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "43438:64:55" + }, + { + "assignments": [ + 11649, + null + ], + "declarations": [ + { + "constant": false, + "id": 11649, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "43681:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11648, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "43681:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 11652, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11650, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "43705:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 11651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "43705:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "43680:53:55" + }, + { + "assignments": [ + 11654 + ], + "declarations": [ + { + "constant": false, + "id": 11654, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 11672, + "src": "44249:24:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11653, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "44249:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11666, + "initialValue": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11657, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11655, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11649, + "src": "44277:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 11656, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11635, + "src": "44291:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "44277:29:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 11658, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "44276:31:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 11662, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11649, + "src": "44403:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11663, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11629, + "src": "44415:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 11660, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "44372:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "44372:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 11664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "44372:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "44276:148:55", + "trueExpression": { + "id": 11659, + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11637, + "src": "44322:35:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "44249:175:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11669, + "name": "actualTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11642, + "src": "44579:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11667, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11654, + "src": "44554:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "44554:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 11670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "44554:43:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 11624, + "id": 11671, + "nodeType": "Return", + "src": "44547:50:55" + } + ] + }, + "documentation": { + "id": 11619, + "nodeType": "StructuredDocumentation", + "src": "41581:1085:55", + "text": " @dev This function returns the appreciation of BPT relative to the underlying tokens, as an 18 decimal fixed\n point number. It is simply the ratio of the invariant to the BPT supply.\n The total supply is initialized to equal the invariant, so this value starts at one. During Pool operation the\n invariant always grows and shrinks either proportionally to the total supply (in scenarios with no price impact,\n e.g. proportional joins), or grows faster and shrinks more slowly than it (whenever swap fees are collected or\n the token rates increase). Therefore, the rate is a monotonically increasing function.\n WARNING: since this function reads balances directly from the Vault, it is potentially subject to manipulation\n via reentrancy. However, this can only happen if one of the tokens in the Pool contains some form of callback\n behavior in the `transferFrom` function (like ERC777 tokens do). These tokens are strictly incompatible with the\n Vault and Pool design, and are not safe to be used." + }, + "functionSelector": "679aefce", + "id": 11673, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRate", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11621, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "42712:8:55" + }, + "parameters": { + "id": 11620, + "nodeType": "ParameterList", + "parameters": [], + "src": "42687:2:55" + }, + "returnParameters": { + "id": 11624, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11623, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11673, + "src": "42730:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11622, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "42730:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "42729:9:55" + }, + "scope": 11876, + "src": "42671:1933:55", + "stateMutability": "view", + "virtual": true, + "visibility": "external" + }, + { + "body": { + "id": 11691, + "nodeType": "Block", + "src": "45457:152:55", + "statements": [ + { + "assignments": [ + null, + 11680, + 11682, + null, + null + ], + "declarations": [ + null, + { + "constant": false, + "id": 11680, + "mutability": "mutable", + "name": "virtualSupply", + "nodeType": "VariableDeclaration", + "scope": 11691, + "src": "45470:21:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11679, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "45470:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11682, + "mutability": "mutable", + "name": "protocolFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 11691, + "src": "45493:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11681, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "45493:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null, + null + ], + "id": 11685, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11683, + "name": "_getSupplyAndFeesData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11618, + "src": "45526:21:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256[] memory,uint256,uint256,uint256,uint256)" + } + }, + "id": 11684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "45526:23:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256[] memory,uint256,uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "45467:82:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11688, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11682, + "src": "45584:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11686, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11680, + "src": "45566:13:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "45566:17:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 11689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "45566:36:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 11678, + "id": 11690, + "nodeType": "Return", + "src": "45559:43:55" + } + ] + }, + "documentation": { + "id": 11674, + "nodeType": "StructuredDocumentation", + "src": "44610:783:55", + "text": " @dev Returns the effective BPT supply.\n In other pools, this would be the same as `totalSupply`, but there are two key differences here:\n - this pool pre-mints BPT and holds it in the Vault as a token, and as such we need to subtract the Vault's\n balance to get the total \"circulating supply\". This is called the 'virtualSupply'.\n - the Pool owes debt to the Protocol in the form of unminted BPT, which will be minted immediately before the\n next join or exit. We need to take these into account since, even if they don't yet exist, they will\n effectively be included in any Pool operation that involves BPT.\n In the vast majority of cases, this function should be used instead of `totalSupply()`." + }, + "functionSelector": "876f303b", + "id": 11692, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getActualSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11675, + "nodeType": "ParameterList", + "parameters": [], + "src": "45422:2:55" + }, + "returnParameters": { + "id": 11678, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11677, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11692, + "src": "45448:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11676, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "45448:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "45447:9:55" + }, + "scope": 11876, + "src": "45398:211:55", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 4613 + ], + "body": { + "id": 11746, + "nodeType": "Block", + "src": "45674:2308:55", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11696, + "name": "_ensureNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6236, + "src": "46386:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$__$", + "typeString": "function () view" + } + }, + "id": 11697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "46386:18:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11698, + "nodeType": "ExpressionStatement", + "src": "46386:18:55" + }, + { + "assignments": [ + 11703, + null, + 11705, + 11707, + 11709 + ], + "declarations": [ + { + "constant": false, + "id": 11703, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11746, + "src": "46660:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11701, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "46660:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11702, + "nodeType": "ArrayTypeName", + "src": "46660:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + null, + { + "constant": false, + "id": 11705, + "mutability": "mutable", + "name": "protocolFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 11746, + "src": "46713:25:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11704, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "46713:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11707, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 11746, + "src": "46752:23:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11706, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "46752:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11709, + "mutability": "mutable", + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 11746, + "src": "46789:43:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "46789:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11712, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11710, + "name": "_getSupplyAndFeesData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11618, + "src": "46845:21:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256[] memory,uint256,uint256,uint256,uint256)" + } + }, + "id": 11711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "46845:23:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256[] memory,uint256,uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "46646:222:55" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11713, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11705, + "src": "46883:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 11714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "46903:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "46883:21:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11721, + "nodeType": "IfStatement", + "src": "46879:87:55", + "trueBody": { + "id": 11720, + "nodeType": "Block", + "src": "46906:60:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11717, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11705, + "src": "46937:17:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11716, + "name": "_payProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3416, + "src": "46920:16:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 11718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "46920:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11719, + "nodeType": "ExpressionStatement", + "src": "46920:35:55" + } + ] + } + }, + { + "assignments": [ + 11723, + null + ], + "declarations": [ + { + "constant": false, + "id": 11723, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11746, + "src": "47172:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11722, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "47172:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 11726, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11724, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "47196:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 11725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "47196:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "47171:53:55" + }, + { + "assignments": [ + 11728 + ], + "declarations": [ + { + "constant": false, + "id": 11728, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 11746, + "src": "47740:24:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11727, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "47740:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11740, + "initialValue": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11729, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11723, + "src": "47768:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 11730, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11707, + "src": "47782:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "47768:29:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 11732, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "47767:31:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "id": 11736, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11723, + "src": "47894:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11737, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11703, + "src": "47906:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 11734, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "47863:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "47863:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 11738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "47863:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "47767:148:55", + "trueExpression": { + "id": 11733, + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11709, + "src": "47813:35:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "47740:175:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11742, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11723, + "src": "47946:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11743, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11728, + "src": "47958:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11741, + "name": "_updatePostJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12382, + "src": "47926:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 11744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "47926:49:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11745, + "nodeType": "ExpressionStatement", + "src": "47926:49:55" + } + ] + }, + "id": 11747, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_beforeProtocolFeeCacheUpdate", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11694, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "45665:8:55" + }, + "parameters": { + "id": 11693, + "nodeType": "ParameterList", + "parameters": [], + "src": "45653:2:55" + }, + "returnParameters": { + "id": 11695, + "nodeType": "ParameterList", + "parameters": [], + "src": "45674:0:55" + }, + "scope": 11876, + "src": "45615:2367:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2804 + ], + "body": { + "id": 11796, + "nodeType": "Block", + "src": "48040:998:55", + "statements": [ + { + "assignments": [ + null, + 11755, + null + ], + "declarations": [ + null, + { + "constant": false, + "id": 11755, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 11796, + "src": "48608:35:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "48608:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11754, + "nodeType": "ArrayTypeName", + "src": "48608:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + null + ], + "id": 11762, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11759, + "name": "getPoolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2649, + "src": "48674:9:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 11760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48674:11:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11756, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "48649:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 11757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48649:10:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 11758, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getPoolTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 1777, + "src": "48649:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "function (bytes32) view external returns (contract IERC20[] memory,uint256[] memory,uint256)" + } + }, + "id": 11761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48649:37:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(contract IERC20[] memory,uint256[] memory,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "48605:81:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11764, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11755, + "src": "48710:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11765, + "name": "_scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 13125 + ], + "referencedDeclaration": 13125, + "src": "48730:15:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function () view returns (uint256[] memory)" + } + }, + "id": 11766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48730:17:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11763, + "name": "_upscaleArray", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3597, + "src": "48696:13:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (uint256[] memory,uint256[] memory) pure" + } + }, + "id": 11767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48696:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11768, + "nodeType": "ExpressionStatement", + "src": "48696:52:55" + }, + { + "assignments": [ + 11773 + ], + "declarations": [ + { + "constant": false, + "id": 11773, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 11796, + "src": "48758:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11771, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "48758:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11772, + "nodeType": "ArrayTypeName", + "src": "48758:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 11777, + "initialValue": { + "arguments": [ + { + "id": 11775, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11755, + "src": "48799:18:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 11774, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "48786:12:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 11776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48786:32:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "48758:60:55" + }, + { + "assignments": [ + 11779, + null + ], + "declarations": [ + { + "constant": false, + "id": 11779, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 11796, + "src": "48830:18:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11778, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "48830:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 11782, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11780, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "48854:26:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 11781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48854:28:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "48829:53:55" + }, + { + "assignments": [ + 11784 + ], + "declarations": [ + { + "constant": false, + "id": 11784, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 11796, + "src": "48892:24:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11783, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "48892:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11790, + "initialValue": { + "arguments": [ + { + "id": 11787, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11779, + "src": "48950:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11788, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11773, + "src": "48962:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 11785, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "48919:10:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 11786, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "48919:30:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 11789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48919:52:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "48892:79:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11792, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11779, + "src": "49002:10:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11793, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11784, + "src": "49014:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11791, + "name": "_updatePostJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12382, + "src": "48982:19:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 11794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "48982:49:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11795, + "nodeType": "ExpressionStatement", + "src": "48982:49:55" + } + ] + }, + "id": 11797, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onDisableRecoveryMode", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11749, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "48031:8:55" + }, + "parameters": { + "id": 11748, + "nodeType": "ParameterList", + "parameters": [], + "src": "48019:2:55" + }, + "returnParameters": { + "id": 11750, + "nodeType": "ParameterList", + "parameters": [], + "src": "48040:0:55" + }, + "scope": 11876, + "src": "47988:1050:55", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 11855, + "nodeType": "Block", + "src": "49406:241:55", + "statements": [ + { + "assignments": [ + 11818 + ], + "declarations": [ + { + "constant": false, + "id": 11818, + "mutability": "mutable", + "name": "length", + "nodeType": "VariableDeclaration", + "scope": 11855, + "src": "49416:14:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11817, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49416:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11821, + "initialValue": { + "expression": { + "id": 11819, + "name": "toMutate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11801, + "src": "49433:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "49433:15:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "49416:32:55" + }, + { + "expression": { + "arguments": [ + { + "id": 11825, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11818, + "src": "49494:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 11826, + "name": "arguments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11804, + "src": "49502:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11827, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "49502:16:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 11822, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "49458:12:55", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 11824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5902, + "src": "49458:35:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) pure" + } + }, + "id": 11828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "49458:61:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11829, + "nodeType": "ExpressionStatement", + "src": "49458:61:55" + }, + { + "body": { + "id": 11853, + "nodeType": "Block", + "src": "49567:74:55", + "statements": [ + { + "expression": { + "id": 11851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 11840, + "name": "toMutate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11801, + "src": "49581:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11842, + "indexExpression": { + "id": 11841, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11831, + "src": "49590:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "49581:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 11844, + "name": "toMutate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11801, + "src": "49604:8:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11846, + "indexExpression": { + "id": 11845, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11831, + "src": "49613:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "49604:11:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 11847, + "name": "arguments", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11804, + "src": "49617:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 11849, + "indexExpression": { + "id": 11848, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11831, + "src": "49627:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "49617:12:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 11843, + "name": "mutation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11814, + "src": "49595:8:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 11850, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "49595:35:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "49581:49:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11852, + "nodeType": "ExpressionStatement", + "src": "49581:49:55" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 11836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11834, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11831, + "src": "49550:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 11835, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11818, + "src": "49554:6:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "49550:10:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11854, + "initializationExpression": { + "assignments": [ + 11831 + ], + "declarations": [ + { + "constant": false, + "id": 11831, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 11854, + "src": "49535:9:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11830, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49535:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11833, + "initialValue": { + "hexValue": "30", + "id": 11832, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "49547:1:55", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "49535:13:55" + }, + "loopExpression": { + "expression": { + "id": 11838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "49562:3:55", + "subExpression": { + "id": 11837, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11831, + "src": "49564:1:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11839, + "nodeType": "ExpressionStatement", + "src": "49562:3:55" + }, + "nodeType": "ForStatement", + "src": "49530:111:55" + } + ] + }, + "documentation": { + "id": 11798, + "nodeType": "StructuredDocumentation", + "src": "49060:159:55", + "text": " @dev Mutates `amounts` by applying `mutation` with each entry in `arguments`.\n Equivalent to `amounts = amounts.map(mutation)`." + }, + "id": 11856, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_mutateAmounts", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11815, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11801, + "mutability": "mutable", + "name": "toMutate", + "nodeType": "VariableDeclaration", + "scope": 11856, + "src": "49257:25:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11799, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49257:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11800, + "nodeType": "ArrayTypeName", + "src": "49257:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11804, + "mutability": "mutable", + "name": "arguments", + "nodeType": "VariableDeclaration", + "scope": 11856, + "src": "49292:26:55", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11802, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49292:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11803, + "nodeType": "ArrayTypeName", + "src": "49292:9:55", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11814, + "mutability": "mutable", + "name": "mutation", + "nodeType": "VariableDeclaration", + "scope": 11856, + "src": "49328:58:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + }, + "typeName": { + "id": 11813, + "nodeType": "FunctionTypeName", + "parameterTypes": { + "id": 11809, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11806, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11813, + "src": "49337:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11805, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49337:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11808, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11813, + "src": "49346:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49346:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "49336:18:55" + }, + "returnParameterTypes": { + "id": 11812, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11811, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11813, + "src": "49369:7:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "49369:7:55", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "49368:9:55" + }, + "src": "49328:58:55", + "stateMutability": "pure", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + }, + "visibility": "internal" + }, + "visibility": "internal" + } + ], + "src": "49247:145:55" + }, + "returnParameters": { + "id": 11816, + "nodeType": "ParameterList", + "parameters": [], + "src": "49406:0:55" + }, + "scope": 11876, + "src": "49224:423:55", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "baseFunctions": [ + 2907, + 12429, + 13149, + 15988 + ], + "body": { + "id": 11874, + "nodeType": "Block", + "src": "50349:58:55", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 11871, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11859, + "src": "50391:8:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 11869, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "50366:5:55", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePool_$11876", + "typeString": "contract super ComposableStablePool" + } + }, + "id": 11870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_isOwnerOnlyAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 12429, + "src": "50366:24:55", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 11872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "50366:34:55", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 11868, + "id": 11873, + "nodeType": "Return", + "src": "50359:41:55" + } + ] + }, + "documentation": { + "id": 11857, + "nodeType": "StructuredDocumentation", + "src": "49684:145:55", + "text": " @dev Inheritance rules still require us to override this in the most derived contract, even though\n it only calls super." + }, + "id": 11875, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11865, + "nodeType": "OverrideSpecifier", + "overrides": [ + { + "id": 11861, + "name": "BasePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3860, + "src": "50181:8:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + }, + { + "id": 11862, + "name": "ComposableStablePoolProtocolFees", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 12430, + "src": "50203:32:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolProtocolFees_$12430", + "typeString": "contract ComposableStablePoolProtocolFees" + } + }, + { + "id": 11863, + "name": "StablePoolAmplification", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 15989, + "src": "50249:23:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StablePoolAmplification_$15989", + "typeString": "contract StablePoolAmplification" + } + }, + { + "id": 11864, + "name": "ComposableStablePoolRates", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13150, + "src": "50286:25:55", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + } + ], + "src": "49934:387:55" + }, + "parameters": { + "id": 11860, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11859, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 11875, + "src": "49862:16:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 11858, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "49862:7:55", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "49861:18:55" + }, + "returnParameters": { + "id": 11868, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11867, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11875, + "src": "50339:4:55", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 11866, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "50339:4:55", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "50338:6:55" + }, + "scope": 11876, + "src": "49834:573:55", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 11877, + "src": "2683:47726:55" + } + ], + "src": "688:49722:55" + }, + "id": 55 + }, + "contracts/ComposableStablePoolFactory.sol": { + "ast": { + "absolutePath": "contracts/ComposableStablePoolFactory.sol", + "exportedSymbols": { + "ComposableStablePoolFactory": [ + 12008 + ] + }, + "id": 12009, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 11878, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:56" + }, + { + "id": 11879, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:56" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol", + "id": 11880, + "nodeType": "ImportDirective", + "scope": 12009, + "sourceUnit": 420, + "src": "747:76:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol", + "id": 11881, + "nodeType": "ImportDirective", + "scope": 12009, + "sourceUnit": 462, + "src": "824:72:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 11882, + "nodeType": "ImportDirective", + "scope": 12009, + "sourceUnit": 2022, + "src": "897:65:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol", + "id": 11883, + "nodeType": "ImportDirective", + "scope": 12009, + "sourceUnit": 4277, + "src": "964:78:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow.sol", + "id": 11884, + "nodeType": "ImportDirective", + "scope": 12009, + "sourceUnit": 4339, + "src": "1043:85:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePool.sol", + "file": "./ComposableStablePool.sol", + "id": 11885, + "nodeType": "ImportDirective", + "scope": 12009, + "sourceUnit": 11877, + "src": "1130:36:56", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 11886, + "name": "IVersion", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 461, + "src": "1208:8:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVersion_$461", + "typeString": "contract IVersion" + } + }, + "id": 11887, + "nodeType": "InheritanceSpecifier", + "src": "1208:8:56" + }, + { + "baseName": { + "id": 11888, + "name": "IPoolVersion", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 419, + "src": "1218:12:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPoolVersion_$419", + "typeString": "contract IPoolVersion" + } + }, + "id": 11889, + "nodeType": "InheritanceSpecifier", + "src": "1218:12:56" + }, + { + "baseName": { + "id": 11890, + "name": "BasePoolFactory", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4276, + "src": "1232:15:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolFactory_$4276", + "typeString": "contract BasePoolFactory" + } + }, + "id": 11891, + "nodeType": "InheritanceSpecifier", + "src": "1232:15:56" + }, + { + "baseName": { + "id": 11892, + "name": "FactoryWidePauseWindow", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4338, + "src": "1249:22:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FactoryWidePauseWindow_$4338", + "typeString": "contract FactoryWidePauseWindow" + } + }, + "id": 11893, + "nodeType": "InheritanceSpecifier", + "src": "1249:22:56" + } + ], + "contractDependencies": [ + 393, + 419, + 461, + 1022, + 4276, + 4338, + 5117, + 5339, + 6089, + 11876 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 12008, + "linearizedBaseContracts": [ + 12008, + 4338, + 4276, + 6089, + 5117, + 5339, + 393, + 1022, + 419, + 461 + ], + "name": "ComposableStablePoolFactory", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 11895, + "mutability": "mutable", + "name": "_version", + "nodeType": "VariableDeclaration", + "scope": 12008, + "src": "1278:23:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 11894, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1278:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 11897, + "mutability": "mutable", + "name": "_poolVersion", + "nodeType": "VariableDeclaration", + "scope": 12008, + "src": "1307:27:56", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string" + }, + "typeName": { + "id": 11896, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1307:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 11924, + "nodeType": "Block", + "src": "1600:78:56", + "statements": [ + { + "expression": { + "id": 11918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11916, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11895, + "src": "1610:8:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11917, + "name": "factoryVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11903, + "src": "1621:14:56", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "1610:25:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 11919, + "nodeType": "ExpressionStatement", + "src": "1610:25:56" + }, + { + "expression": { + "id": 11922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11920, + "name": "_poolVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11897, + "src": "1645:12:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11921, + "name": "poolVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11905, + "src": "1660:11:56", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "1645:26:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "id": 11923, + "nodeType": "ExpressionStatement", + "src": "1645:26:56" + } + ] + }, + "id": 11925, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 11908, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11899, + "src": "1531:5:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + { + "id": 11909, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11901, + "src": "1538:19:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "arguments": [ + { + "id": 11911, + "name": "ComposableStablePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11876, + "src": "1564:20:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePool_$11876_$", + "typeString": "type(contract ComposableStablePool)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePool_$11876_$", + "typeString": "type(contract ComposableStablePool)" + } + ], + "id": 11910, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1559:4:56", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 11912, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1559:26:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_contract$_ComposableStablePool_$11876", + "typeString": "type(contract ComposableStablePool)" + } + }, + "id": 11913, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "creationCode", + "nodeType": "MemberAccess", + "src": "1559:39:56", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "id": 11914, + "modifierName": { + "id": 11907, + "name": "BasePoolFactory", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4276, + "src": "1515:15:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePoolFactory_$4276_$", + "typeString": "type(contract BasePoolFactory)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1515:84:56" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11906, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11899, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 11925, + "src": "1362:12:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 11898, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1362:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11901, + "mutability": "mutable", + "name": "protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 11925, + "src": "1384:51:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 11900, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "1384:31:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11903, + "mutability": "mutable", + "name": "factoryVersion", + "nodeType": "VariableDeclaration", + "scope": 11925, + "src": "1445:28:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11902, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1445:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11905, + "mutability": "mutable", + "name": "poolVersion", + "nodeType": "VariableDeclaration", + "scope": 11925, + "src": "1483:25:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11904, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1483:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1352:162:56" + }, + "returnParameters": { + "id": 11915, + "nodeType": "ParameterList", + "parameters": [], + "src": "1600:0:56" + }, + "scope": 12008, + "src": "1341:337:56", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 460 + ], + "body": { + "id": 11933, + "nodeType": "Block", + "src": "1750:32:56", + "statements": [ + { + "expression": { + "id": 11931, + "name": "_version", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11895, + "src": "1767:8:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 11930, + "id": 11932, + "nodeType": "Return", + "src": "1760:15:56" + } + ] + }, + "functionSelector": "54fd4d50", + "id": 11934, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "version", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11927, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1717:8:56" + }, + "parameters": { + "id": 11926, + "nodeType": "ParameterList", + "parameters": [], + "src": "1700:2:56" + }, + "returnParameters": { + "id": 11930, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11929, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11934, + "src": "1735:13:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11928, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1735:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1734:15:56" + }, + "scope": 12008, + "src": "1684:98:56", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 418 + ], + "body": { + "id": 11942, + "nodeType": "Block", + "src": "1859:36:56", + "statements": [ + { + "expression": { + "id": 11940, + "name": "_poolVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11897, + "src": "1876:12:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "functionReturnParameters": 11939, + "id": 11941, + "nodeType": "Return", + "src": "1869:19:56" + } + ] + }, + "functionSelector": "3f819b6f", + "id": 11943, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPoolVersion", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 11936, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1826:8:56" + }, + "parameters": { + "id": 11935, + "nodeType": "ParameterList", + "parameters": [], + "src": "1811:2:56" + }, + "returnParameters": { + "id": 11939, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11938, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 11943, + "src": "1844:13:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11937, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1844:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1843:15:56" + }, + "scope": 12008, + "src": "1788:107:56", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 12006, + "nodeType": "Block", + "src": "2368:1222:56", + "statements": [ + { + "assignments": [ + 11972, + 11974 + ], + "declarations": [ + { + "constant": false, + "id": 11972, + "mutability": "mutable", + "name": "pauseWindowDuration", + "nodeType": "VariableDeclaration", + "scope": 12006, + "src": "2379:27:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11971, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2379:7:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11974, + "mutability": "mutable", + "name": "bufferPeriodDuration", + "nodeType": "VariableDeclaration", + "scope": 12006, + "src": "2408:28:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11973, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2408:7:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 11977, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11975, + "name": "getPauseConfiguration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4337, + "src": "2440:21:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256,uint256)" + } + }, + "id": 11976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2440:23:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2378:85:56" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11984, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6034, + "src": "2667:8:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 11985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2667:10:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11986, + "name": "getProtocolFeePercentagesProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4244, + "src": "2728:33:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IProtocolFeePercentagesProvider_$1269_$", + "typeString": "function () view returns (contract IProtocolFeePercentagesProvider)" + } + }, + "id": 11987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2728:35:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "id": 11988, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11946, + "src": "2799:4:56", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 11989, + "name": "symbol", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11948, + "src": "2841:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 11990, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11951, + "src": "2885:6:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 11991, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11956, + "src": "2936:13:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "id": 11992, + "name": "tokenRateCacheDurations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11959, + "src": "3004:23:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 11993, + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11962, + "src": "3090:31:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + { + "id": 11994, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11953, + "src": "3175:22:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11995, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11964, + "src": "3246:17:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11996, + "name": "pauseWindowDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11972, + "src": "3314:19:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11997, + "name": "bufferPeriodDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11974, + "src": "3385:20:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 11998, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11966, + "src": "3442:5:56", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 11999, + "name": "getPoolVersion", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11943, + "src": "3486:14:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_string_memory_ptr_$", + "typeString": "function () view returns (string memory)" + } + }, + "id": 12000, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3486:16:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 11982, + "name": "ComposableStablePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11876, + "src": "2595:20:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePool_$11876_$", + "typeString": "type(contract ComposableStablePool)" + } + }, + "id": 11983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "NewPoolParams", + "nodeType": "MemberAccess", + "referencedDeclaration": 9755, + "src": "2595:34:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_NewPoolParams_$9755_storage_ptr_$", + "typeString": "type(struct ComposableStablePool.NewPoolParams storage pointer)" + } + }, + "id": 12001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "vault", + "protocolFeeProvider", + "name", + "symbol", + "tokens", + "rateProviders", + "tokenRateCacheDurations", + "exemptFromYieldProtocolFeeFlags", + "amplificationParameter", + "swapFeePercentage", + "pauseWindowDuration", + "bufferPeriodDuration", + "owner", + "version" + ], + "nodeType": "FunctionCall", + "src": "2595:934:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + ], + "expression": { + "id": 11980, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2559:3:56", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 11981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2559:10:56", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 12002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2559:992:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 11979, + "name": "_create", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4275 + ], + "referencedDeclaration": 4275, + "src": "2530:7:56", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes memory) returns (address)" + } + }, + "id": 12003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2530:1039:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11978, + "name": "ComposableStablePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11876, + "src": "2492:20:56", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePool_$11876_$", + "typeString": "type(contract ComposableStablePool)" + } + }, + "id": 12004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2492:1091:56", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + }, + "functionReturnParameters": 11970, + "id": 12005, + "nodeType": "Return", + "src": "2473:1110:56" + } + ] + }, + "documentation": { + "id": 11944, + "nodeType": "StructuredDocumentation", + "src": "1901:61:56", + "text": " @dev Deploys a new `ComposableStablePool`." + }, + "functionSelector": "66b59f6c", + "id": 12007, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "create", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11967, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11946, + "mutability": "mutable", + "name": "name", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "1992:18:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11945, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1992:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11948, + "mutability": "mutable", + "name": "symbol", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2020:20:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 11947, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2020:6:56", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11951, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2050:22:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 11949, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2050:6:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 11950, + "nodeType": "ArrayTypeName", + "src": "2050:8:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11953, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2082:30:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11952, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2082:7:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11956, + "mutability": "mutable", + "name": "rateProviders", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2122:36:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 11954, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2122:13:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 11955, + "nodeType": "ArrayTypeName", + "src": "2122:15:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11959, + "mutability": "mutable", + "name": "tokenRateCacheDurations", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2168:40:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 11957, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2168:7:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11958, + "nodeType": "ArrayTypeName", + "src": "2168:9:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11962, + "mutability": "mutable", + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2218:45:56", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 11960, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2218:4:56", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 11961, + "nodeType": "ArrayTypeName", + "src": "2218:6:56", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11964, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2273:25:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 11963, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2273:7:56", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11966, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2308:13:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 11965, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2308:7:56", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1982:345:56" + }, + "returnParameters": { + "id": 11970, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 11969, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12007, + "src": "2346:20:56", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + }, + "typeName": { + "id": 11968, + "name": "ComposableStablePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 11876, + "src": "2346:20:56", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + }, + "visibility": "internal" + } + ], + "src": "2345:22:56" + }, + "scope": 12008, + "src": "1967:1623:56", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 12009, + "src": "1168:2424:56" + } + ], + "src": "688:2905:56" + }, + "id": 56 + }, + "contracts/ComposableStablePoolProtocolFees.sol": { + "ast": { + "absolutePath": "contracts/ComposableStablePoolProtocolFees.sol", + "exportedSymbols": { + "ComposableStablePoolProtocolFees": [ + 12430 + ] + }, + "id": 12431, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 12010, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:57" + }, + { + "id": 12011, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:57" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 12012, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 7233, + "src": "747:72:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "id": 12013, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 6811, + "src": "820:74:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/ProtocolFeeCache.sol", + "id": 12014, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 4692, + "src": "895:83:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/protocol-fees/InvariantGrowthProtocolSwapFees.sol", + "id": 12015, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 4418, + "src": "979:98:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolStorage.sol", + "file": "./ComposableStablePoolStorage.sol", + "id": 12016, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 14194, + "src": "1079:43:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolRates.sol", + "file": "./ComposableStablePoolRates.sol", + "id": 12017, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 13151, + "src": "1123:41:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/StableMath.sol", + "file": "./StableMath.sol", + "id": 12018, + "nodeType": "ImportDirective", + "scope": 12431, + "sourceUnit": 15488, + "src": "1165:26:57", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 12019, + "name": "ComposableStablePoolStorage", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 14193, + "src": "1251:27:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolStorage_$14193", + "typeString": "contract ComposableStablePoolStorage" + } + }, + "id": 12020, + "nodeType": "InheritanceSpecifier", + "src": "1251:27:57" + }, + { + "baseName": { + "id": 12021, + "name": "ComposableStablePoolRates", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13150, + "src": "1284:25:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + }, + "id": 12022, + "nodeType": "InheritanceSpecifier", + "src": "1284:25:57" + }, + { + "baseName": { + "id": 12023, + "name": "ProtocolFeeCache", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4691, + "src": "1315:16:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ProtocolFeeCache_$4691", + "typeString": "contract ProtocolFeeCache" + } + }, + "id": 12024, + "nodeType": "InheritanceSpecifier", + "src": "1315:16:57" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3860, + 3955, + 4136, + 4691, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 13150, + 14193 + ], + "contractKind": "contract", + "fullyImplemented": false, + "id": 12430, + "linearizedBaseContracts": [ + 12430, + 4691, + 13150, + 14193, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "ComposableStablePoolProtocolFees", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 12027, + "libraryName": { + "id": 12025, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "1344:10:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "1338:29:57", + "typeName": { + "id": 12026, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1359:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 12030, + "libraryName": { + "id": 12028, + "name": "WordCodec", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6810, + "src": "1378:9:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WordCodec_$6810", + "typeString": "library WordCodec" + } + }, + "nodeType": "UsingForDirective", + "src": "1372:28:57", + "typeName": { + "id": 12029, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1392:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "constant": false, + "id": 12032, + "mutability": "mutable", + "name": "_lastJoinExitData", + "nodeType": "VariableDeclaration", + "scope": 12430, + "src": "2438:33:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12031, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2438:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 12035, + "mutability": "constant", + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 12430, + "src": "2478:66:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12033, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2478:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "30", + "id": 12034, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2543:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 12038, + "mutability": "constant", + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_SIZE", + "nodeType": "VariableDeclaration", + "scope": 12430, + "src": "2550:66:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12036, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2550:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "323333", + "id": 12037, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2613:3:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_233_by_1", + "typeString": "int_const 233" + }, + "value": "233" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 12043, + "mutability": "constant", + "name": "_LAST_JOIN_EXIT_AMPLIFICATION_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 12430, + "src": "2622:147:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12039, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2622:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12042, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "id": 12040, + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12035, + "src": "2686:37:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 12041, + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_SIZE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12038, + "src": "2734:35:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2686:83:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 12046, + "mutability": "constant", + "name": "_LAST_JOIN_EXIT_AMPLIFICATION_SIZE", + "nodeType": "VariableDeclaration", + "scope": 12430, + "src": "2776:64:57", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12044, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2776:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3233", + "id": 12045, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2838:2:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_23_by_1", + "typeString": "int_const 23" + }, + "value": "23" + }, + "visibility": "private" + }, + { + "body": { + "id": 12107, + "nodeType": "Block", + "src": "3573:1419:57", + "statements": [ + { + "assignments": [ + 12065, + 12068 + ], + "declarations": [ + { + "constant": false, + "id": 12065, + "mutability": "mutable", + "name": "virtualSupply", + "nodeType": "VariableDeclaration", + "scope": 12107, + "src": "3584:21:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12064, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3584:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12068, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 12107, + "src": "3607:25:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12066, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3607:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12067, + "nodeType": "ArrayTypeName", + "src": "3607:9:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 12072, + "initialValue": { + "arguments": [ + { + "id": 12070, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12050, + "src": "3661:18:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 12069, + "name": "_dropBptItemFromBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13877, + "src": "3636:24:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256,uint256[] memory)" + } + }, + "id": 12071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3636:44:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3583:97:57" + }, + { + "assignments": [ + 12074, + 12076 + ], + "declarations": [ + { + "constant": false, + "id": 12074, + "mutability": "mutable", + "name": "expectedProtocolOwnershipPercentage", + "nodeType": "VariableDeclaration", + "scope": 12107, + "src": "3854:43:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12073, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3854:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12076, + "mutability": "mutable", + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 12107, + "src": "3911:43:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12075, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3911:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12082, + "initialValue": { + "arguments": [ + { + "id": 12078, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12068, + "src": "4003:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 12079, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12052, + "src": "4013:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12080, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12054, + "src": "4030:25:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12077, + "name": "_getProtocolPoolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12190, + "src": "3967:35:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 12081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3967:89:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3840:216:57" + }, + { + "assignments": [ + 12084 + ], + "declarations": [ + { + "constant": false, + "id": 12084, + "mutability": "mutable", + "name": "protocolFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 12107, + "src": "4369:25:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12083, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4369:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12090, + "initialValue": { + "arguments": [ + { + "id": 12087, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12065, + "src": "4453:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12088, + "name": "expectedProtocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12074, + "src": "4480:35:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12085, + "name": "ProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4722, + "src": "4397:12:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFees_$4722_$", + "typeString": "type(library ProtocolFees)" + } + }, + "id": 12086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bptForPoolOwnershipPercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 4721, + "src": "4397:42:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4397:128:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4369:156:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12091, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12084, + "src": "4540:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 12092, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4560:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4540:21:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12099, + "nodeType": "IfStatement", + "src": "4536:87:57", + "trueBody": { + "id": 12098, + "nodeType": "Block", + "src": "4563:60:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12095, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12084, + "src": "4594:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12094, + "name": "_payProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3416, + "src": "4577:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 12096, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4577:35:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12097, + "nodeType": "ExpressionStatement", + "src": "4577:35:57" + } + ] + } + }, + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12100, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12065, + "src": "4904:13:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 12101, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12084, + "src": "4920:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4904:33:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12103, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12068, + "src": "4939:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 12104, + "name": "currentInvariantWithLastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12076, + "src": "4949:35:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 12105, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4903:82:57", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256)" + } + }, + "functionReturnParameters": 12063, + "id": 12106, + "nodeType": "Return", + "src": "4896:89:57" + } + ] + }, + "documentation": { + "id": 12047, + "nodeType": "StructuredDocumentation", + "src": "2847:434:57", + "text": " @dev Calculates due protocol fees originating from accumulated swap fees and yield of non-exempt tokens, pays\n them by minting BPT, and returns the actual supply and current balances.\n We also return the current invariant computed using the amplification factor at the last join or exit, which can\n be useful to skip computations in scenarios where the amplification factor is not changing." + }, + "id": 12108, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_payProtocolFeesBeforeJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12055, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12050, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 12108, + "src": "3335:35:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12048, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3335:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12049, + "nodeType": "ArrayTypeName", + "src": "3335:9:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12052, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 12108, + "src": "3380:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12051, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3380:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12054, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 12108, + "src": "3413:33:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12053, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3413:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3325:127:57" + }, + "returnParameters": { + "id": 12063, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12057, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12108, + "src": "3500:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12056, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3500:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12060, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12108, + "src": "3521:16:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12058, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3521:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12059, + "nodeType": "ArrayTypeName", + "src": "3521:9:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12062, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12108, + "src": "3551:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12061, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3551:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3486:82:57" + }, + "scope": 12430, + "src": "3286:1706:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12189, + "nodeType": "Block", + "src": "5201:5935:57", + "statements": [ + { + "assignments": [ + 12123, + 12125, + 12127 + ], + "declarations": [ + { + "constant": false, + "id": 12123, + "mutability": "mutable", + "name": "swapFeeGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "6628:30:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6628:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12125, + "mutability": "mutable", + "name": "totalNonExemptGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "6672:37:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12124, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6672:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12127, + "mutability": "mutable", + "name": "totalGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "6723:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12126, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6723:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12132, + "initialValue": { + "arguments": [ + { + "id": 12129, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12111, + "src": "6785:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 12130, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12113, + "src": "6795:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12128, + "name": "_getGrowthInvariants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12268, + "src": "6764:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256) view returns (uint256,uint256,uint256)" + } + }, + "id": 12131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6764:47:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6614:197:57" + }, + { + "assignments": [ + 12134 + ], + "declarations": [ + { + "constant": false, + "id": 12134, + "mutability": "mutable", + "name": "swapFeeGrowthInvariantDelta", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "9748:35:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12133, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9748:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12144, + "initialValue": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12135, + "name": "swapFeeGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12123, + "src": "9787:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 12136, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12115, + "src": "9812:25:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9787:50:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 12138, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9786:52:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 12142, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9918:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 12143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9786:133:57", + "trueExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12139, + "name": "swapFeeGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12123, + "src": "9853:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12140, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12115, + "src": "9878:25:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9853:50:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9748:171:57" + }, + { + "assignments": [ + 12146 + ], + "declarations": [ + { + "constant": false, + "id": 12146, + "mutability": "mutable", + "name": "nonExemptYieldGrowthInvariantDelta", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "9929:42:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12145, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9929:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12156, + "initialValue": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12147, + "name": "totalNonExemptGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12125, + "src": "9975:29:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 12148, + "name": "swapFeeGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12123, + "src": "10007:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9975:54:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 12150, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9974:56:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 12154, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10114:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 12155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9974:141:57", + "trueExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12151, + "name": "totalNonExemptGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12125, + "src": "10045:29:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12152, + "name": "swapFeeGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12123, + "src": "10077:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10045:54:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9929:186:57" + }, + { + "assignments": [ + 12158 + ], + "declarations": [ + { + "constant": false, + "id": 12158, + "mutability": "mutable", + "name": "protocolSwapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "10461:33:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12157, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10461:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12169, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 12165, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "10606:15:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 12166, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "10606:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12164, + "name": "getProtocolFeePercentageCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4578, + "src": "10576:29:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 12167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10576:51:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 12161, + "name": "totalGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12127, + "src": "10533:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12159, + "name": "swapFeeGrowthInvariantDelta", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12134, + "src": "10497:27:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "10497:35:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10497:57:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "10497:65:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10497:140:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10461:176:57" + }, + { + "assignments": [ + 12171 + ], + "declarations": [ + { + "constant": false, + "id": 12171, + "mutability": "mutable", + "name": "protocolYieldPercentage", + "nodeType": "VariableDeclaration", + "scope": 12189, + "src": "10648:31:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12170, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10648:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12182, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 12178, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "10798:15:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 12179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "YIELD", + "nodeType": "MemberAccess", + "referencedDeclaration": 1278, + "src": "10798:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12177, + "name": "getProtocolFeePercentageCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4578, + "src": "10768:29:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 12180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10768:52:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 12174, + "name": "totalGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12127, + "src": "10725:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12172, + "name": "nonExemptYieldGrowthInvariantDelta", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12146, + "src": "10682:34:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "10682:42:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10682:64:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "10682:72:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10682:148:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10648:182:57" + }, + { + "expression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12183, + "name": "protocolSwapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12158, + "src": "11055:25:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 12184, + "name": "protocolYieldPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12171, + "src": "11083:23:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11055:51:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12186, + "name": "totalGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12127, + "src": "11108:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 12187, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11054:75:57", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 12121, + "id": 12188, + "nodeType": "Return", + "src": "11047:82:57" + } + ] + }, + "id": 12190, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getProtocolPoolOwnershipPercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12111, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 12190, + "src": "5052:25:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12109, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5052:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12110, + "nodeType": "ArrayTypeName", + "src": "5052:9:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12113, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 12190, + "src": "5087:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5087:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12115, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 12190, + "src": "5120:33:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5120:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5042:117:57" + }, + "returnParameters": { + "id": 12121, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12118, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12190, + "src": "5183:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5183:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12120, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12190, + "src": "5192:7:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12119, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5192:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5182:18:57" + }, + "scope": 12430, + "src": "4998:6138:57", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12267, + "nodeType": "Block", + "src": "11422:1865:57", + "statements": [ + { + "expression": { + "id": 12213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12204, + "name": "swapFeeGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12198, + "src": "11577:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12207, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12195, + "src": "11646:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 12209, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12193, + "src": "11696:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "hexValue": "74727565", + "id": 12210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11706:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 12208, + "name": "_getAdjustedBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13049, + "src": "11675:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bool_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,bool) view returns (uint256[] memory)" + } + }, + "id": 12211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11675:36:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 12205, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "11602:10:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 12206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "11602:30:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 12212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11602:142:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11577:167:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12214, + "nodeType": "ExpressionStatement", + "src": "11577:167:57" + }, + { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12215, + "name": "_areNoTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14149, + "src": "11956:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 12216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11956:20:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12230, + "name": "_areAllTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14140, + "src": "12438:19:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 12231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12438:21:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 12264, + "nodeType": "Block", + "src": "12805:476:57", + "statements": [ + { + "expression": { + "id": 12254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12245, + "name": "totalNonExemptGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12200, + "src": "12976:29:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12248, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12195, + "src": "13056:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 12250, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12193, + "src": "13110:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "hexValue": "66616c7365", + "id": 12251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13120:5:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 12249, + "name": "_getAdjustedBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13049, + "src": "13089:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bool_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,bool) view returns (uint256[] memory)" + } + }, + "id": 12252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13089:37:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 12246, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "13008:10:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 12247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "13008:30:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 12253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13008:167:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12976:199:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12255, + "nodeType": "ExpressionStatement", + "src": "12976:199:57" + }, + { + "expression": { + "id": 12262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12256, + "name": "totalGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12202, + "src": "13190:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12259, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12195, + "src": "13244:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12260, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12193, + "src": "13261:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 12257, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "13213:10:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 12258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "13213:30:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 12261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13213:57:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13190:80:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12263, + "nodeType": "ExpressionStatement", + "src": "13190:80:57" + } + ] + }, + "id": 12265, + "nodeType": "IfStatement", + "src": "12434:847:57", + "trueBody": { + "id": 12244, + "nodeType": "Block", + "src": "12461:338:57", + "statements": [ + { + "expression": { + "id": 12234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12232, + "name": "totalNonExemptGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12200, + "src": "12640:29:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 12233, + "name": "swapFeeGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12198, + "src": "12672:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12640:54:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12235, + "nodeType": "ExpressionStatement", + "src": "12640:54:57" + }, + { + "expression": { + "id": 12242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12236, + "name": "totalGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12202, + "src": "12708:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12239, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12195, + "src": "12762:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12240, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12193, + "src": "12779:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 12237, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "12731:10:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 12238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "12731:30:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 12241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12731:57:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12708:80:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12243, + "nodeType": "ExpressionStatement", + "src": "12708:80:57" + } + ] + } + }, + "id": 12266, + "nodeType": "IfStatement", + "src": "11952:1329:57", + "trueBody": { + "id": 12229, + "nodeType": "Block", + "src": "11978:450:57", + "statements": [ + { + "expression": { + "id": 12223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12217, + "name": "totalNonExemptGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12200, + "src": "12262:29:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12220, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12195, + "src": "12325:15:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12221, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12193, + "src": "12342:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 12218, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "12294:10:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 12219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "12294:30:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 12222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12294:57:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12262:89:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12224, + "nodeType": "ExpressionStatement", + "src": "12262:89:57" + }, + { + "expression": { + "id": 12227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12225, + "name": "totalGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12202, + "src": "12365:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 12226, + "name": "totalNonExemptGrowthInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12200, + "src": "12388:29:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12365:52:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12228, + "nodeType": "ExpressionStatement", + "src": "12365:52:57" + } + ] + } + } + ] + }, + "id": 12268, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getGrowthInvariants", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12196, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12193, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 12268, + "src": "11172:25:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12191, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11172:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12192, + "nodeType": "ArrayTypeName", + "src": "11172:9:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12195, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 12268, + "src": "11199:23:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11199:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11171:52:57" + }, + "returnParameters": { + "id": 12203, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12198, + "mutability": "mutable", + "name": "swapFeeGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 12268, + "src": "11284:30:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11284:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12200, + "mutability": "mutable", + "name": "totalNonExemptGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 12268, + "src": "11328:37:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12199, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11328:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12202, + "mutability": "mutable", + "name": "totalGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 12268, + "src": "11379:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12201, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11379:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11270:147:57" + }, + "scope": 12430, + "src": "11142:2145:57", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12353, + "nodeType": "Block", + "src": "13832:2258:57", + "statements": [ + { + "assignments": [ + 12284 + ], + "declarations": [ + { + "constant": false, + "id": 12284, + "mutability": "mutable", + "name": "postJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 12353, + "src": "14462:29:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14462:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12290, + "initialValue": { + "arguments": [ + { + "id": 12287, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12271, + "src": "14525:10:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12288, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12274, + "src": "14537:8:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 12285, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "14494:10:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 12286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "14494:30:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 12289, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14494:52:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14462:84:57" + }, + { + "assignments": [ + 12292 + ], + "declarations": [ + { + "constant": false, + "id": 12292, + "mutability": "mutable", + "name": "supplyGrowthRatio", + "nodeType": "VariableDeclaration", + "scope": 12353, + "src": "14626:25:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12291, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14626:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12297, + "initialValue": { + "arguments": [ + { + "id": 12295, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12278, + "src": "14681:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12293, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12280, + "src": "14654:18:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "14654:26:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14654:45:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14626:73:57" + }, + { + "assignments": [ + 12299 + ], + "declarations": [ + { + "constant": false, + "id": 12299, + "mutability": "mutable", + "name": "feelessInvariant", + "nodeType": "VariableDeclaration", + "scope": 12353, + "src": "14709:24:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12298, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14709:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12304, + "initialValue": { + "arguments": [ + { + "id": 12302, + "name": "supplyGrowthRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12292, + "src": "14765:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12300, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12276, + "src": "14736:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "14736:28:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14736:47:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14709:74:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12305, + "name": "postJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12284, + "src": "15202:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 12306, + "name": "feelessInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12299, + "src": "15226:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15202:40:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12347, + "nodeType": "IfStatement", + "src": "15198:821:57", + "trueBody": { + "id": 12346, + "nodeType": "Block", + "src": "15244:775:57", + "statements": [ + { + "assignments": [ + 12309 + ], + "declarations": [ + { + "constant": false, + "id": 12309, + "mutability": "mutable", + "name": "invariantDeltaFromFees", + "nodeType": "VariableDeclaration", + "scope": 12346, + "src": "15258:30:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12308, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15258:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12313, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12310, + "name": "postJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12284, + "src": "15291:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 12311, + "name": "feelessInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12299, + "src": "15315:16:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15291:40:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15258:73:57" + }, + { + "assignments": [ + 12315 + ], + "declarations": [ + { + "constant": false, + "id": 12315, + "mutability": "mutable", + "name": "protocolOwnershipPercentage", + "nodeType": "VariableDeclaration", + "scope": 12346, + "src": "15487:35:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12314, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15487:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12328, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 12320, + "name": "invariantDeltaFromFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12309, + "src": "15564:22:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "expression": { + "id": 12322, + "name": "ProtocolFeeType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1282, + "src": "15618:15:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeType_$1282_$", + "typeString": "type(library ProtocolFeeType)" + } + }, + "id": 12323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "SWAP", + "nodeType": "MemberAccess", + "referencedDeclaration": 1272, + "src": "15618:20:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12321, + "name": "getProtocolFeePercentageCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4578, + "src": "15588:29:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 12324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15588:51:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12318, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "15555:4:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 12319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "15555:8:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15555:85:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12326, + "name": "postJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12284, + "src": "15658:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12316, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "15525:4:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 12317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "15525:12:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15525:168:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15487:206:57" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12329, + "name": "protocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12315, + "src": "15712:27:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 12330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15742:1:57", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "15712:31:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12345, + "nodeType": "IfStatement", + "src": "15708:301:57", + "trueBody": { + "id": 12344, + "nodeType": "Block", + "src": "15745:264:57", + "statements": [ + { + "assignments": [ + 12333 + ], + "declarations": [ + { + "constant": false, + "id": 12333, + "mutability": "mutable", + "name": "protocolFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 12344, + "src": "15763:25:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15763:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12339, + "initialValue": { + "arguments": [ + { + "id": 12336, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12280, + "src": "15855:18:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12337, + "name": "protocolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12315, + "src": "15895:27:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12334, + "name": "ProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4722, + "src": "15791:12:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFees_$4722_$", + "typeString": "type(library ProtocolFees)" + } + }, + "id": 12335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bptForPoolOwnershipPercentage", + "nodeType": "MemberAccess", + "referencedDeclaration": 4721, + "src": "15791:42:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 12338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15791:149:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15763:177:57" + }, + { + "expression": { + "arguments": [ + { + "id": 12341, + "name": "protocolFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12333, + "src": "15976:17:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12340, + "name": "_payProtocolFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3416, + "src": "15959:16:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 12342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15959:35:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12343, + "nodeType": "ExpressionStatement", + "src": "15959:35:57" + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 12349, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12271, + "src": "16049:10:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12350, + "name": "postJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12284, + "src": "16061:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12348, + "name": "_updatePostJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12382, + "src": "16029:19:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 12351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16029:54:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12352, + "nodeType": "ExpressionStatement", + "src": "16029:54:57" + } + ] + }, + "documentation": { + "id": 12269, + "nodeType": "StructuredDocumentation", + "src": "13293:308:57", + "text": " @dev Store the latest invariant based on the adjusted balances after the join or exit, using current rates.\n Also cache the amp factor, so that the invariant is not affected by amp updates between joins and exits.\n Pay protocol fees due on any current join or exit swap." + }, + "id": 12354, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateInvariantAfterJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12281, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12271, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 12354, + "src": "13654:18:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12270, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13654:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12274, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 12354, + "src": "13682:25:57", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12272, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13682:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12273, + "nodeType": "ArrayTypeName", + "src": "13682:9:57", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12276, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 12354, + "src": "13717:28:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12275, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13717:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12278, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 12354, + "src": "13755:25:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12277, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13755:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12280, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 12354, + "src": "13790:26:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12279, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13790:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13644:178:57" + }, + "returnParameters": { + "id": 12282, + "nodeType": "ParameterList", + "parameters": [], + "src": "13832:0:57" + }, + "scope": 12430, + "src": "13606:2484:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12381, + "nodeType": "Block", + "src": "16455:379:57", + "statements": [ + { + "expression": { + "id": 12376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12362, + "name": "_lastJoinExitData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12032, + "src": "16465:17:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 12375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 12365, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12357, + "src": "16518:10:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12366, + "name": "_LAST_JOIN_EXIT_AMPLIFICATION_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12043, + "src": "16530:36:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12367, + "name": "_LAST_JOIN_EXIT_AMPLIFICATION_SIZE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12046, + "src": "16568:34:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12363, + "name": "WordCodec", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "16497:9:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WordCodec_$6810_$", + "typeString": "type(library WordCodec)" + } + }, + "id": 12364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "encodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6445, + "src": "16497:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 12368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16497:106:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "id": 12371, + "name": "postJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12359, + "src": "16656:21:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12372, + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12035, + "src": "16695:37:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12373, + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_SIZE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12038, + "src": "16750:35:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12369, + "name": "WordCodec", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "16618:9:57", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WordCodec_$6810_$", + "typeString": "type(library WordCodec)" + } + }, + "id": 12370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "encodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6445, + "src": "16618:20:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 12374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16618:181:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "16497:302:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "16465:334:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12377, + "nodeType": "ExpressionStatement", + "src": "16465:334:57" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12378, + "name": "_updateOldRates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12967, + "src": "16810:15:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 12379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16810:17:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12380, + "nodeType": "ExpressionStatement", + "src": "16810:17:57" + } + ] + }, + "documentation": { + "id": 12355, + "nodeType": "StructuredDocumentation", + "src": "16096:265:57", + "text": " @dev Update the stored values of the amp and final post-join/exit invariant, to reset the basis for protocol\n swap fees. Also copy the current rates to the old rates, to establish the new protocol yield basis for protocol\n yield fees." + }, + "id": 12382, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updatePostJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12360, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12357, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 12382, + "src": "16395:18:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12356, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16395:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12359, + "mutability": "mutable", + "name": "postJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 12382, + "src": "16415:29:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16415:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16394:51:57" + }, + "returnParameters": { + "id": 12361, + "nodeType": "ParameterList", + "parameters": [], + "src": "16455:0:57" + }, + "scope": 12430, + "src": "16366:468:57", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12410, + "nodeType": "Block", + "src": "17124:384:57", + "statements": [ + { + "assignments": [ + 12391 + ], + "declarations": [ + { + "constant": false, + "id": 12391, + "mutability": "mutable", + "name": "rawData", + "nodeType": "VariableDeclaration", + "scope": 12410, + "src": "17134:15:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12390, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "17134:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 12393, + "initialValue": { + "id": 12392, + "name": "_lastJoinExitData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12032, + "src": "17152:17:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17134:35:57" + }, + { + "expression": { + "id": 12400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12394, + "name": "lastJoinExitAmplification", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12386, + "src": "17180:25:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12397, + "name": "_LAST_JOIN_EXIT_AMPLIFICATION_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12043, + "src": "17240:36:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12398, + "name": "_LAST_JOIN_EXIT_AMPLIFICATION_SIZE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12046, + "src": "17290:34:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12395, + "name": "rawData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12391, + "src": "17208:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12396, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "17208:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 12399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17208:126:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17180:154:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12401, + "nodeType": "ExpressionStatement", + "src": "17180:154:57" + }, + { + "expression": { + "id": 12408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12402, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12388, + "src": "17345:25:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12405, + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12035, + "src": "17405:37:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12406, + "name": "_LAST_POST_JOIN_EXIT_INVARIANT_SIZE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12038, + "src": "17456:35:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12403, + "name": "rawData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12391, + "src": "17373:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "17373:18:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 12407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17373:128:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17345:156:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12409, + "nodeType": "ExpressionStatement", + "src": "17345:156:57" + } + ] + }, + "documentation": { + "id": 12383, + "nodeType": "StructuredDocumentation", + "src": "16840:129:57", + "text": " @notice Return the amplification factor and invariant as of the most recent join or exit (including BPT swaps)" + }, + "functionSelector": "3c975d51", + "id": 12411, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getLastJoinExitData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12384, + "nodeType": "ParameterList", + "parameters": [], + "src": "17002:2:57" + }, + "returnParameters": { + "id": 12389, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12386, + "mutability": "mutable", + "name": "lastJoinExitAmplification", + "nodeType": "VariableDeclaration", + "scope": 12411, + "src": "17050:33:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12385, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17050:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12388, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 12411, + "src": "17085:33:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12387, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17085:7:57", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17049:70:57" + }, + "scope": 12430, + "src": "16974:534:57", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2907, + 3949, + 13149 + ], + "body": { + "id": 12428, + "nodeType": "Block", + "src": "18131:58:57", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12425, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12414, + "src": "18173:8:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 12423, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "18148:5:57", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePoolProtocolFees_$12430", + "typeString": "contract super ComposableStablePoolProtocolFees" + } + }, + "id": 12424, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_isOwnerOnlyAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 13149, + "src": "18148:24:57", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 12426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18148:34:57", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 12422, + "id": 12427, + "nodeType": "Return", + "src": "18141:41:57" + } + ] + }, + "documentation": { + "id": 12412, + "nodeType": "StructuredDocumentation", + "src": "17514:145:57", + "text": " @dev Inheritance rules still require us to override this in the most derived contract, even though\n it only calls super." + }, + "id": 12429, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 12419, + "nodeType": "OverrideSpecifier", + "overrides": [ + { + "id": 12416, + "name": "BasePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3860, + "src": "18011:8:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + }, + { + "id": 12417, + "name": "BasePoolAuthorization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3955, + "src": "18033:21:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolAuthorization_$3955", + "typeString": "contract BasePoolAuthorization" + } + }, + { + "id": 12418, + "name": "ComposableStablePoolRates", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13150, + "src": "18068:25:57", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + } + ], + "src": "17764:339:57" + }, + "parameters": { + "id": 12415, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12414, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 12429, + "src": "17692:16:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12413, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "17692:7:57", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "17691:18:57" + }, + "returnParameters": { + "id": 12422, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12421, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12429, + "src": "18121:4:57", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 12420, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "18121:4:57", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "18120:6:57" + }, + "scope": 12430, + "src": "17664:525:57", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 12431, + "src": "1193:16998:57" + } + ], + "src": "688:17504:57" + }, + "id": 57 + }, + "contracts/ComposableStablePoolRates.sol": { + "ast": { + "absolutePath": "contracts/ComposableStablePoolRates.sol", + "exportedSymbols": { + "ComposableStablePoolRates": [ + 13150 + ] + }, + "id": 13151, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 12432, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:58" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 12433, + "nodeType": "ImportDirective", + "scope": 13151, + "sourceUnit": 1153, + "src": "713:87:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "id": 12434, + "nodeType": "ImportDirective", + "scope": 13151, + "sourceUnit": 429, + "src": "801:77:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "id": 12435, + "nodeType": "ImportDirective", + "scope": 13151, + "sourceUnit": 5883, + "src": "880:77:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/InputHelpers.sol", + "id": 12436, + "nodeType": "ImportDirective", + "scope": 13151, + "sourceUnit": 5995, + "src": "958:77:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/rates/PriceRateCache.sol", + "id": 12437, + "nodeType": "ImportDirective", + "scope": 13151, + "sourceUnit": 4962, + "src": "1036:73:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolStorage.sol", + "file": "./ComposableStablePoolStorage.sol", + "id": 12438, + "nodeType": "ImportDirective", + "scope": 13151, + "sourceUnit": 14194, + "src": "1111:43:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 12439, + "name": "ComposableStablePoolStorage", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 14193, + "src": "1203:27:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolStorage_$14193", + "typeString": "contract ComposableStablePoolStorage" + } + }, + "id": 12440, + "nodeType": "InheritanceSpecifier", + "src": "1203:27:58" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3860, + 3955, + 4136, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 14193 + ], + "contractKind": "contract", + "fullyImplemented": false, + "id": 13150, + "linearizedBaseContracts": [ + 13150, + 14193, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "ComposableStablePoolRates", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 12443, + "libraryName": { + "id": 12441, + "name": "PriceRateCache", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4961, + "src": "1243:14:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PriceRateCache_$4961", + "typeString": "library PriceRateCache" + } + }, + "nodeType": "UsingForDirective", + "src": "1237:33:58", + "typeName": { + "id": 12442, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1262:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "id": 12446, + "libraryName": { + "id": 12444, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "1281:10:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "1275:29:58", + "typeName": { + "id": 12445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1296:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "canonicalName": "ComposableStablePoolRates.RatesParams", + "id": 12456, + "members": [ + { + "constant": false, + "id": 12449, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 12456, + "src": "1339:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 12447, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1339:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 12448, + "nodeType": "ArrayTypeName", + "src": "1339:8:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12452, + "mutability": "mutable", + "name": "rateProviders", + "nodeType": "VariableDeclaration", + "scope": 12456, + "src": "1364:29:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 12450, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "1364:13:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 12451, + "nodeType": "ArrayTypeName", + "src": "1364:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12455, + "mutability": "mutable", + "name": "tokenRateCacheDurations", + "nodeType": "VariableDeclaration", + "scope": 12456, + "src": "1403:33:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12453, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1403:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12454, + "nodeType": "ArrayTypeName", + "src": "1403:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "name": "RatesParams", + "nodeType": "StructDefinition", + "scope": 13150, + "src": "1310:133:58", + "visibility": "public" + }, + { + "constant": false, + "id": 12460, + "mutability": "mutable", + "name": "_tokenRateCaches", + "nodeType": "VariableDeclaration", + "scope": 13150, + "src": "2228:53:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + }, + "typeName": { + "id": 12459, + "keyType": { + "id": 12457, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2236:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "2228:27:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + }, + "valueType": { + "id": 12458, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2247:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + "visibility": "internal" + }, + { + "anonymous": false, + "id": 12466, + "name": "TokenRateCacheUpdated", + "nodeType": "EventDefinition", + "parameters": { + "id": 12465, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12462, + "indexed": true, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 12466, + "src": "2316:26:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12461, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2316:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12464, + "indexed": false, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 12466, + "src": "2344:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12463, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2344:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2315:42:58" + }, + "src": "2288:70:58" + }, + { + "anonymous": false, + "id": 12474, + "name": "TokenRateProviderSet", + "nodeType": "EventDefinition", + "parameters": { + "id": 12473, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12468, + "indexed": true, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 12474, + "src": "2390:26:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12467, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2390:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12470, + "indexed": true, + "mutability": "mutable", + "name": "provider", + "nodeType": "VariableDeclaration", + "scope": 12474, + "src": "2418:30:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 12469, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2418:13:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12472, + "indexed": false, + "mutability": "mutable", + "name": "cacheDuration", + "nodeType": "VariableDeclaration", + "scope": 12474, + "src": "2450:21:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12471, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2450:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2389:83:58" + }, + "src": "2363:110:58" + }, + { + "body": { + "id": 12602, + "nodeType": "Block", + "src": "2522:1226:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 12482, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "2581:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12483, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 12449, + "src": "2581:17:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 12484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2581:24:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 12485, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "2619:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12486, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 12452, + "src": "2619:24:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 12487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2619:31:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 12488, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "2664:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12489, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateCacheDurations", + "nodeType": "MemberAccess", + "referencedDeclaration": 12455, + "src": "2664:34:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 12490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2664:41:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12479, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "2532:12:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 12481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5924, + "src": "2532:35:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256) pure" + } + }, + "id": 12491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2532:183:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12492, + "nodeType": "ExpressionStatement", + "src": "2532:183:58" + }, + { + "assignments": [ + 12496 + ], + "declarations": [ + { + "constant": false, + "id": 12496, + "mutability": "mutable", + "name": "registeredTokens", + "nodeType": "VariableDeclaration", + "scope": 12602, + "src": "2726:32:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 12494, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2726:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 12495, + "nodeType": "ArrayTypeName", + "src": "2726:8:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + } + ], + "id": 12504, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 12498, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "2775:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12499, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 12449, + "src": "2775:17:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 12501, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2801:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + ], + "id": 12500, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "2794:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 12502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2794:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 12497, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "2761:13:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 12503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2761:46:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2726:81:58" + }, + { + "assignments": [ + 12506 + ], + "declarations": [ + { + "constant": false, + "id": 12506, + "mutability": "mutable", + "name": "bptIndex", + "nodeType": "VariableDeclaration", + "scope": 12602, + "src": "2817:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12505, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2817:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12507, + "nodeType": "VariableDeclarationStatement", + "src": "2817:16:58" + }, + { + "body": { + "id": 12529, + "nodeType": "Block", + "src": "3005:72:58", + "statements": [] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 12525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12515, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12506, + "src": "2913:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 12516, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2924:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2913:12:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 12524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 12518, + "name": "registeredTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12496, + "src": "2929:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 12520, + "indexExpression": { + "id": 12519, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12506, + "src": "2946:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2929:26:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [ + { + "id": 12522, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2965:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + ], + "id": 12521, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "2958:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 12523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2958:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "2929:41:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2913:57:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12530, + "initializationExpression": { + "expression": { + "id": 12513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12508, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12506, + "src": "2861:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 12509, + "name": "registeredTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12496, + "src": "2872:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 12510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2872:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 12511, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2898:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2872:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2861:38:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12514, + "nodeType": "ExpressionStatement", + "src": "2861:38:58" + }, + "loopExpression": { + "expression": { + "id": 12527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "--", + "prefix": false, + "src": "2984:10:58", + "subExpression": { + "id": 12526, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12506, + "src": "2984:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12528, + "nodeType": "ExpressionStatement", + "src": "2984:10:58" + }, + "nodeType": "ForStatement", + "src": "2843:234:58" + }, + { + "assignments": [ + 12532 + ], + "declarations": [ + { + "constant": false, + "id": 12532, + "mutability": "mutable", + "name": "skipBpt", + "nodeType": "VariableDeclaration", + "scope": 12602, + "src": "3087:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12531, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3087:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12534, + "initialValue": { + "hexValue": "30", + "id": 12533, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3105:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "3087:19:58" + }, + { + "body": { + "id": 12600, + "nodeType": "Block", + "src": "3171:571:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12547, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3189:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 12548, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12506, + "src": "3194:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3189:13:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12555, + "nodeType": "IfStatement", + "src": "3185:63:58", + "trueBody": { + "id": 12554, + "nodeType": "Block", + "src": "3204:44:58", + "statements": [ + { + "expression": { + "id": 12552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12550, + "name": "skipBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12532, + "src": "3222:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "31", + "id": 12551, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3232:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3222:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12553, + "nodeType": "ExpressionStatement", + "src": "3222:11:58" + } + ] + } + }, + { + "assignments": [ + 12557 + ], + "declarations": [ + { + "constant": false, + "id": 12557, + "mutability": "mutable", + "name": "k", + "nodeType": "VariableDeclaration", + "scope": 12600, + "src": "3262:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12556, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3262:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12561, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12558, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3274:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 12559, + "name": "skipBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12532, + "src": "3278:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3274:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3262:23:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "id": 12569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "expression": { + "id": 12562, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "3303:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12563, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 12452, + "src": "3303:24:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 12565, + "indexExpression": { + "id": 12564, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3328:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3303:27:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12567, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3348:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 12566, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "3334:13:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 12568, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3334:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "3303:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12599, + "nodeType": "IfStatement", + "src": "3299:433:58", + "trueBody": { + "id": 12598, + "nodeType": "Block", + "src": "3352:380:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12571, + "name": "k", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12557, + "src": "3392:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "expression": { + "id": 12572, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "3395:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12573, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 12452, + "src": "3395:24:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 12575, + "indexExpression": { + "id": 12574, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3420:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3395:27:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "baseExpression": { + "expression": { + "id": 12576, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "3424:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12577, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateCacheDurations", + "nodeType": "MemberAccess", + "referencedDeclaration": 12455, + "src": "3424:34:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 12579, + "indexExpression": { + "id": 12578, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3459:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3424:37:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12570, + "name": "_updateTokenRateCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12863, + "src": "3370:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 12580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3370:92:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12581, + "nodeType": "ExpressionStatement", + "src": "3370:92:58" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12583, + "name": "k", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12557, + "src": "3507:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "expression": { + "id": 12584, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "3510:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12585, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 12452, + "src": "3510:24:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 12587, + "indexExpression": { + "id": 12586, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3535:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3510:27:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "baseExpression": { + "expression": { + "id": 12588, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "3539:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12589, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateCacheDurations", + "nodeType": "MemberAccess", + "referencedDeclaration": 12455, + "src": "3539:34:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 12591, + "indexExpression": { + "id": 12590, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3574:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3539:37:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12582, + "name": "TokenRateProviderSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12474, + "src": "3486:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 12592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3486:91:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12593, + "nodeType": "EmitStatement", + "src": "3481:96:58" + }, + { + "expression": { + "arguments": [ + { + "id": 12595, + "name": "k", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12557, + "src": "3715:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12594, + "name": "_updateOldRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12624, + "src": "3700:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 12596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3700:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12597, + "nodeType": "ExpressionStatement", + "src": "3700:17:58" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12539, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3136:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "expression": { + "id": 12540, + "name": "rateParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12476, + "src": "3140:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + }, + "id": 12541, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 12449, + "src": "3140:17:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 12542, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "3140:24:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3136:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12601, + "initializationExpression": { + "assignments": [ + 12536 + ], + "declarations": [ + { + "constant": false, + "id": 12536, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 12601, + "src": "3121:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12535, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3121:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12538, + "initialValue": { + "hexValue": "30", + "id": 12537, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3133:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "3121:13:58" + }, + "loopExpression": { + "expression": { + "id": 12545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "3166:3:58", + "subExpression": { + "id": 12544, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12536, + "src": "3166:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12546, + "nodeType": "ExpressionStatement", + "src": "3166:3:58" + }, + "nodeType": "ForStatement", + "src": "3116:626:58" + } + ] + }, + "id": 12603, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12477, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12476, + "mutability": "mutable", + "name": "rateParams", + "nodeType": "VariableDeclaration", + "scope": 12603, + "src": "2491:29:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams" + }, + "typeName": { + "id": 12475, + "name": "RatesParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 12456, + "src": "2491:11:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_storage_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams" + } + }, + "visibility": "internal" + } + ], + "src": "2490:31:58" + }, + "returnParameters": { + "id": 12478, + "nodeType": "ParameterList", + "parameters": [], + "src": "2522:0:58" + }, + "scope": 13150, + "src": "2479:1269:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12623, + "nodeType": "Block", + "src": "3919:113:58", + "statements": [ + { + "assignments": [ + 12610 + ], + "declarations": [ + { + "constant": false, + "id": 12610, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 12623, + "src": "3929:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12609, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3929:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 12614, + "initialValue": { + "baseExpression": { + "id": 12611, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "3945:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12613, + "indexExpression": { + "id": 12612, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12606, + "src": "3962:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3945:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3929:39:58" + }, + { + "expression": { + "id": 12621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12615, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "3978:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12617, + "indexExpression": { + "id": 12616, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12606, + "src": "3995:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3978:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12618, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12610, + "src": "4004:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "updateOldRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4796, + "src": "4004:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (bytes32)" + } + }, + "id": 12620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4004:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3978:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12622, + "nodeType": "ExpressionStatement", + "src": "3978:47:58" + } + ] + }, + "documentation": { + "id": 12604, + "nodeType": "StructuredDocumentation", + "src": "3754:112:58", + "text": " @dev Updates the old rate for the token at `index` (including BPT). Assumes `index` is valid." + }, + "id": 12624, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateOldRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12607, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12606, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 12624, + "src": "3895:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12605, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3895:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3894:15:58" + }, + "returnParameters": { + "id": 12608, + "nodeType": "ParameterList", + "parameters": [], + "src": "3919:0:58" + }, + "scope": 13150, + "src": "3871:161:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12638, + "nodeType": "Block", + "src": "4314:60:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 12634, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12627, + "src": "4360:5:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 12633, + "name": "_getTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13755, + "src": "4345:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 12635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4345:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12632, + "name": "_getTokenRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12675, + "src": "4331:13:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 12636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4331:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 12631, + "id": 12637, + "nodeType": "Return", + "src": "4324:43:58" + } + ] + }, + "documentation": { + "id": 12625, + "nodeType": "StructuredDocumentation", + "src": "4038:203:58", + "text": " @dev Returns the rate for a given token. All token rates are fixed-point values with 18 decimals.\n If there is no rate provider for the provided token, it returns FixedPoint.ONE." + }, + "functionSelector": "54dea00a", + "id": 12639, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTokenRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12628, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12627, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 12639, + "src": "4268:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 12626, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "4268:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "4267:14:58" + }, + "returnParameters": { + "id": 12631, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12630, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12639, + "src": "4305:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4305:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4304:9:58" + }, + "scope": 13150, + "src": "4246:128:58", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 12674, + "nodeType": "Block", + "src": "4458:641:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12646, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12641, + "src": "4868:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12647, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "4877:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 12648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4877:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4868:22:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12654, + "nodeType": "IfStatement", + "src": "4864:74:58", + "trueBody": { + "id": 12653, + "nodeType": "Block", + "src": "4892:46:58", + "statements": [ + { + "expression": { + "expression": { + "id": 12650, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "4913:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 12651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "4913:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 12645, + "id": 12652, + "nodeType": "Return", + "src": "4906:21:58" + } + ] + } + }, + { + "assignments": [ + 12656 + ], + "declarations": [ + { + "constant": false, + "id": 12656, + "mutability": "mutable", + "name": "tokenRateCache", + "nodeType": "VariableDeclaration", + "scope": 12674, + "src": "4948:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12655, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4948:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 12660, + "initialValue": { + "baseExpression": { + "id": 12657, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "4973:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12659, + "indexExpression": { + "id": 12658, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12641, + "src": "4990:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4973:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4948:48:58" + }, + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 12666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12661, + "name": "tokenRateCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12656, + "src": "5013:14:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5039:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 12663, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5031:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 12662, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5031:7:58", + "typeDescriptions": {} + } + }, + "id": 12665, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5031:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "5013:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12669, + "name": "tokenRateCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12656, + "src": "5061:14:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getCurrentRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4763, + "src": "5061:29:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 12671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5061:31:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5013:79:58", + "trueExpression": { + "expression": { + "id": 12667, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "5044:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 12668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "5044:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 12645, + "id": 12673, + "nodeType": "Return", + "src": "5006:86:58" + } + ] + }, + "id": 12675, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getTokenRate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12642, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12641, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 12675, + "src": "4403:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12640, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4403:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4402:15:58" + }, + "returnParameters": { + "id": 12645, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12644, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 12675, + "src": "4449:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12643, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4449:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4448:9:58" + }, + "scope": 13150, + "src": "4380:719:58", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 12728, + "nodeType": "Block", + "src": "5472:383:58", + "statements": [ + { + "assignments": [ + 12690 + ], + "declarations": [ + { + "constant": false, + "id": 12690, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 12728, + "src": "5482:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12689, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5482:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 12696, + "initialValue": { + "baseExpression": { + "id": 12691, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "5498:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12695, + "indexExpression": { + "arguments": [ + { + "id": 12693, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12678, + "src": "5530:5:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 12692, + "name": "_getTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13755, + "src": "5515:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 12694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5515:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5498:39:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5482:55:58" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 12703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12698, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12690, + "src": "5655:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12701, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5672:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 12700, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5664:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 12699, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5664:7:58", + "typeDescriptions": {} + } + }, + "id": 12702, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5664:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "5655:19:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 12704, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "5676:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 12705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "MemberAccess", + "referencedDeclaration": 737, + "src": "5676:40:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12697, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "5646:8:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 12706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5646:71:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12707, + "nodeType": "ExpressionStatement", + "src": "5646:71:58" + }, + { + "expression": { + "id": 12712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12708, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12681, + "src": "5728:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12709, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12690, + "src": "5735:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getCurrentRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4763, + "src": "5735:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 12711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5735:22:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5728:29:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12713, + "nodeType": "ExpressionStatement", + "src": "5728:29:58" + }, + { + "expression": { + "id": 12718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 12714, + "name": "oldRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12683, + "src": "5767:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12715, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12690, + "src": "5777:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getOldRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4778, + "src": "5777:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 12717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5777:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5767:28:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12719, + "nodeType": "ExpressionStatement", + "src": "5767:28:58" + }, + { + "expression": { + "id": 12726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 12720, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12685, + "src": "5806:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12721, + "name": "expires", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12687, + "src": "5816:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 12722, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "5805:19:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12723, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12690, + "src": "5827:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getTimestamps", + "nodeType": "MemberAccess", + "referencedDeclaration": 4836, + "src": "5827:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256,uint256)" + } + }, + "id": 12725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5827:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "src": "5805:43:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12727, + "nodeType": "ExpressionStatement", + "src": "5805:43:58" + } + ] + }, + "documentation": { + "id": 12676, + "nodeType": "StructuredDocumentation", + "src": "5105:146:58", + "text": " @dev Returns the cached value for token's rate. Reverts if the token doesn't belong to the pool or has no rate\n provider." + }, + "functionSelector": "7f1260d1", + "id": 12729, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTokenRateCache", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12679, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12678, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 12729, + "src": "5283:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 12677, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "5283:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "5282:14:58" + }, + "returnParameters": { + "id": 12688, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12681, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 12729, + "src": "5357:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12680, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5357:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12683, + "mutability": "mutable", + "name": "oldRate", + "nodeType": "VariableDeclaration", + "scope": 12729, + "src": "5383:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12682, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5383:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12685, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 12729, + "src": "5412:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12684, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5412:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12687, + "mutability": "mutable", + "name": "expires", + "nodeType": "VariableDeclaration", + "scope": 12729, + "src": "5442:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12686, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5442:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5343:124:58" + }, + "scope": 13150, + "src": "5256:599:58", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 12777, + "nodeType": "Block", + "src": "6231:325:58", + "statements": [ + { + "assignments": [ + 12740 + ], + "declarations": [ + { + "constant": false, + "id": 12740, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 12777, + "src": "6241:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12739, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6241:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12744, + "initialValue": { + "arguments": [ + { + "id": 12742, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12732, + "src": "6272:5:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 12741, + "name": "_getTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13755, + "src": "6257:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 12743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6257:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6241:37:58" + }, + { + "assignments": [ + 12746 + ], + "declarations": [ + { + "constant": false, + "id": 12746, + "mutability": "mutable", + "name": "provider", + "nodeType": "VariableDeclaration", + "scope": 12777, + "src": "6288:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 12745, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "6288:13:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "id": 12750, + "initialValue": { + "arguments": [ + { + "id": 12748, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12740, + "src": "6330:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12747, + "name": "_getRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14115, + "src": "6313:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_contract$_IRateProvider_$428_$", + "typeString": "function (uint256) view returns (contract IRateProvider)" + } + }, + "id": 12749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6313:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6288:48:58" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 12760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 12754, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12746, + "src": "6363:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + ], + "id": 12753, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6355:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12752, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6355:7:58", + "typeDescriptions": {} + } + }, + "id": 12755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6355:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12758, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6384:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 12757, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6376:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12756, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6376:7:58", + "typeDescriptions": {} + } + }, + "id": 12759, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6376:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6355:31:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 12761, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6388:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 12762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "MemberAccess", + "referencedDeclaration": 737, + "src": "6388:40:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12751, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6346:8:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 12763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6346:83:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12764, + "nodeType": "ExpressionStatement", + "src": "6346:83:58" + }, + { + "expression": { + "arguments": [ + { + "id": 12766, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12740, + "src": "6461:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12767, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12746, + "src": "6468:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "id": 12768, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12734, + "src": "6478:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12765, + "name": "_updateTokenRateCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12863, + "src": "6439:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 12769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6439:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12770, + "nodeType": "ExpressionStatement", + "src": "6439:48:58" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12772, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12740, + "src": "6523:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12773, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12746, + "src": "6530:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "id": 12774, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12734, + "src": "6540:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12771, + "name": "TokenRateProviderSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12474, + "src": "6502:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 12775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6502:47:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12776, + "nodeType": "EmitStatement", + "src": "6497:52:58" + } + ] + }, + "documentation": { + "id": 12730, + "nodeType": "StructuredDocumentation", + "src": "5861:276:58", + "text": " @dev Sets a new duration for a token rate cache. It reverts if there was no rate provider set initially.\n Note this function also updates the current cached value.\n @param duration Number of seconds until the current token rate is fetched again." + }, + "functionSelector": "f4b7964d", + "id": 12778, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 12737, + "modifierName": { + "id": 12736, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "6218:12:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6218:12:58" + } + ], + "name": "setTokenRateCacheDuration", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12735, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12732, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 12778, + "src": "6177:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 12731, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "6177:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12734, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 12778, + "src": "6191:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12733, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6191:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6176:32:58" + }, + "returnParameters": { + "id": 12738, + "nodeType": "ParameterList", + "parameters": [], + "src": "6231:0:58" + }, + "scope": 13150, + "src": "6142:414:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 12824, + "nodeType": "Block", + "src": "6768:330:58", + "statements": [ + { + "assignments": [ + 12785 + ], + "declarations": [ + { + "constant": false, + "id": 12785, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 12824, + "src": "6778:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12784, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6778:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12789, + "initialValue": { + "arguments": [ + { + "id": 12787, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12781, + "src": "6809:5:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 12786, + "name": "_getTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13755, + "src": "6794:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 12788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6794:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6778:37:58" + }, + { + "assignments": [ + 12791 + ], + "declarations": [ + { + "constant": false, + "id": 12791, + "mutability": "mutable", + "name": "provider", + "nodeType": "VariableDeclaration", + "scope": 12824, + "src": "6826:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 12790, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "6826:13:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "id": 12795, + "initialValue": { + "arguments": [ + { + "id": 12793, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12785, + "src": "6868:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12792, + "name": "_getRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14115, + "src": "6851:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_contract$_IRateProvider_$428_$", + "typeString": "function (uint256) view returns (contract IRateProvider)" + } + }, + "id": 12794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6851:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6826:48:58" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 12805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 12799, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12791, + "src": "6901:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + ], + "id": 12798, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6893:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12797, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6893:7:58", + "typeDescriptions": {} + } + }, + "id": 12800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6893:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12803, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6922:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 12802, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6914:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 12801, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6914:7:58", + "typeDescriptions": {} + } + }, + "id": 12804, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6914:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6893:31:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 12806, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6926:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 12807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "MemberAccess", + "referencedDeclaration": 737, + "src": "6926:40:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12796, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6884:8:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 12808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6884:83:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12809, + "nodeType": "ExpressionStatement", + "src": "6884:83:58" + }, + { + "assignments": [ + 12811 + ], + "declarations": [ + { + "constant": false, + "id": 12811, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 12824, + "src": "6977:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6977:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12817, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 12812, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "6996:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12814, + "indexExpression": { + "id": 12813, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12785, + "src": "7013:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6996:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getDuration", + "nodeType": "MemberAccess", + "referencedDeclaration": 4811, + "src": "6996:35:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 12816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6996:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6977:56:58" + }, + { + "expression": { + "arguments": [ + { + "id": 12819, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12785, + "src": "7065:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12820, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12791, + "src": "7072:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "id": 12821, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12811, + "src": "7082:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12818, + "name": "_updateTokenRateCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12863, + "src": "7043:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 12822, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7043:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12823, + "nodeType": "ExpressionStatement", + "src": "7043:48:58" + } + ] + }, + "documentation": { + "id": 12779, + "nodeType": "StructuredDocumentation", + "src": "6562:148:58", + "text": " @dev Forces a rate cache hit for a token.\n It will revert if the requested token does not have an associated rate provider." + }, + "functionSelector": "2df2c7c0", + "id": 12825, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateTokenRateCache", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12782, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12781, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 12825, + "src": "6745:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 12780, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "6745:6:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "6744:14:58" + }, + "returnParameters": { + "id": 12783, + "nodeType": "ParameterList", + "parameters": [], + "src": "6768:0:58" + }, + "scope": 13150, + "src": "6715:383:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 12862, + "nodeType": "Block", + "src": "7417:229:58", + "statements": [ + { + "assignments": [ + 12836 + ], + "declarations": [ + { + "constant": false, + "id": 12836, + "mutability": "mutable", + "name": "rate", + "nodeType": "VariableDeclaration", + "scope": 12862, + "src": "7427:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12835, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7427:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12840, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12837, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12830, + "src": "7442:8:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 12838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 427, + "src": "7442:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 12839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7442:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7427:33:58" + }, + { + "assignments": [ + 12842 + ], + "declarations": [ + { + "constant": false, + "id": 12842, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 12862, + "src": "7470:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12841, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7470:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 12846, + "initialValue": { + "baseExpression": { + "id": 12843, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "7486:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12845, + "indexExpression": { + "id": 12844, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12828, + "src": "7503:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7486:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7470:39:58" + }, + { + "expression": { + "id": 12855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 12847, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "7520:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12849, + "indexExpression": { + "id": 12848, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12828, + "src": "7537:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7520:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 12852, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12836, + "src": "7574:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12853, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12832, + "src": "7580:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 12850, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12842, + "src": "7546:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "updateRateAndDuration", + "nodeType": "MemberAccess", + "referencedDeclaration": 4879, + "src": "7546:27:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) view returns (bytes32)" + } + }, + "id": 12854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7546:43:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "7520:69:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12856, + "nodeType": "ExpressionStatement", + "src": "7520:69:58" + }, + { + "eventCall": { + "arguments": [ + { + "id": 12858, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12828, + "src": "7627:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 12859, + "name": "rate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12836, + "src": "7634:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12857, + "name": "TokenRateCacheUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12466, + "src": "7605:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 12860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7605:34:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12861, + "nodeType": "EmitStatement", + "src": "7600:39:58" + } + ] + }, + "documentation": { + "id": 12826, + "nodeType": "StructuredDocumentation", + "src": "7104:173:58", + "text": " @dev Internal function to update a token rate cache for a known provider and duration.\n It trusts the given values, and does not perform any checks." + }, + "id": 12863, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateTokenRateCache", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12833, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12828, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 12863, + "src": "7322:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12827, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7322:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12830, + "mutability": "mutable", + "name": "provider", + "nodeType": "VariableDeclaration", + "scope": 12863, + "src": "7345:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 12829, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "7345:13:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12832, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 12863, + "src": "7377:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12831, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7377:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7312:87:58" + }, + "returnParameters": { + "id": 12834, + "nodeType": "ParameterList", + "parameters": [], + "src": "7417:0:58" + }, + "scope": 13150, + "src": "7282:364:58", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 12888, + "nodeType": "Block", + "src": "7772:161:58", + "statements": [ + { + "assignments": [ + 12868 + ], + "declarations": [ + { + "constant": false, + "id": 12868, + "mutability": "mutable", + "name": "totalTokens", + "nodeType": "VariableDeclaration", + "scope": 12888, + "src": "7782:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12867, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7782:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12871, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12869, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 13686 + ], + "referencedDeclaration": 13686, + "src": "7804:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 12870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7804:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7782:39:58" + }, + { + "body": { + "id": 12886, + "nodeType": "Block", + "src": "7873:54:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12883, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12873, + "src": "7914:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12882, + "name": "_cacheTokenRateIfNecessary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12938, + "src": "7887:26:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 12884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7887:29:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12885, + "nodeType": "ExpressionStatement", + "src": "7887:29:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12878, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12876, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12873, + "src": "7851:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 12877, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12868, + "src": "7855:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7851:15:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12887, + "initializationExpression": { + "assignments": [ + 12873 + ], + "declarations": [ + { + "constant": false, + "id": 12873, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 12887, + "src": "7836:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12872, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7836:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12875, + "initialValue": { + "hexValue": "30", + "id": 12874, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7848:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7836:13:58" + }, + "loopExpression": { + "expression": { + "id": 12880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "7868:3:58", + "subExpression": { + "id": 12879, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12873, + "src": "7870:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12881, + "nodeType": "ExpressionStatement", + "src": "7868:3:58" + }, + "nodeType": "ForStatement", + "src": "7831:96:58" + } + ] + }, + "documentation": { + "id": 12864, + "nodeType": "StructuredDocumentation", + "src": "7652:67:58", + "text": " @dev Caches the rates of all tokens if necessary" + }, + "id": 12889, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_cacheTokenRatesIfNecessary", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12865, + "nodeType": "ParameterList", + "parameters": [], + "src": "7760:2:58" + }, + "returnParameters": { + "id": 12866, + "nodeType": "ParameterList", + "parameters": [], + "src": "7772:0:58" + }, + "scope": 13150, + "src": "7724:209:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12937, + "nodeType": "Block", + "src": "8118:853:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12895, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12892, + "src": "8560:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12896, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "8569:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 12897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8569:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8560:22:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12900, + "nodeType": "IfStatement", + "src": "8556:35:58", + "trueBody": { + "functionReturnParameters": 12894, + "id": 12899, + "nodeType": "Return", + "src": "8584:7:58" + } + }, + { + "assignments": [ + 12902 + ], + "declarations": [ + { + "constant": false, + "id": 12902, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 12937, + "src": "8601:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 12901, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8601:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 12906, + "initialValue": { + "baseExpression": { + "id": 12903, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "8617:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 12905, + "indexExpression": { + "id": 12904, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12892, + "src": "8634:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8617:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8601:39:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 12912, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12907, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12902, + "src": "8654:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 12910, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8671:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 12909, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8663:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 12908, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8663:7:58", + "typeDescriptions": {} + } + }, + "id": 12911, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8663:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8654:19:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12936, + "nodeType": "IfStatement", + "src": "8650:315:58", + "trueBody": { + "id": 12935, + "nodeType": "Block", + "src": "8675:290:58", + "statements": [ + { + "assignments": [ + 12914, + 12916 + ], + "declarations": [ + { + "constant": false, + "id": 12914, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 12935, + "src": "8690:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12913, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8690:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12916, + "mutability": "mutable", + "name": "expires", + "nodeType": "VariableDeclaration", + "scope": 12935, + "src": "8708:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12915, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8708:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12920, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 12917, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12902, + "src": "8727:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 12918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getTimestamps", + "nodeType": "MemberAccess", + "referencedDeclaration": 4836, + "src": "8727:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256,uint256)" + } + }, + "id": 12919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8727:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8689:59:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 12921, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "8766:5:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 12922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "8766:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 12923, + "name": "expires", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12916, + "src": "8784:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8766:25:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12934, + "nodeType": "IfStatement", + "src": "8762:193:58", + "trueBody": { + "id": 12933, + "nodeType": "Block", + "src": "8793:162:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 12926, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12892, + "src": "8899:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 12928, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12892, + "src": "8923:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12927, + "name": "_getRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14115, + "src": "8906:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_contract$_IRateProvider_$428_$", + "typeString": "function (uint256) view returns (contract IRateProvider)" + } + }, + "id": 12929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8906:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "id": 12930, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12914, + "src": "8931:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12925, + "name": "_updateTokenRateCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12863, + "src": "8877:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 12931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8877:63:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12932, + "nodeType": "ExpressionStatement", + "src": "8877:63:58" + } + ] + } + } + ] + } + } + ] + }, + "documentation": { + "id": 12890, + "nodeType": "StructuredDocumentation", + "src": "7939:114:58", + "text": " @dev Caches the rate for a token if necessary. It ignores the call if there is no provider set." + }, + "id": 12938, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_cacheTokenRateIfNecessary", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12892, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 12938, + "src": "8094:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12891, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8094:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8093:15:58" + }, + "returnParameters": { + "id": 12894, + "nodeType": "ParameterList", + "parameters": [], + "src": "8118:0:58" + }, + "scope": 13150, + "src": "8058:913:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 12966, + "nodeType": "Block", + "src": "9242:174:58", + "statements": [ + { + "assignments": [ + 12942 + ], + "declarations": [ + { + "constant": false, + "id": 12942, + "mutability": "mutable", + "name": "totalTokens", + "nodeType": "VariableDeclaration", + "scope": 12966, + "src": "9252:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12941, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9252:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12945, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 12943, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 13686 + ], + "referencedDeclaration": 13686, + "src": "9274:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 12944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9274:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9252:39:58" + }, + { + "body": { + "id": 12964, + "nodeType": "Block", + "src": "9343:67:58", + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 12957, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12947, + "src": "9378:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12956, + "name": "_hasRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14131, + "src": "9361:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 12958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9361:19:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12963, + "nodeType": "IfStatement", + "src": "9357:42:58", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 12960, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12947, + "src": "9397:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12959, + "name": "_updateOldRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12624, + "src": "9382:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 12961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9382:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 12962, + "nodeType": "ExpressionStatement", + "src": "9382:17:58" + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 12952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12950, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12947, + "src": "9321:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 12951, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12942, + "src": "9325:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9321:15:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 12965, + "initializationExpression": { + "assignments": [ + 12947 + ], + "declarations": [ + { + "constant": false, + "id": 12947, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 12965, + "src": "9306:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12946, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9306:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12949, + "initialValue": { + "hexValue": "30", + "id": 12948, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9318:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "9306:13:58" + }, + "loopExpression": { + "expression": { + "id": 12954, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "9338:3:58", + "subExpression": { + "id": 12953, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12947, + "src": "9340:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12955, + "nodeType": "ExpressionStatement", + "src": "9338:3:58" + }, + "nodeType": "ForStatement", + "src": "9301:109:58" + } + ] + }, + "id": 12967, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_updateOldRates", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12939, + "nodeType": "ParameterList", + "parameters": [], + "src": "9230:2:58" + }, + "returnParameters": { + "id": 12940, + "nodeType": "ParameterList", + "parameters": [], + "src": "9242:0:58" + }, + "scope": 13150, + "src": "9206:210:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13048, + "nodeType": "Block", + "src": "9785:587:58", + "statements": [ + { + "assignments": [ + 12980 + ], + "declarations": [ + { + "constant": false, + "id": 12980, + "mutability": "mutable", + "name": "totalTokensWithoutBpt", + "nodeType": "VariableDeclaration", + "scope": 13048, + "src": "9795:29:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12979, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9795:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12983, + "initialValue": { + "expression": { + "id": 12981, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12971, + "src": "9827:8:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 12982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9827:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9795:47:58" + }, + { + "assignments": [ + 12988 + ], + "declarations": [ + { + "constant": false, + "id": 12988, + "mutability": "mutable", + "name": "adjustedBalances", + "nodeType": "VariableDeclaration", + "scope": 13048, + "src": "9852:33:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12986, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9852:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12987, + "nodeType": "ArrayTypeName", + "src": "9852:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 12994, + "initialValue": { + "arguments": [ + { + "id": 12992, + "name": "totalTokensWithoutBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12980, + "src": "9902:21:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 12991, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "9888:13:58", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 12989, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9892:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12990, + "nodeType": "ArrayTypeName", + "src": "9892:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 12993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9888:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9852:72:58" + }, + { + "body": { + "id": 13044, + "nodeType": "Block", + "src": "9987:345:58", + "statements": [ + { + "assignments": [ + 13006 + ], + "declarations": [ + { + "constant": false, + "id": 13006, + "mutability": "mutable", + "name": "skipBptIndex", + "nodeType": "VariableDeclaration", + "scope": 13044, + "src": "10001:20:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13005, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10001:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13016, + "initialValue": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13010, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13007, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "10024:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13008, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "10029:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10029:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10024:18:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "id": 13014, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "10053:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "10024:30:58", + "trueExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13011, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "10045:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 13012, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10049:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "10045:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10001:53:58" + }, + { + "expression": { + "id": 13042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 13017, + "name": "adjustedBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12988, + "src": "10068:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13019, + "indexExpression": { + "id": 13018, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "10085:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10068:19:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 13029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 13021, + "name": "skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13006, + "src": "10125:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13020, + "name": "_isTokenExemptFromYieldProtocolFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14177, + "src": "10090:34:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 13022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10090:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 13027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13023, + "name": "ignoreExemptFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12973, + "src": "10159:17:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "arguments": [ + { + "id": 13025, + "name": "skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13006, + "src": "10197:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13024, + "name": "_hasRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14131, + "src": "10180:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 13026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10180:30:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10159:51:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 13028, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10158:53:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10090:121:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "baseExpression": { + "id": 13038, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12971, + "src": "10310:8:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13040, + "indexExpression": { + "id": 13039, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "10319:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10310:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "10090:231:58", + "trueExpression": { + "arguments": [ + { + "baseExpression": { + "id": 13031, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12971, + "src": "10247:8:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13033, + "indexExpression": { + "id": 13032, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "10256:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10247:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 13034, + "name": "_tokenRateCaches", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12460, + "src": "10260:16:58", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$", + "typeString": "mapping(uint256 => bytes32)" + } + }, + "id": 13036, + "indexExpression": { + "id": 13035, + "name": "skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13006, + "src": "10277:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10260:30:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 13030, + "name": "_adjustedBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13073, + "src": "10230:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (uint256,bytes32) pure returns (uint256)" + } + }, + "id": 13037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10230:61:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10068:253:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13043, + "nodeType": "ExpressionStatement", + "src": "10068:253:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 12999, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "9955:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 13000, + "name": "totalTokensWithoutBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12980, + "src": "9959:21:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9955:25:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13045, + "initializationExpression": { + "assignments": [ + 12996 + ], + "declarations": [ + { + "constant": false, + "id": 12996, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 13045, + "src": "9940:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12995, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9940:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 12998, + "initialValue": { + "hexValue": "30", + "id": 12997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9952:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "9940:13:58" + }, + "loopExpression": { + "expression": { + "id": 13003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "9982:3:58", + "subExpression": { + "id": 13002, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12996, + "src": "9984:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13004, + "nodeType": "ExpressionStatement", + "src": "9982:3:58" + }, + "nodeType": "ForStatement", + "src": "9935:397:58" + }, + { + "expression": { + "id": 13046, + "name": "adjustedBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12988, + "src": "10349:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 12978, + "id": 13047, + "nodeType": "Return", + "src": "10342:23:58" + } + ] + }, + "documentation": { + "id": 12968, + "nodeType": "StructuredDocumentation", + "src": "9422:208:58", + "text": " @dev Apply the token ratios to a set of balances, optionally adjusting for exempt yield tokens.\n The `balances` array is assumed to not include BPT to ensure that token indices align." + }, + "id": 13049, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getAdjustedBalances", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 12974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12971, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 13049, + "src": "9665:25:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9665:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12970, + "nodeType": "ArrayTypeName", + "src": "9665:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 12973, + "mutability": "mutable", + "name": "ignoreExemptFlags", + "nodeType": "VariableDeclaration", + "scope": 13049, + "src": "9692:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 12972, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9692:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9664:51:58" + }, + "returnParameters": { + "id": 12978, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 12977, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13049, + "src": "9763:16:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 12975, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9763:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 12976, + "nodeType": "ArrayTypeName", + "src": "9763:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "9762:18:58" + }, + "scope": 13150, + "src": "9635:737:58", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13072, + "nodeType": "Block", + "src": "10561:99:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 13062, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13051, + "src": "10600:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 13063, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "10609:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getOldRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4778, + "src": "10609:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 13065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10609:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13060, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "10591:4:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 13061, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "10591:8:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 13066, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10591:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 13067, + "name": "cache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13053, + "src": "10630:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13068, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getCurrentRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 4763, + "src": "10630:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32) pure returns (uint256)" + } + }, + "id": 13069, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10630:22:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13058, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "10578:4:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 13059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "10578:12:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 13070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10578:75:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13057, + "id": 13071, + "nodeType": "Return", + "src": "10571:82:58" + } + ] + }, + "id": 13073, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_adjustedBalance", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13054, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13051, + "mutability": "mutable", + "name": "balance", + "nodeType": "VariableDeclaration", + "scope": 13073, + "src": "10498:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13050, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10498:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13053, + "mutability": "mutable", + "name": "cache", + "nodeType": "VariableDeclaration", + "scope": 13073, + "src": "10515:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13052, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10515:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "10497:32:58" + }, + "returnParameters": { + "id": 13057, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13056, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13073, + "src": "10552:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10552:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10551:9:58" + }, + "scope": 13150, + "src": "10472:188:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + }, + { + "baseFunctions": [ + 3519 + ], + "body": { + "id": 13124, + "nodeType": "Block", + "src": "10865:398:58", + "statements": [ + { + "assignments": [ + 13082 + ], + "declarations": [ + { + "constant": false, + "id": 13082, + "mutability": "mutable", + "name": "totalTokens", + "nodeType": "VariableDeclaration", + "scope": 13124, + "src": "10972:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13081, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10972:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13085, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13083, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 13686 + ], + "referencedDeclaration": 13686, + "src": "10994:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10994:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10972:39:58" + }, + { + "assignments": [ + 13090 + ], + "declarations": [ + { + "constant": false, + "id": 13090, + "mutability": "mutable", + "name": "scalingFactors", + "nodeType": "VariableDeclaration", + "scope": 13124, + "src": "11021:31:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13088, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11021:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13089, + "nodeType": "ArrayTypeName", + "src": "11021:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 13096, + "initialValue": { + "arguments": [ + { + "id": 13094, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13082, + "src": "11069:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13093, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "11055:13:58", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 13091, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11059:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13092, + "nodeType": "ArrayTypeName", + "src": "11059:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 13095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11055:26:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11021:60:58" + }, + { + "body": { + "id": 13120, + "nodeType": "Block", + "src": "11134:91:58", + "statements": [ + { + "expression": { + "id": 13118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 13107, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13090, + "src": "11148:14:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13109, + "indexExpression": { + "id": 13108, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13098, + "src": "11163:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "11148:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 13115, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13098, + "src": "11211:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13114, + "name": "_getTokenRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12675, + "src": "11197:13:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 13116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11197:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 13111, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13098, + "src": "11186:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13110, + "name": "_getScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14020, + "src": "11168:17:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 13112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11168:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "11168:28:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 13117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11168:46:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11148:66:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13119, + "nodeType": "ExpressionStatement", + "src": "11148:66:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13103, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13101, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13098, + "src": "11112:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 13102, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13082, + "src": "11116:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11112:15:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13121, + "initializationExpression": { + "assignments": [ + 13098 + ], + "declarations": [ + { + "constant": false, + "id": 13098, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 13121, + "src": "11097:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13097, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11097:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13100, + "initialValue": { + "hexValue": "30", + "id": 13099, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11109:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11097:13:58" + }, + "loopExpression": { + "expression": { + "id": 13105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "11129:3:58", + "subExpression": { + "id": 13104, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13098, + "src": "11131:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13106, + "nodeType": "ExpressionStatement", + "src": "11129:3:58" + }, + "nodeType": "ForStatement", + "src": "11092:133:58" + }, + { + "expression": { + "id": 13122, + "name": "scalingFactors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13090, + "src": "11242:14:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 13080, + "id": 13123, + "nodeType": "Return", + "src": "11235:21:58" + } + ] + }, + "documentation": { + "id": 13074, + "nodeType": "StructuredDocumentation", + "src": "10690:85:58", + "text": " @dev Overrides scaling factor getter to compute the tokens' rates." + }, + "id": 13125, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_scalingFactors", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 13076, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10829:8:58" + }, + "parameters": { + "id": 13075, + "nodeType": "ParameterList", + "parameters": [], + "src": "10804:2:58" + }, + "returnParameters": { + "id": 13080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13079, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13125, + "src": "10847:16:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13077, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10847:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13078, + "nodeType": "ArrayTypeName", + "src": "10847:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "10846:18:58" + }, + "scope": 13150, + "src": "10780:483:58", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2907 + ], + "body": { + "id": 13148, + "nodeType": "Block", + "src": "11473:128:58", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 13146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 13140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13134, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13128, + "src": "11491:8:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 13136, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "11515:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + }, + "id": 13137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "setTokenRateCacheDuration", + "nodeType": "MemberAccess", + "referencedDeclaration": 12778, + "src": "11515:30:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$1152_$_t_uint256_$returns$__$", + "typeString": "function (contract IERC20,uint256) external" + } + }, + "id": 13138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "11515:39:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 13135, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5107, + "src": "11503:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 13139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11503:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "11491:64:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 13141, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11490:66:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 13144, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13128, + "src": "11585:8:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 13142, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "11560:5:58", + "typeDescriptions": { + "typeIdentifier": "t_super$_ComposableStablePoolRates_$13150", + "typeString": "contract super ComposableStablePoolRates" + } + }, + "id": 13143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_isOwnerOnlyAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 2907, + "src": "11560:24:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 13145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11560:34:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "11490:104:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 13133, + "id": 13147, + "nodeType": "Return", + "src": "11483:111:58" + } + ] + }, + "documentation": { + "id": 13126, + "nodeType": "StructuredDocumentation", + "src": "11269:107:58", + "text": " @dev Overrides only owner action to allow setting the cache duration for the token rates" + }, + "id": 13149, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 13130, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11449:8:58" + }, + "parameters": { + "id": 13129, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13128, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 13149, + "src": "11409:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13127, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11409:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11408:18:58" + }, + "returnParameters": { + "id": 13133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13132, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13149, + "src": "11467:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 13131, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11467:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "11466:6:58" + }, + "scope": 13150, + "src": "11381:220:58", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 13151, + "src": "1156:10447:58" + } + ], + "src": "688:10916:58" + }, + "id": 58 + }, + "contracts/ComposableStablePoolStorage.sol": { + "ast": { + "absolutePath": "contracts/ComposableStablePoolStorage.sol", + "exportedSymbols": { + "ComposableStablePoolStorage": [ + 14193 + ] + }, + "id": 14194, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 13152, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:59" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol", + "id": 13153, + "nodeType": "ImportDirective", + "scope": 14194, + "sourceUnit": 1012, + "src": "713:90:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "file": "@balancer-labs/v2-interfaces/contracts/solidity-utils/openzeppelin/IERC20.sol", + "id": 13154, + "nodeType": "ImportDirective", + "scope": 14194, + "sourceUnit": 1153, + "src": "804:87:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "file": "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol", + "id": 13155, + "nodeType": "ImportDirective", + "scope": 14194, + "sourceUnit": 429, + "src": "892:77:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePool.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/BasePool.sol", + "id": 13156, + "nodeType": "ImportDirective", + "scope": 14194, + "sourceUnit": 3861, + "src": "971:61:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/StableMath.sol", + "file": "./StableMath.sol", + "id": 13157, + "nodeType": "ImportDirective", + "scope": 14194, + "sourceUnit": 15488, + "src": "1034:26:59", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 13158, + "name": "BasePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3860, + "src": "1111:8:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePool_$3860", + "typeString": "contract BasePool" + } + }, + "id": 13159, + "nodeType": "InheritanceSpecifier", + "src": "1111:8:59" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3860, + 3955, + 4136, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535 + ], + "contractKind": "contract", + "fullyImplemented": false, + "id": 14193, + "linearizedBaseContracts": [ + 14193, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "ComposableStablePoolStorage", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 13162, + "libraryName": { + "id": 13160, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "1132:10:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "1126:29:59", + "typeName": { + "id": 13161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1147:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 13165, + "libraryName": { + "id": 13163, + "name": "WordCodec", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6810, + "src": "1166:9:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WordCodec_$6810", + "typeString": "library WordCodec" + } + }, + "nodeType": "UsingForDirective", + "src": "1160:28:59", + "typeName": { + "id": 13164, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1180:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "canonicalName": "ComposableStablePoolStorage.StorageParams", + "id": 13175, + "members": [ + { + "constant": false, + "id": 13168, + "mutability": "mutable", + "name": "registeredTokens", + "nodeType": "VariableDeclaration", + "scope": 13175, + "src": "1225:25:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 13166, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1225:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13167, + "nodeType": "ArrayTypeName", + "src": "1225:8:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13171, + "mutability": "mutable", + "name": "tokenRateProviders", + "nodeType": "VariableDeclaration", + "scope": 13175, + "src": "1260:34:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 13169, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "1260:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13170, + "nodeType": "ArrayTypeName", + "src": "1260:15:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13174, + "mutability": "mutable", + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "VariableDeclaration", + "scope": 13175, + "src": "1304:38:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 13172, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1304:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13173, + "nodeType": "ArrayTypeName", + "src": "1304:6:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + } + ], + "name": "StorageParams", + "nodeType": "StructDefinition", + "scope": 14193, + "src": "1194:155:59", + "visibility": "public" + }, + { + "constant": true, + "id": 13178, + "mutability": "constant", + "name": "_MIN_NON_BPT_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "1521:48:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13176, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1521:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 13177, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1568:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13180, + "mutability": "immutable", + "name": "_totalTokens", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "1705:38:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1705:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13182, + "mutability": "immutable", + "name": "_bptIndex", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "1862:35:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13181, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1862:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13184, + "mutability": "immutable", + "name": "_token0", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "1973:32:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13183, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1973:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13186, + "mutability": "immutable", + "name": "_token1", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2011:32:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13185, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2011:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13188, + "mutability": "immutable", + "name": "_token2", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2049:32:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13187, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2049:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13190, + "mutability": "immutable", + "name": "_token3", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2087:32:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13189, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2087:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13192, + "mutability": "immutable", + "name": "_token4", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2125:32:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13191, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2125:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13194, + "mutability": "immutable", + "name": "_token5", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2163:32:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13193, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "2163:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13196, + "mutability": "immutable", + "name": "_scalingFactor0", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2553:42:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13195, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2553:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13198, + "mutability": "immutable", + "name": "_scalingFactor1", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2601:42:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2601:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13200, + "mutability": "immutable", + "name": "_scalingFactor2", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2649:42:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13199, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2649:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13202, + "mutability": "immutable", + "name": "_scalingFactor3", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2697:42:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13201, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2697:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13204, + "mutability": "immutable", + "name": "_scalingFactor4", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2745:42:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13203, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2745:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13206, + "mutability": "immutable", + "name": "_scalingFactor5", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2793:42:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13205, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2793:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13208, + "mutability": "immutable", + "name": "_rateProvider0", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2938:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 13207, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2938:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13210, + "mutability": "immutable", + "name": "_rateProvider1", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "2991:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 13209, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2991:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13212, + "mutability": "immutable", + "name": "_rateProvider2", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "3044:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 13211, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3044:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13214, + "mutability": "immutable", + "name": "_rateProvider3", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "3097:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 13213, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3097:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13216, + "mutability": "immutable", + "name": "_rateProvider4", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "3150:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 13215, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3150:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13218, + "mutability": "immutable", + "name": "_rateProvider5", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "3203:47:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 13217, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3203:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13220, + "mutability": "immutable", + "name": "_rateProviderInfoBitmap", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "3814:49:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13219, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3814:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13222, + "mutability": "immutable", + "name": "_noTokensExempt", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "4053:38:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 13221, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4053:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "private" + }, + { + "constant": false, + "id": 13224, + "mutability": "immutable", + "name": "_allTokensExempt", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "4097:39:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 13223, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4097:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "private" + }, + { + "constant": true, + "id": 13227, + "mutability": "constant", + "name": "_RATE_PROVIDER_FLAGS_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 14193, + "src": "4143:56:59", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13225, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4143:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "36", + "id": 13226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4198:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "visibility": "private" + }, + { + "body": { + "id": 13676, + "nodeType": "Block", + "src": "4247:5646:59", + "statements": [ + { + "assignments": [ + 13233 + ], + "declarations": [ + { + "constant": false, + "id": 13233, + "mutability": "mutable", + "name": "totalTokens", + "nodeType": "VariableDeclaration", + "scope": 13676, + "src": "4568:19:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13232, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4568:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13237, + "initialValue": { + "expression": { + "expression": { + "id": 13234, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "4590:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13235, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "4590:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4590:30:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4568:52:59" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13239, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "4639:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 13240, + "name": "_MIN_NON_BPT_TOKENS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13178, + "src": "4653:19:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4639:33:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 13242, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "4674:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MIN_TOKENS", + "nodeType": "MemberAccess", + "referencedDeclaration": 578, + "src": "4674:17:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13238, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "4630:8:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 13244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4630:62:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13245, + "nodeType": "ExpressionStatement", + "src": "4630:62:59" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13249, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "4751:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 13250, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4765:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4751:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 13252, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "4780:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13253, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 13171, + "src": "4780:25:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4780:32:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 13255, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "4826:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13256, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "exemptFromYieldProtocolFeeFlags", + "nodeType": "MemberAccess", + "referencedDeclaration": 13174, + "src": "4826:38:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "id": 13257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4826:45:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13246, + "name": "InputHelpers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5994, + "src": "4702:12:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_InputHelpers_$5994_$", + "typeString": "type(library InputHelpers)" + } + }, + "id": 13248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ensureInputLengthMatch", + "nodeType": "MemberAccess", + "referencedDeclaration": 5924, + "src": "4702:35:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256) pure" + } + }, + "id": 13258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4702:179:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13259, + "nodeType": "ExpressionStatement", + "src": "4702:179:59" + }, + { + "expression": { + "id": 13262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13260, + "name": "_totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13180, + "src": "4892:12:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 13261, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "4907:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4892:26:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13263, + "nodeType": "ExpressionStatement", + "src": "4892:26:59" + }, + { + "expression": { + "id": 13269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13264, + "name": "_token0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13184, + "src": "5044:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "expression": { + "id": 13265, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5054:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13266, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5054:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13268, + "indexExpression": { + "hexValue": "30", + "id": 13267, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5078:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5054:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "5044:36:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13270, + "nodeType": "ExpressionStatement", + "src": "5044:36:59" + }, + { + "expression": { + "id": 13276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13271, + "name": "_token1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13186, + "src": "5090:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "expression": { + "id": 13272, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5100:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13273, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5100:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13275, + "indexExpression": { + "hexValue": "31", + "id": 13274, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5124:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5100:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "5090:36:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13277, + "nodeType": "ExpressionStatement", + "src": "5090:36:59" + }, + { + "expression": { + "id": 13283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13278, + "name": "_token2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13188, + "src": "5136:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "expression": { + "id": 13279, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5146:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13280, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5146:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13282, + "indexExpression": { + "hexValue": "32", + "id": 13281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5170:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5146:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "5136:36:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13284, + "nodeType": "ExpressionStatement", + "src": "5136:36:59" + }, + { + "expression": { + "id": 13297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13285, + "name": "_token3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13190, + "src": "5182:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13288, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13286, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "5192:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "33", + "id": 13287, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5206:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "5192:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5246:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13293, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "5239:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 13295, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5239:9:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5192:56:59", + "trueExpression": { + "baseExpression": { + "expression": { + "id": 13289, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5210:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13290, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5210:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13292, + "indexExpression": { + "hexValue": "33", + "id": 13291, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5234:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5210:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "5182:66:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13298, + "nodeType": "ExpressionStatement", + "src": "5182:66:59" + }, + { + "expression": { + "id": 13311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13299, + "name": "_token4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13192, + "src": "5258:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13300, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "5268:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "34", + "id": 13301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5282:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "5268:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13308, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5322:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13307, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "5315:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 13309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5315:9:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5268:56:59", + "trueExpression": { + "baseExpression": { + "expression": { + "id": 13303, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5286:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13304, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5286:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13306, + "indexExpression": { + "hexValue": "34", + "id": 13305, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5310:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5286:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "5258:66:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13312, + "nodeType": "ExpressionStatement", + "src": "5258:66:59" + }, + { + "expression": { + "id": 13325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13313, + "name": "_token5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13194, + "src": "5334:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13314, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "5344:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "35", + "id": 13315, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5358:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "5344:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13322, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5398:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13321, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "5391:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 13323, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5391:9:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5344:56:59", + "trueExpression": { + "baseExpression": { + "expression": { + "id": 13317, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5362:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13318, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5362:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13320, + "indexExpression": { + "hexValue": "35", + "id": 13319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5386:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5362:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "5334:66:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 13326, + "nodeType": "ExpressionStatement", + "src": "5334:66:59" + }, + { + "expression": { + "id": 13334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13327, + "name": "_scalingFactor0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13196, + "src": "5411:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "expression": { + "id": 13329, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5451:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13330, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5451:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13332, + "indexExpression": { + "hexValue": "30", + "id": 13331, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5475:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5451:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 13328, + "name": "_computeScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3504, + "src": "5429:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 13333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5429:49:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5411:67:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13335, + "nodeType": "ExpressionStatement", + "src": "5411:67:59" + }, + { + "expression": { + "id": 13343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13336, + "name": "_scalingFactor1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13198, + "src": "5488:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "expression": { + "id": 13338, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5528:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13339, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5528:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13341, + "indexExpression": { + "hexValue": "31", + "id": 13340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5552:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5528:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 13337, + "name": "_computeScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3504, + "src": "5506:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 13342, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5506:49:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5488:67:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13344, + "nodeType": "ExpressionStatement", + "src": "5488:67:59" + }, + { + "expression": { + "id": 13352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13345, + "name": "_scalingFactor2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13200, + "src": "5565:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "expression": { + "id": 13347, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5605:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13348, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5605:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13350, + "indexExpression": { + "hexValue": "32", + "id": 13349, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5629:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5605:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 13346, + "name": "_computeScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3504, + "src": "5583:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 13351, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5583:49:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5565:67:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13353, + "nodeType": "ExpressionStatement", + "src": "5565:67:59" + }, + { + "expression": { + "id": 13366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13354, + "name": "_scalingFactor3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13202, + "src": "5642:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13355, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "5660:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "33", + "id": 13356, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5674:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "5660:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 13364, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5730:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 13365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5660:71:59", + "trueExpression": { + "arguments": [ + { + "baseExpression": { + "expression": { + "id": 13359, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5700:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13360, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5700:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13362, + "indexExpression": { + "hexValue": "33", + "id": 13361, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5724:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5700:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 13358, + "name": "_computeScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3504, + "src": "5678:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 13363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5678:49:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5642:89:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13367, + "nodeType": "ExpressionStatement", + "src": "5642:89:59" + }, + { + "expression": { + "id": 13380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13368, + "name": "_scalingFactor4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13204, + "src": "5741:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13369, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "5759:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "34", + "id": 13370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5773:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "5759:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 13378, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5829:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 13379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5759:71:59", + "trueExpression": { + "arguments": [ + { + "baseExpression": { + "expression": { + "id": 13373, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5799:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13374, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5799:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13376, + "indexExpression": { + "hexValue": "34", + "id": 13375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5823:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5799:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 13372, + "name": "_computeScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3504, + "src": "5777:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 13377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5777:49:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5741:89:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13381, + "nodeType": "ExpressionStatement", + "src": "5741:89:59" + }, + { + "expression": { + "id": 13394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13382, + "name": "_scalingFactor5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13206, + "src": "5840:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13383, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13233, + "src": "5858:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "35", + "id": 13384, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5872:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "5858:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "hexValue": "30", + "id": 13392, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5928:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 13393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "5858:71:59", + "trueExpression": { + "arguments": [ + { + "baseExpression": { + "expression": { + "id": 13387, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "5898:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13388, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "5898:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13390, + "indexExpression": { + "hexValue": "35", + "id": 13389, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5922:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5898:26:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 13386, + "name": "_computeScalingFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3504, + "src": "5876:21:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 13391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5876:49:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5840:89:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13395, + "nodeType": "ExpressionStatement", + "src": "5840:89:59" + }, + { + "assignments": [ + 13397 + ], + "declarations": [ + { + "constant": false, + "id": 13397, + "mutability": "mutable", + "name": "bptIndex", + "nodeType": "VariableDeclaration", + "scope": 13676, + "src": "6357:16:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13396, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6357:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13398, + "nodeType": "VariableDeclarationStatement", + "src": "6357:16:59" + }, + { + "body": { + "id": 13422, + "nodeType": "Block", + "src": "6559:72:59", + "statements": [] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 13418, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13407, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "6460:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 13408, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6471:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6460:12:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "expression": { + "id": 13410, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "6476:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13411, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "6476:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13413, + "indexExpression": { + "id": 13412, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "6500:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6476:33:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [ + { + "id": 13415, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "6519:4:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolStorage_$14193", + "typeString": "contract ComposableStablePoolStorage" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ComposableStablePoolStorage_$14193", + "typeString": "contract ComposableStablePoolStorage" + } + ], + "id": 13414, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "6512:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 13416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6512:12:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "6476:48:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6460:64:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13423, + "initializationExpression": { + "expression": { + "id": 13405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13399, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "6401:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 13400, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "6412:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13401, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "6412:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6412:30:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 13403, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6445:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "6412:34:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6401:45:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13406, + "nodeType": "ExpressionStatement", + "src": "6401:45:59" + }, + "loopExpression": { + "expression": { + "id": 13420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "--", + "prefix": false, + "src": "6538:10:59", + "subExpression": { + "id": 13419, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "6538:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13421, + "nodeType": "ExpressionStatement", + "src": "6538:10:59" + }, + "nodeType": "ForStatement", + "src": "6383:248:59" + }, + { + "expression": { + "id": 13426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13424, + "name": "_bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13182, + "src": "6640:9:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 13425, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "6652:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6640:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13427, + "nodeType": "ExpressionStatement", + "src": "6640:20:59" + }, + { + "assignments": [ + 13431 + ], + "declarations": [ + { + "constant": false, + "id": 13431, + "mutability": "mutable", + "name": "rateProviders", + "nodeType": "VariableDeclaration", + "scope": 13676, + "src": "7138:36:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 13429, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "7138:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13430, + "nodeType": "ArrayTypeName", + "src": "7138:15:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + } + ], + "id": 13439, + "initialValue": { + "arguments": [ + { + "expression": { + "expression": { + "id": 13435, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "7197:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13436, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "7197:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7197:30:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13434, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "7177:19:59", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (contract IRateProvider[] memory)" + }, + "typeName": { + "baseType": { + "id": 13432, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "7181:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13433, + "nodeType": "ArrayTypeName", + "src": "7181:15:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + } + }, + "id": 13438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7177:51:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7138:90:59" + }, + { + "assignments": [ + 13441 + ], + "declarations": [ + { + "constant": false, + "id": 13441, + "mutability": "mutable", + "name": "rateProviderInfoBitmap", + "nodeType": "VariableDeclaration", + "scope": 13676, + "src": "7239:30:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 13440, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7239:7:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 13442, + "nodeType": "VariableDeclarationStatement", + "src": "7239:30:59" + }, + { + "assignments": [ + 13444 + ], + "declarations": [ + { + "constant": false, + "id": 13444, + "mutability": "mutable", + "name": "anyExempt", + "nodeType": "VariableDeclaration", + "scope": 13676, + "src": "7280:14:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 13443, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7280:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 13446, + "initialValue": { + "hexValue": "66616c7365", + "id": 13445, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7297:5:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7280:22:59" + }, + { + "assignments": [ + 13448 + ], + "declarations": [ + { + "constant": false, + "id": 13448, + "mutability": "mutable", + "name": "anyNonExempt", + "nodeType": "VariableDeclaration", + "scope": 13676, + "src": "7312:17:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 13447, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7312:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 13450, + "initialValue": { + "hexValue": "66616c7365", + "id": 13449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7332:5:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7312:25:59" + }, + { + "body": { + "id": 13597, + "nodeType": "Block", + "src": "7564:1665:59", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13463, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7582:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 13464, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "7586:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7582:12:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13527, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8401:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 13528, + "name": "bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13397, + "src": "8406:8:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8401:13:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13595, + "nodeType": "IfStatement", + "src": "8397:822:59", + "trueBody": { + "id": 13594, + "nodeType": "Block", + "src": "8416:803:59", + "statements": [ + { + "expression": { + "id": 13539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 13530, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "8434:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13532, + "indexExpression": { + "id": 13531, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8448:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8434:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "expression": { + "id": 13533, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "8453:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13534, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 13171, + "src": "8453:25:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13538, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13535, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8479:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 13536, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8483:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8479:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8453:32:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "8434:51:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13540, + "nodeType": "ExpressionStatement", + "src": "8434:51:59" + }, + { + "expression": { + "id": 13555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13541, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "8560:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "id": 13550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 13544, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "8640:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13546, + "indexExpression": { + "id": 13545, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8654:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8640:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13548, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8674:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13547, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "8660:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13549, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8660:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "8640:36:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13551, + "name": "_RATE_PROVIDER_FLAGS_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13227, + "src": "8698:27:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 13552, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8728:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8698:31:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13542, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "8585:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6690, + "src": "8585:33:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bool,uint256) pure returns (bytes32)" + } + }, + "id": 13554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8585:162:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8560:187:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13556, + "nodeType": "ExpressionStatement", + "src": "8560:187:59" + }, + { + "condition": { + "baseExpression": { + "expression": { + "id": 13557, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "8835:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13558, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "exemptFromYieldProtocolFeeFlags", + "nodeType": "MemberAccess", + "referencedDeclaration": 13174, + "src": "8835:38:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "id": 13562, + "indexExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13559, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8874:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 13560, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8878:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "8874:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8835:45:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 13592, + "nodeType": "Block", + "src": "9145:60:59", + "statements": [ + { + "expression": { + "id": 13590, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13588, + "name": "anyNonExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13448, + "src": "9167:12:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 13589, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9182:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "9167:19:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13591, + "nodeType": "ExpressionStatement", + "src": "9167:19:59" + } + ] + }, + "id": 13593, + "nodeType": "IfStatement", + "src": "8831:374:59", + "trueBody": { + "id": 13587, + "nodeType": "Block", + "src": "8882:257:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "id": 13570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 13564, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "8913:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13566, + "indexExpression": { + "id": 13565, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8927:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8913:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13568, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8947:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13567, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "8933:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13569, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8933:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "8913:36:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 13571, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "8951:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13572, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "MemberAccess", + "referencedDeclaration": 737, + "src": "8951:40:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13563, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "8904:8:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 13573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8904:88:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13574, + "nodeType": "ExpressionStatement", + "src": "8904:88:59" + }, + { + "expression": { + "id": 13581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13575, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "9014:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "74727565", + "id": 13578, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9073:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 13579, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "9079:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13576, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "9039:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13577, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6690, + "src": "9039:33:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bool,uint256) pure returns (bytes32)" + } + }, + "id": 13580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9039:42:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "9014:67:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13582, + "nodeType": "ExpressionStatement", + "src": "9014:67:59" + }, + { + "expression": { + "id": 13585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13583, + "name": "anyExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13444, + "src": "9104:9:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 13584, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9116:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "9104:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13586, + "nodeType": "ExpressionStatement", + "src": "9104:16:59" + } + ] + } + } + ] + } + }, + "id": 13596, + "nodeType": "IfStatement", + "src": "7578:1641:59", + "trueBody": { + "id": 13526, + "nodeType": "Block", + "src": "7596:795:59", + "statements": [ + { + "expression": { + "id": 13473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 13466, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "7614:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13468, + "indexExpression": { + "id": 13467, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7628:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7614:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "expression": { + "id": 13469, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "7633:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13470, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenRateProviders", + "nodeType": "MemberAccess", + "referencedDeclaration": 13171, + "src": "7633:25:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13472, + "indexExpression": { + "id": 13471, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7659:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7633:28:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "7614:47:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13474, + "nodeType": "ExpressionStatement", + "src": "7614:47:59" + }, + { + "expression": { + "id": 13489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13475, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "7736:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "id": 13484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 13478, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "7816:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13480, + "indexExpression": { + "id": 13479, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7830:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7816:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7850:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13481, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "7836:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13483, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7836:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "7816:36:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13485, + "name": "_RATE_PROVIDER_FLAGS_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13227, + "src": "7874:27:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 13486, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7904:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7874:31:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13476, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "7761:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6690, + "src": "7761:33:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bool,uint256) pure returns (bytes32)" + } + }, + "id": 13488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7761:162:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "7736:187:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13490, + "nodeType": "ExpressionStatement", + "src": "7736:187:59" + }, + { + "condition": { + "baseExpression": { + "expression": { + "id": 13491, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "8011:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13492, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "exemptFromYieldProtocolFeeFlags", + "nodeType": "MemberAccess", + "referencedDeclaration": 13174, + "src": "8011:38:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "id": 13494, + "indexExpression": { + "id": 13493, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8050:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8011:41:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 13524, + "nodeType": "Block", + "src": "8317:60:59", + "statements": [ + { + "expression": { + "id": 13522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13520, + "name": "anyNonExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13448, + "src": "8339:12:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 13521, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8354:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "8339:19:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13523, + "nodeType": "ExpressionStatement", + "src": "8339:19:59" + } + ] + }, + "id": 13525, + "nodeType": "IfStatement", + "src": "8007:370:59", + "trueBody": { + "id": 13519, + "nodeType": "Block", + "src": "8054:257:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "id": 13502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 13496, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "8085:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13498, + "indexExpression": { + "id": 13497, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8099:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8085:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13500, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8119:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13499, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "8105:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13501, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8105:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "8085:36:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 13503, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "8123:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TOKEN_DOES_NOT_HAVE_RATE_PROVIDER", + "nodeType": "MemberAccess", + "referencedDeclaration": 737, + "src": "8123:40:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13495, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "8076:8:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 13505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8076:88:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13506, + "nodeType": "ExpressionStatement", + "src": "8076:88:59" + }, + { + "expression": { + "id": 13513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13507, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "8186:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "hexValue": "74727565", + "id": 13510, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8245:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 13511, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "8251:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 13508, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "8211:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "insertBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6690, + "src": "8211:33:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,bool,uint256) pure returns (bytes32)" + } + }, + "id": 13512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8211:42:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8186:67:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13514, + "nodeType": "ExpressionStatement", + "src": "8186:67:59" + }, + { + "expression": { + "id": 13517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13515, + "name": "anyExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13444, + "src": "8276:9:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 13516, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8288:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "8276:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13518, + "nodeType": "ExpressionStatement", + "src": "8276:16:59" + } + ] + } + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13455, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7523:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "expression": { + "id": 13456, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13229, + "src": "7527:6:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + }, + "id": 13457, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "registeredTokens", + "nodeType": "MemberAccess", + "referencedDeclaration": 13168, + "src": "7527:23:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 13458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7527:30:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7523:34:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13598, + "initializationExpression": { + "assignments": [ + 13452 + ], + "declarations": [ + { + "constant": false, + "id": 13452, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 13598, + "src": "7508:9:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13451, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7508:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13454, + "initialValue": { + "hexValue": "30", + "id": 13453, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7520:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7508:13:59" + }, + "loopExpression": { + "expression": { + "id": 13461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "7559:3:59", + "subExpression": { + "id": 13460, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13452, + "src": "7561:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13462, + "nodeType": "ExpressionStatement", + "src": "7559:3:59" + }, + "nodeType": "ForStatement", + "src": "7503:1726:59" + }, + { + "expression": { + "id": 13602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13599, + "name": "_noTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13222, + "src": "9239:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 13601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9257:10:59", + "subExpression": { + "id": 13600, + "name": "anyExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13444, + "src": "9258:9:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9239:28:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13603, + "nodeType": "ExpressionStatement", + "src": "9239:28:59" + }, + { + "expression": { + "id": 13607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13604, + "name": "_allTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13224, + "src": "9277:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 13606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9296:13:59", + "subExpression": { + "id": 13605, + "name": "anyNonExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13448, + "src": "9297:12:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9277:32:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13608, + "nodeType": "ExpressionStatement", + "src": "9277:32:59" + }, + { + "expression": { + "id": 13613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13609, + "name": "_rateProvider0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13208, + "src": "9435:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 13610, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9452:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13612, + "indexExpression": { + "hexValue": "30", + "id": 13611, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9466:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9452:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "9435:33:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13614, + "nodeType": "ExpressionStatement", + "src": "9435:33:59" + }, + { + "expression": { + "id": 13619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13615, + "name": "_rateProvider1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13210, + "src": "9478:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 13616, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9495:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13618, + "indexExpression": { + "hexValue": "31", + "id": 13617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9509:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9495:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "9478:33:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13620, + "nodeType": "ExpressionStatement", + "src": "9478:33:59" + }, + { + "expression": { + "id": 13625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13621, + "name": "_rateProvider2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13212, + "src": "9521:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 13622, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9538:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13624, + "indexExpression": { + "hexValue": "32", + "id": 13623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9552:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9538:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "9521:33:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13626, + "nodeType": "ExpressionStatement", + "src": "9521:33:59" + }, + { + "expression": { + "id": 13640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13627, + "name": "_rateProvider3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13214, + "src": "9564:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13631, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13628, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9582:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9582:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "33", + "id": 13630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9605:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "9582:24:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 13632, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9581:26:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9643:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13636, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "9629:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13638, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9629:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9581:64:59", + "trueExpression": { + "baseExpression": { + "id": 13633, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9610:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13635, + "indexExpression": { + "hexValue": "33", + "id": 13634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9624:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9610:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "9564:81:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13641, + "nodeType": "ExpressionStatement", + "src": "9564:81:59" + }, + { + "expression": { + "id": 13655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13642, + "name": "_rateProvider4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13216, + "src": "9655:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13646, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13643, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9673:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9673:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "34", + "id": 13645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9696:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "9673:24:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 13647, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9672:26:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13652, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9734:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13651, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "9720:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13653, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9720:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9672:64:59", + "trueExpression": { + "baseExpression": { + "id": 13648, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9701:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13650, + "indexExpression": { + "hexValue": "34", + "id": 13649, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9715:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9701:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "9655:81:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13656, + "nodeType": "ExpressionStatement", + "src": "9655:81:59" + }, + { + "expression": { + "id": 13670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13657, + "name": "_rateProvider5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13218, + "src": "9746:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13658, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9764:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13659, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9764:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "35", + "id": 13660, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9787:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "9764:24:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 13662, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9763:26:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 13667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9825:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 13666, + "name": "IRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "9811:13:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IRateProvider_$428_$", + "typeString": "type(contract IRateProvider)" + } + }, + "id": 13668, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9811:16:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "9763:64:59", + "trueExpression": { + "baseExpression": { + "id": 13663, + "name": "rateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13431, + "src": "9792:13:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 13665, + "indexExpression": { + "hexValue": "35", + "id": 13664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9806:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9792:16:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "9746:81:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 13671, + "nodeType": "ExpressionStatement", + "src": "9746:81:59" + }, + { + "expression": { + "id": 13674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13672, + "name": "_rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13220, + "src": "9838:23:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 13673, + "name": "rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13441, + "src": "9864:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "9838:48:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 13675, + "nodeType": "ExpressionStatement", + "src": "9838:48:59" + } + ] + }, + "id": 13677, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13230, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13229, + "mutability": "mutable", + "name": "params", + "nodeType": "VariableDeclaration", + "scope": 13677, + "src": "4218:27:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams" + }, + "typeName": { + "id": 13228, + "name": "StorageParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13175, + "src": "4218:13:59", + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_storage_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams" + } + }, + "visibility": "internal" + } + ], + "src": "4217:29:59" + }, + "returnParameters": { + "id": 13231, + "nodeType": "ParameterList", + "parameters": [], + "src": "4247:0:59" + }, + "scope": 14193, + "src": "4206:5687:59", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2654 + ], + "body": { + "id": 13685, + "nodeType": "Block", + "src": "9990:36:59", + "statements": [ + { + "expression": { + "id": 13683, + "name": "_totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13180, + "src": "10007:12:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13682, + "id": 13684, + "nodeType": "Return", + "src": "10000:19:59" + } + ] + }, + "id": 13686, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getTotalTokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 13679, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "9963:8:59" + }, + "parameters": { + "id": 13678, + "nodeType": "ParameterList", + "parameters": [], + "src": "9938:2:59" + }, + "returnParameters": { + "id": 13682, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13681, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13686, + "src": "9981:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13680, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9981:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9980:9:59" + }, + "scope": 14193, + "src": "9914:112:59", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 2659 + ], + "body": { + "id": 13697, + "nodeType": "Block", + "src": "10098:158:59", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13692, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "10216:10:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 13693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_MAX_STABLE_TOKENS", + "nodeType": "MemberAccess", + "referencedDeclaration": 14212, + "src": "10216:29:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 13694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10248:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "10216:33:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13691, + "id": 13696, + "nodeType": "Return", + "src": "10209:40:59" + } + ] + }, + "id": 13698, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getMaxTokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 13688, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10071:8:59" + }, + "parameters": { + "id": 13687, + "nodeType": "ParameterList", + "parameters": [], + "src": "10054:2:59" + }, + "returnParameters": { + "id": 13691, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13690, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13698, + "src": "10089:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13689, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10089:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10088:9:59" + }, + "scope": 14193, + "src": "10032:224:59", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13705, + "nodeType": "Block", + "src": "10315:33:59", + "statements": [ + { + "expression": { + "id": 13703, + "name": "_bptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13182, + "src": "10332:9:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13702, + "id": 13704, + "nodeType": "Return", + "src": "10325:16:59" + } + ] + }, + "functionSelector": "82687a56", + "id": 13706, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBptIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13699, + "nodeType": "ParameterList", + "parameters": [], + "src": "10282:2:59" + }, + "returnParameters": { + "id": 13702, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13701, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13706, + "src": "10306:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10306:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10305:9:59" + }, + "scope": 14193, + "src": "10262:86:59", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 13754, + "nodeType": "Block", + "src": "10424:287:59", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13713, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13708, + "src": "10438:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13714, + "name": "_token0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13184, + "src": "10447:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "10438:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13718, + "nodeType": "IfStatement", + "src": "10434:30:59", + "trueBody": { + "expression": { + "hexValue": "30", + "id": 13716, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10463:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 13712, + "id": 13717, + "nodeType": "Return", + "src": "10456:8:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13719, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13708, + "src": "10478:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13720, + "name": "_token1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13186, + "src": "10487:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "10478:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13724, + "nodeType": "IfStatement", + "src": "10474:30:59", + "trueBody": { + "expression": { + "hexValue": "31", + "id": 13722, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10503:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "functionReturnParameters": 13712, + "id": 13723, + "nodeType": "Return", + "src": "10496:8:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13725, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13708, + "src": "10518:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13726, + "name": "_token2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13188, + "src": "10527:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "10518:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13730, + "nodeType": "IfStatement", + "src": "10514:30:59", + "trueBody": { + "expression": { + "hexValue": "32", + "id": 13728, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10543:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "functionReturnParameters": 13712, + "id": 13729, + "nodeType": "Return", + "src": "10536:8:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13731, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13708, + "src": "10558:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13732, + "name": "_token3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13190, + "src": "10567:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "10558:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13736, + "nodeType": "IfStatement", + "src": "10554:30:59", + "trueBody": { + "expression": { + "hexValue": "33", + "id": 13734, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10583:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "functionReturnParameters": 13712, + "id": 13735, + "nodeType": "Return", + "src": "10576:8:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13737, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13708, + "src": "10598:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13738, + "name": "_token4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13192, + "src": "10607:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "10598:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13742, + "nodeType": "IfStatement", + "src": "10594:30:59", + "trueBody": { + "expression": { + "hexValue": "34", + "id": 13740, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10623:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "functionReturnParameters": 13712, + "id": 13741, + "nodeType": "Return", + "src": "10616:8:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "id": 13745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13743, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13708, + "src": "10638:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 13744, + "name": "_token5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13194, + "src": "10647:7:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "src": "10638:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13748, + "nodeType": "IfStatement", + "src": "10634:30:59", + "trueBody": { + "expression": { + "hexValue": "35", + "id": 13746, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10663:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "functionReturnParameters": 13712, + "id": 13747, + "nodeType": "Return", + "src": "10656:8:59" + } + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 13750, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "10683:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_TOKEN", + "nodeType": "MemberAccess", + "referencedDeclaration": 641, + "src": "10683:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13749, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "10675:7:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 13752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10675:29:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13753, + "nodeType": "ExpressionStatement", + "src": "10675:29:59" + } + ] + }, + "id": 13755, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getTokenIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13709, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13708, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 13755, + "src": "10378:12:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13707, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "10378:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "10377:14:59" + }, + "returnParameters": { + "id": 13712, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13711, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13755, + "src": "10415:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13710, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10415:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10414:9:59" + }, + "scope": 14193, + "src": "10354:357:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3512 + ], + "body": { + "id": 13768, + "nodeType": "Block", + "src": "10798:232:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 13764, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "11002:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "UNIMPLEMENTED", + "nodeType": "MemberAccess", + "referencedDeclaration": 1007, + "src": "11002:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13763, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "10994:7:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 13766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10994:29:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13767, + "nodeType": "ExpressionStatement", + "src": "10994:29:59" + } + ] + }, + "id": 13769, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_scalingFactor", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 13759, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "10771:8:59" + }, + "parameters": { + "id": 13758, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13757, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13769, + "src": "10741:6:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 13756, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "10741:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "10740:8:59" + }, + "returnParameters": { + "id": 13762, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13761, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13769, + "src": "10789:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13760, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10789:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10788:9:59" + }, + "scope": 14193, + "src": "10717:313:59", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 13796, + "nodeType": "Block", + "src": "11374:313:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13777, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13771, + "src": "11573:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13778, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "11582:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13779, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11582:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11573:22:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 13781, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "11597:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "11597:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13776, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "11564:8:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 13783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11564:54:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13784, + "nodeType": "ExpressionStatement", + "src": "11564:54:59" + }, + { + "expression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13785, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13771, + "src": "11636:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13786, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "11644:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11644:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11636:21:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "31", + "id": 13792, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11678:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "expression": { + "id": 13790, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13771, + "src": "11668:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "11668:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 13793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11668:12:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "11636:44:59", + "trueExpression": { + "id": 13789, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13771, + "src": "11660:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13775, + "id": 13795, + "nodeType": "Return", + "src": "11629:51:59" + } + ] + }, + "id": 13797, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_skipBptIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13772, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13771, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 13797, + "src": "11327:13:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13770, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11327:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11326:15:59" + }, + "returnParameters": { + "id": 13775, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13774, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13797, + "src": "11365:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11365:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11364:9:59" + }, + "scope": 14193, + "src": "11304:383:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13852, + "nodeType": "Block", + "src": "11884:272:59", + "statements": [ + { + "assignments": [ + 13811 + ], + "declarations": [ + { + "constant": false, + "id": 13811, + "mutability": "mutable", + "name": "amountsWithoutBpt", + "nodeType": "VariableDeclaration", + "scope": 13852, + "src": "11894:34:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13809, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11894:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13810, + "nodeType": "ArrayTypeName", + "src": "11894:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 13820, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13815, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13801, + "src": "11945:7:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11945:14:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 13817, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11962:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "11945:18:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13814, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "11931:13:59", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 13812, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11935:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13813, + "nodeType": "ArrayTypeName", + "src": "11935:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 13819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11931:33:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11894:70:59" + }, + { + "body": { + "id": 13848, + "nodeType": "Block", + "src": "12029:86:59", + "statements": [ + { + "expression": { + "id": 13846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 13832, + "name": "amountsWithoutBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13811, + "src": "12043:17:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13834, + "indexExpression": { + "id": 13833, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13822, + "src": "12061:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "12043:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 13835, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13801, + "src": "12066:7:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13845, + "indexExpression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13836, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13822, + "src": "12074:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13837, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "12078:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12078:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12074:17:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13841, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13822, + "src": "12098:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 13842, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12102:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "12098:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "12074:29:59", + "trueExpression": { + "id": 13840, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13822, + "src": "12094:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12066:38:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12043:61:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13847, + "nodeType": "ExpressionStatement", + "src": "12043:61:59" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13825, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13822, + "src": "11994:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 13826, + "name": "amountsWithoutBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13811, + "src": "11998:17:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13827, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11998:24:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11994:28:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13849, + "initializationExpression": { + "assignments": [ + 13822 + ], + "declarations": [ + { + "constant": false, + "id": 13822, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 13849, + "src": "11979:9:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11979:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13824, + "initialValue": { + "hexValue": "30", + "id": 13823, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11991:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11979:13:59" + }, + "loopExpression": { + "expression": { + "id": 13830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "12024:3:59", + "subExpression": { + "id": 13829, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13822, + "src": "12024:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13831, + "nodeType": "ExpressionStatement", + "src": "12024:3:59" + }, + "nodeType": "ForStatement", + "src": "11974:141:59" + }, + { + "expression": { + "id": 13850, + "name": "amountsWithoutBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13811, + "src": "12132:17:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 13806, + "id": 13851, + "nodeType": "Return", + "src": "12125:24:59" + } + ] + }, + "documentation": { + "id": 13798, + "nodeType": "StructuredDocumentation", + "src": "11693:97:59", + "text": " @dev Remove the item at `_bptIndex` from an arbitrary array (e.g., amountsIn)." + }, + "id": 13853, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_dropBptItem", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13802, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13801, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 13853, + "src": "11817:24:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13799, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11817:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13800, + "nodeType": "ArrayTypeName", + "src": "11817:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "11816:26:59" + }, + "returnParameters": { + "id": 13806, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13805, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13853, + "src": "11866:16:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11866:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13804, + "nodeType": "ArrayTypeName", + "src": "11866:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "11865:18:59" + }, + "scope": 14193, + "src": "11795:361:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13876, + "nodeType": "Block", + "src": "12489:112:59", + "statements": [ + { + "expression": { + "components": [ + { + "arguments": [ + { + "baseExpression": { + "id": 13866, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13857, + "src": "12525:18:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13869, + "indexExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13867, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "12544:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12544:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12525:33:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13865, + "name": "_getVirtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14192, + "src": "12507:17:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 13870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12507:52:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 13872, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13857, + "src": "12574:18:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 13871, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "12561:12:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 13873, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12561:32:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 13874, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12506:88:59", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(uint256,uint256[] memory)" + } + }, + "functionReturnParameters": 13864, + "id": 13875, + "nodeType": "Return", + "src": "12499:95:59" + } + ] + }, + "documentation": { + "id": 13854, + "nodeType": "StructuredDocumentation", + "src": "12162:173:59", + "text": " @dev Same as `_dropBptItem`, except the virtual supply is also returned, and `balances` is assumed to be the\n current Pool balances (including BPT)." + }, + "id": 13877, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_dropBptItemFromBalances", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13858, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13857, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 13877, + "src": "12374:35:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13855, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12374:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13856, + "nodeType": "ArrayTypeName", + "src": "12374:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "12373:37:59" + }, + "returnParameters": { + "id": 13864, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13860, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13877, + "src": "12458:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13859, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12458:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13863, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 13877, + "src": "12467:16:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13861, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12467:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13862, + "nodeType": "ArrayTypeName", + "src": "12467:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "12457:27:59" + }, + "scope": 14193, + "src": "12340:261:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13910, + "nodeType": "Block", + "src": "13030:355:59", + "statements": [ + { + "expression": { + "id": 13895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13884, + "name": "registeredIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13882, + "src": "13111:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13885, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13879, + "src": "13129:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13886, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "13137:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13887, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13137:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13129:21:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "hexValue": "31", + "id": 13892, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13171:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "expression": { + "id": 13890, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13879, + "src": "13161:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "13161:9:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 13893, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13161:12:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "13129:44:59", + "trueExpression": { + "id": 13889, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13879, + "src": "13153:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13111:62:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13896, + "nodeType": "ExpressionStatement", + "src": "13111:62:59" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 13905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13900, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13898, + "name": "registeredIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13882, + "src": "13289:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 13899, + "name": "_totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13180, + "src": "13307:12:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13289:30:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13901, + "name": "registeredIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13882, + "src": "13323:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13902, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "13342:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13342:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13323:32:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "13289:66:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 13906, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "13357:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 13907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "OUT_OF_BOUNDS", + "nodeType": "MemberAccess", + "referencedDeclaration": 563, + "src": "13357:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13897, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "13280:8:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 13908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13280:98:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 13909, + "nodeType": "ExpressionStatement", + "src": "13280:98:59" + } + ] + }, + "id": 13911, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addBptIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13880, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13879, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 13911, + "src": "12967:13:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13878, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12967:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12966:15:59" + }, + "returnParameters": { + "id": 13883, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13882, + "mutability": "mutable", + "name": "registeredIndex", + "nodeType": "VariableDeclaration", + "scope": 13911, + "src": "13005:23:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13881, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13005:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13004:25:59" + }, + "scope": 14193, + "src": "12945:440:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 13969, + "nodeType": "Block", + "src": "13853:268:59", + "statements": [ + { + "expression": { + "id": 13932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 13923, + "name": "registeredTokenAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13921, + "src": "13863:22:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 13927, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13915, + "src": "13902:7:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13902:14:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 13929, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13919:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "13902:18:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 13926, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "13888:13:59", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 13924, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13892:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13925, + "nodeType": "ArrayTypeName", + "src": "13892:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 13931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13888:33:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "src": "13863:58:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13933, + "nodeType": "ExpressionStatement", + "src": "13863:58:59" + }, + { + "body": { + "id": 13967, + "nodeType": "Block", + "src": "13991:124:59", + "statements": [ + { + "expression": { + "id": 13965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 13945, + "name": "registeredTokenAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13921, + "src": "14005:22:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13947, + "indexExpression": { + "id": 13946, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "14028:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "14005:25:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13948, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "14033:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13949, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "14038:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14038:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14033:18:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "baseExpression": { + "id": 13953, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13915, + "src": "14066:7:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13963, + "indexExpression": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13954, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "14074:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13955, + "name": "getBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13706, + "src": "14078:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 13956, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14078:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14074:17:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13959, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "14098:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "hexValue": "31", + "id": 13960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14102:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "14098:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "14074:29:59", + "trueExpression": { + "id": 13958, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "14094:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14066:38:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "14033:71:59", + "trueExpression": { + "id": 13952, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13917, + "src": "14054:9:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14005:99:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13966, + "nodeType": "ExpressionStatement", + "src": "14005:99:59" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13938, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "13951:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 13939, + "name": "registeredTokenAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13921, + "src": "13955:22:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 13940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13955:29:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13951:33:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13968, + "initializationExpression": { + "assignments": [ + 13935 + ], + "declarations": [ + { + "constant": false, + "id": 13935, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 13968, + "src": "13936:9:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13934, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13936:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 13937, + "initialValue": { + "hexValue": "30", + "id": 13936, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13948:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13936:13:59" + }, + "loopExpression": { + "expression": { + "id": 13943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "13986:3:59", + "subExpression": { + "id": 13942, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13935, + "src": "13986:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13944, + "nodeType": "ExpressionStatement", + "src": "13986:3:59" + }, + "nodeType": "ForStatement", + "src": "13931:184:59" + } + ] + }, + "documentation": { + "id": 13912, + "nodeType": "StructuredDocumentation", + "src": "13391:299:59", + "text": " @dev Take an array of arbitrary values the size of the token set without BPT, and insert the given\n bptAmount at the bptIndex location.\n The caller is responsible for ensuring the `amounts` input array is sized properly; this function\n performs no checks." + }, + "id": 13970, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addBptItem", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13918, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13915, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 13970, + "src": "13716:24:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13913, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13716:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13914, + "nodeType": "ArrayTypeName", + "src": "13716:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13917, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 13970, + "src": "13742:17:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13916, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13742:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13715:45:59" + }, + "returnParameters": { + "id": 13922, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13921, + "mutability": "mutable", + "name": "registeredTokenAmounts", + "nodeType": "VariableDeclaration", + "scope": 13970, + "src": "13808:39:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 13919, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13808:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 13920, + "nodeType": "ArrayTypeName", + "src": "13808:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "13807:41:59" + }, + "scope": 14193, + "src": "13695:426:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14019, + "nodeType": "Block", + "src": "14224:363:59", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13979, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13977, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13972, + "src": "14238:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 13978, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14247:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14238:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13982, + "nodeType": "IfStatement", + "src": "14234:38:59", + "trueBody": { + "expression": { + "id": 13980, + "name": "_scalingFactor0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13196, + "src": "14257:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13976, + "id": 13981, + "nodeType": "Return", + "src": "14250:22:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13983, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13972, + "src": "14286:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 13984, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14295:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "14286:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13988, + "nodeType": "IfStatement", + "src": "14282:38:59", + "trueBody": { + "expression": { + "id": 13986, + "name": "_scalingFactor1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13198, + "src": "14305:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13976, + "id": 13987, + "nodeType": "Return", + "src": "14298:22:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13989, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13972, + "src": "14334:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "32", + "id": 13990, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14343:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "14334:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 13994, + "nodeType": "IfStatement", + "src": "14330:38:59", + "trueBody": { + "expression": { + "id": 13992, + "name": "_scalingFactor2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13200, + "src": "14353:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13976, + "id": 13993, + "nodeType": "Return", + "src": "14346:22:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 13997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 13995, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13972, + "src": "14382:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "33", + "id": 13996, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14391:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "14382:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14000, + "nodeType": "IfStatement", + "src": "14378:38:59", + "trueBody": { + "expression": { + "id": 13998, + "name": "_scalingFactor3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13202, + "src": "14401:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13976, + "id": 13999, + "nodeType": "Return", + "src": "14394:22:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14001, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13972, + "src": "14430:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "34", + "id": 14002, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14439:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "14430:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14006, + "nodeType": "IfStatement", + "src": "14426:38:59", + "trueBody": { + "expression": { + "id": 14004, + "name": "_scalingFactor4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13204, + "src": "14449:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13976, + "id": 14005, + "nodeType": "Return", + "src": "14442:22:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14007, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13972, + "src": "14478:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "35", + "id": 14008, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14487:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "14478:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 14017, + "nodeType": "Block", + "src": "14527:54:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 14013, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "14549:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 14014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_TOKEN", + "nodeType": "MemberAccess", + "referencedDeclaration": 641, + "src": "14549:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14012, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "14541:7:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 14015, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14541:29:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 14016, + "nodeType": "ExpressionStatement", + "src": "14541:29:59" + } + ] + }, + "id": 14018, + "nodeType": "IfStatement", + "src": "14474:107:59", + "trueBody": { + "expression": { + "id": 14010, + "name": "_scalingFactor5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13206, + "src": "14497:15:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 13976, + "id": 14011, + "nodeType": "Return", + "src": "14490:22:59" + } + } + ] + }, + "id": 14020, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getScalingFactor", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 13973, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13972, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 14020, + "src": "14177:13:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13971, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14177:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14176:15:59" + }, + "returnParameters": { + "id": 13976, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 13975, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14020, + "src": "14215:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 13974, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14215:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14214:9:59" + }, + "scope": 14193, + "src": "14150:437:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14064, + "nodeType": "Block", + "src": "14784:271:59", + "statements": [ + { + "assignments": [ + 14028 + ], + "declarations": [ + { + "constant": false, + "id": 14028, + "mutability": "mutable", + "name": "totalTokens", + "nodeType": "VariableDeclaration", + "scope": 14064, + "src": "14794:19:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14027, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14794:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14031, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 14029, + "name": "_getTotalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 13686 + ], + "referencedDeclaration": 13686, + "src": "14816:15:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 14030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14816:17:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14794:39:59" + }, + { + "assignments": [ + 14035 + ], + "declarations": [ + { + "constant": false, + "id": 14035, + "mutability": "mutable", + "name": "providers", + "nodeType": "VariableDeclaration", + "scope": 14064, + "src": "14843:32:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 14033, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "14843:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 14034, + "nodeType": "ArrayTypeName", + "src": "14843:15:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + } + ], + "id": 14041, + "initialValue": { + "arguments": [ + { + "id": 14039, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14028, + "src": "14898:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14038, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "14878:19:59", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (contract IRateProvider[] memory)" + }, + "typeName": { + "baseType": { + "id": 14036, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "14882:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 14037, + "nodeType": "ArrayTypeName", + "src": "14882:15:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + } + }, + "id": 14040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14878:32:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14843:67:59" + }, + { + "body": { + "id": 14060, + "nodeType": "Block", + "src": "14963:59:59", + "statements": [ + { + "expression": { + "id": 14058, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14052, + "name": "providers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14035, + "src": "14977:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "id": 14054, + "indexExpression": { + "id": 14053, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14043, + "src": "14987:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "14977:12:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 14056, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14043, + "src": "15009:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14055, + "name": "_getRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14115, + "src": "14992:16:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_contract$_IRateProvider_$428_$", + "typeString": "function (uint256) view returns (contract IRateProvider)" + } + }, + "id": 14057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14992:19:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "src": "14977:34:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 14059, + "nodeType": "ExpressionStatement", + "src": "14977:34:59" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14046, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14043, + "src": "14941:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 14047, + "name": "totalTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14028, + "src": "14945:11:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14941:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14061, + "initializationExpression": { + "assignments": [ + 14043 + ], + "declarations": [ + { + "constant": false, + "id": 14043, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14061, + "src": "14926:9:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14042, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14926:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14045, + "initialValue": { + "hexValue": "30", + "id": 14044, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14938:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "14926:13:59" + }, + "loopExpression": { + "expression": { + "id": 14050, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "14958:3:59", + "subExpression": { + "id": 14049, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14043, + "src": "14960:1:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14051, + "nodeType": "ExpressionStatement", + "src": "14958:3:59" + }, + "nodeType": "ForStatement", + "src": "14921:101:59" + }, + { + "expression": { + "id": 14062, + "name": "providers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14035, + "src": "15039:9:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + "functionReturnParameters": 14026, + "id": 14063, + "nodeType": "Return", + "src": "15032:16:59" + } + ] + }, + "documentation": { + "id": 14021, + "nodeType": "StructuredDocumentation", + "src": "14593:111:59", + "text": " @dev Returns the rate providers configured for each token (in the same order as registered)." + }, + "functionSelector": "238a2d59", + "id": 14065, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProviders", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14022, + "nodeType": "ParameterList", + "parameters": [], + "src": "14734:2:59" + }, + "returnParameters": { + "id": 14026, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14025, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14065, + "src": "14760:22:59", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 14023, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "14760:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 14024, + "nodeType": "ArrayTypeName", + "src": "14760:15:59", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + } + ], + "src": "14759:24:59" + }, + "scope": 14193, + "src": "14709:346:59", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 14114, + "nodeType": "Block", + "src": "15140:357:59", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14072, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14067, + "src": "15154:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 14073, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15163:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "15154:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14077, + "nodeType": "IfStatement", + "src": "15150:37:59", + "trueBody": { + "expression": { + "id": 14075, + "name": "_rateProvider0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13208, + "src": "15173:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 14071, + "id": 14076, + "nodeType": "Return", + "src": "15166:21:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14078, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14067, + "src": "15201:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 14079, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15210:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "15201:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14083, + "nodeType": "IfStatement", + "src": "15197:37:59", + "trueBody": { + "expression": { + "id": 14081, + "name": "_rateProvider1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13210, + "src": "15220:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 14071, + "id": 14082, + "nodeType": "Return", + "src": "15213:21:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14084, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14067, + "src": "15248:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "32", + "id": 14085, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15257:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "15248:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14089, + "nodeType": "IfStatement", + "src": "15244:37:59", + "trueBody": { + "expression": { + "id": 14087, + "name": "_rateProvider2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13212, + "src": "15267:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 14071, + "id": 14088, + "nodeType": "Return", + "src": "15260:21:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14090, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14067, + "src": "15295:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "33", + "id": 14091, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15304:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "15295:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14095, + "nodeType": "IfStatement", + "src": "15291:37:59", + "trueBody": { + "expression": { + "id": 14093, + "name": "_rateProvider3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13214, + "src": "15314:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 14071, + "id": 14094, + "nodeType": "Return", + "src": "15307:21:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14096, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14067, + "src": "15342:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "34", + "id": 14097, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15351:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "src": "15342:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14101, + "nodeType": "IfStatement", + "src": "15338:37:59", + "trueBody": { + "expression": { + "id": 14099, + "name": "_rateProvider4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13216, + "src": "15361:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 14071, + "id": 14100, + "nodeType": "Return", + "src": "15354:21:59" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14102, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14067, + "src": "15389:5:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "35", + "id": 14103, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15398:1:59", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "src": "15389:10:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 14112, + "nodeType": "Block", + "src": "15437:54:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 14108, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "15459:6:59", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 14109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "INVALID_TOKEN", + "nodeType": "MemberAccess", + "referencedDeclaration": 641, + "src": "15459:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14107, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "15451:7:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 14110, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15451:29:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 14111, + "nodeType": "ExpressionStatement", + "src": "15451:29:59" + } + ] + }, + "id": 14113, + "nodeType": "IfStatement", + "src": "15385:106:59", + "trueBody": { + "expression": { + "id": 14105, + "name": "_rateProvider5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13218, + "src": "15408:14:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 14071, + "id": 14106, + "nodeType": "Return", + "src": "15401:21:59" + } + } + ] + }, + "id": 14115, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getRateProvider", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14068, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14067, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 14115, + "src": "15087:13:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14066, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15087:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15086:15:59" + }, + "returnParameters": { + "id": 14071, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14070, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14115, + "src": "15125:13:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 14069, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "15125:13:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "15124:15:59" + }, + "scope": 14193, + "src": "15061:436:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14130, + "nodeType": "Block", + "src": "15668:100:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14125, + "name": "_RATE_PROVIDER_FLAGS_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13227, + "src": "15720:27:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 14126, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14118, + "src": "15750:10:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15720:40:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14123, + "name": "_rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13220, + "src": "15685:23:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 14124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6602, + "src": "15685:34:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256) pure returns (bool)" + } + }, + "id": 14128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15685:76:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 14122, + "id": 14129, + "nodeType": "Return", + "src": "15678:83:59" + } + ] + }, + "documentation": { + "id": 14116, + "nodeType": "StructuredDocumentation", + "src": "15503:85:59", + "text": " @notice Return true if the token at this index has a rate provider" + }, + "id": 14131, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_hasRateProvider", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14118, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 14131, + "src": "15619:18:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15619:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15618:20:59" + }, + "returnParameters": { + "id": 14122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14121, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14131, + "src": "15662:4:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14120, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15662:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "15661:6:59" + }, + "scope": 14193, + "src": "15593:175:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14139, + "nodeType": "Block", + "src": "15919:40:59", + "statements": [ + { + "expression": { + "id": 14137, + "name": "_allTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13224, + "src": "15936:16:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 14136, + "id": 14138, + "nodeType": "Return", + "src": "15929:23:59" + } + ] + }, + "documentation": { + "id": 14132, + "nodeType": "StructuredDocumentation", + "src": "15774:80:59", + "text": " @notice Return true if all tokens are exempt from yield fees." + }, + "id": 14140, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_areAllTokensExempt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14133, + "nodeType": "ParameterList", + "parameters": [], + "src": "15887:2:59" + }, + "returnParameters": { + "id": 14136, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14135, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14140, + "src": "15913:4:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14134, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15913:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "15912:6:59" + }, + "scope": 14193, + "src": "15859:100:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14148, + "nodeType": "Block", + "src": "16108:39:59", + "statements": [ + { + "expression": { + "id": 14146, + "name": "_noTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13222, + "src": "16125:15:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 14145, + "id": 14147, + "nodeType": "Return", + "src": "16118:22:59" + } + ] + }, + "documentation": { + "id": 14141, + "nodeType": "StructuredDocumentation", + "src": "15965:79:59", + "text": " @notice Return true if no tokens are exempt from yield fees." + }, + "id": 14149, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_areNoTokensExempt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14142, + "nodeType": "ParameterList", + "parameters": [], + "src": "16076:2:59" + }, + "returnParameters": { + "id": 14145, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14144, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14149, + "src": "16102:4:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14143, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16102:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "16101:6:59" + }, + "scope": 14193, + "src": "16049:98:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14163, + "nodeType": "Block", + "src": "16524:81:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 14159, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14152, + "src": "16591:5:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 14158, + "name": "_getTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13755, + "src": "16576:14:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 14160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16576:21:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14157, + "name": "_isTokenExemptFromYieldProtocolFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14177, + "src": "16541:34:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 14161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16541:57:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 14156, + "id": 14162, + "nodeType": "Return", + "src": "16534:64:59" + } + ] + }, + "documentation": { + "id": 14150, + "nodeType": "StructuredDocumentation", + "src": "16174:259:59", + "text": " @dev Returns whether the token is exempt from protocol fees on the yield.\n If the BPT token is passed in (which doesn't make much sense, but shouldn't fail,\n since it is a valid pool token), the corresponding flag will be false." + }, + "functionSelector": "ab7759f1", + "id": 14164, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isTokenExemptFromYieldProtocolFee", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14153, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14152, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 14164, + "src": "16481:12:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 14151, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "16481:6:59", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "16480:14:59" + }, + "returnParameters": { + "id": 14156, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14155, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14164, + "src": "16518:4:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14154, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16518:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "16517:6:59" + }, + "scope": 14193, + "src": "16438:167:59", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 14176, + "nodeType": "Block", + "src": "16799:80:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 14173, + "name": "registeredTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14166, + "src": "16851:20:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14171, + "name": "_rateProviderInfoBitmap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13220, + "src": "16816:23:59", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 14172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeBool", + "nodeType": "MemberAccess", + "referencedDeclaration": 6602, + "src": "16816:34:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256) pure returns (bool)" + } + }, + "id": 14174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16816:56:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 14170, + "id": 14175, + "nodeType": "Return", + "src": "16809:63:59" + } + ] + }, + "id": 14177, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isTokenExemptFromYieldProtocolFee", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14167, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14166, + "mutability": "mutable", + "name": "registeredTokenIndex", + "nodeType": "VariableDeclaration", + "scope": 14177, + "src": "16740:28:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14165, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16740:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "16739:30:59" + }, + "returnParameters": { + "id": 14170, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14169, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14177, + "src": "16793:4:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 14168, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16793:4:59", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "16792:6:59" + }, + "scope": 14193, + "src": "16696:183:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14191, + "nodeType": "Block", + "src": "17895:338:59", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 14188, + "name": "bptBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14180, + "src": "18215:10:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 14185, + "name": "totalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9022, + "src": "18197:11:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 14186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18197:13:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "18197:17:59", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18197:29:59", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14184, + "id": 14190, + "nodeType": "Return", + "src": "18190:36:59" + } + ] + }, + "documentation": { + "id": 14178, + "nodeType": "StructuredDocumentation", + "src": "16908:903:59", + "text": " @dev Returns the number of tokens in circulation.\n WARNING: in the vast majority of cases this is not a useful value, since it does not include the debt the Pool\n accrued in the form of unminted BPT for the ProtocolFeesCollector. Look into `getActualSupply()` and how that's\n different.\n In other pools, this would be the same as `totalSupply`, but since this pool pre-mints BPT and holds it in the\n Vault as a token, we need to subtract the Vault's balance to get the total \"circulating supply\". Both the\n totalSupply and Vault balance can change. If users join or exit using swaps, some of the preminted BPT are\n exchanged, so the Vault's balance increases after joins and decreases after exits. If users call the regular\n joins/exit functions, the totalSupply can change as BPT are minted for joins or burned for exits." + }, + "id": 14192, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getVirtualSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14181, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14180, + "mutability": "mutable", + "name": "bptBalance", + "nodeType": "VariableDeclaration", + "scope": 14192, + "src": "17843:18:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17843:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17842:20:59" + }, + "returnParameters": { + "id": 14184, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14183, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14192, + "src": "17886:7:59", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14182, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17886:7:59", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "17885:9:59" + }, + "scope": 14193, + "src": "17816:417:59", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 14194, + "src": "1062:17173:59" + } + ], + "src": "688:17548:59" + }, + "id": 59 + }, + "contracts/StableMath.sol": { + "ast": { + "absolutePath": "contracts/StableMath.sol", + "exportedSymbols": { + "StableMath": [ + 15487 + ] + }, + "id": 15488, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 14195, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:60" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol", + "id": 14196, + "nodeType": "ImportDirective", + "scope": 15488, + "sourceUnit": 7233, + "src": "713:72:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol", + "id": 14197, + "nodeType": "ImportDirective", + "scope": 15488, + "sourceUnit": 8843, + "src": "786:66:60", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "fullyImplemented": true, + "id": 15487, + "linearizedBaseContracts": [ + 15487 + ], + "name": "StableMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 14200, + "libraryName": { + "id": 14198, + "name": "FixedPoint", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7232, + "src": "1209:10:60", + "typeDescriptions": { + "typeIdentifier": "t_contract$_FixedPoint_$7232", + "typeString": "library FixedPoint" + } + }, + "nodeType": "UsingForDirective", + "src": "1203:29:60", + "typeName": { + "id": 14199, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1224:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": true, + "id": 14203, + "mutability": "constant", + "name": "_MIN_AMP", + "nodeType": "VariableDeclaration", + "scope": 15487, + "src": "1238:38:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14201, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1238:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 14202, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1275:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 14206, + "mutability": "constant", + "name": "_MAX_AMP", + "nodeType": "VariableDeclaration", + "scope": 15487, + "src": "1282:41:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14204, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1282:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "35303030", + "id": 14205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1319:4:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_5000_by_1", + "typeString": "int_const 5000" + }, + "value": "5000" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 14209, + "mutability": "constant", + "name": "_AMP_PRECISION", + "nodeType": "VariableDeclaration", + "scope": 15487, + "src": "1329:46:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14207, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1329:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "316533", + "id": 14208, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1372:3:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000_by_1", + "typeString": "int_const 1000" + }, + "value": "1e3" + }, + "visibility": "internal" + }, + { + "constant": true, + "id": 14212, + "mutability": "constant", + "name": "_MAX_STABLE_TOKENS", + "nodeType": "VariableDeclaration", + "scope": 15487, + "src": "1382:48:60", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14210, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1382:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "35", + "id": 14211, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1429:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "visibility": "internal" + }, + { + "body": { + "id": 14400, + "nodeType": "Block", + "src": "3329:2724:60", + "statements": [ + { + "assignments": [ + 14223 + ], + "declarations": [ + { + "constant": false, + "id": 14223, + "mutability": "mutable", + "name": "sum", + "nodeType": "VariableDeclaration", + "scope": 14400, + "src": "4257:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14222, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4257:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14225, + "initialValue": { + "hexValue": "30", + "id": 14224, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4271:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4257:15:60" + }, + { + "assignments": [ + 14227 + ], + "declarations": [ + { + "constant": false, + "id": 14227, + "mutability": "mutable", + "name": "numTokens", + "nodeType": "VariableDeclaration", + "scope": 14400, + "src": "4308:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4308:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14230, + "initialValue": { + "expression": { + "id": 14228, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14217, + "src": "4328:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4328:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4308:35:60" + }, + { + "body": { + "id": 14250, + "nodeType": "Block", + "src": "4393:51:60", + "statements": [ + { + "expression": { + "id": 14248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14241, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14223, + "src": "4407:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 14244, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14217, + "src": "4421:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14246, + "indexExpression": { + "id": 14245, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14232, + "src": "4430:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4421:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14242, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14223, + "src": "4413:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "4413:7:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4413:20:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4407:26:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14249, + "nodeType": "ExpressionStatement", + "src": "4407:26:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14237, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14235, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14232, + "src": "4373:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 14236, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14227, + "src": "4377:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4373:13:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14251, + "initializationExpression": { + "assignments": [ + 14232 + ], + "declarations": [ + { + "constant": false, + "id": 14232, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14251, + "src": "4358:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14231, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4358:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14234, + "initialValue": { + "hexValue": "30", + "id": 14233, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4370:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4358:13:60" + }, + "loopExpression": { + "expression": { + "id": 14239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "4388:3:60", + "subExpression": { + "id": 14238, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14232, + "src": "4388:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14240, + "nodeType": "ExpressionStatement", + "src": "4388:3:60" + }, + "nodeType": "ForStatement", + "src": "4353:91:60" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14252, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14223, + "src": "4457:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 14253, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4464:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4457:8:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14258, + "nodeType": "IfStatement", + "src": "4453:47:60", + "trueBody": { + "id": 14257, + "nodeType": "Block", + "src": "4467:33:60", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 14255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4488:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 14221, + "id": 14256, + "nodeType": "Return", + "src": "4481:8:60" + } + ] + } + }, + { + "assignments": [ + 14260 + ], + "declarations": [ + { + "constant": false, + "id": 14260, + "mutability": "mutable", + "name": "prevInvariant", + "nodeType": "VariableDeclaration", + "scope": 14400, + "src": "4510:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14259, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4510:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14261, + "nodeType": "VariableDeclarationStatement", + "src": "4510:21:60" + }, + { + "assignments": [ + 14263 + ], + "declarations": [ + { + "constant": false, + "id": 14263, + "mutability": "mutable", + "name": "invariant", + "nodeType": "VariableDeclaration", + "scope": 14400, + "src": "4571:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4571:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14265, + "initialValue": { + "id": 14264, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14223, + "src": "4591:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4571:23:60" + }, + { + "assignments": [ + 14267 + ], + "declarations": [ + { + "constant": false, + "id": 14267, + "mutability": "mutable", + "name": "ampTimesTotal", + "nodeType": "VariableDeclaration", + "scope": 14400, + "src": "4630:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14266, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4630:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14271, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14268, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14214, + "src": "4654:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 14269, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14227, + "src": "4679:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4654:34:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4630:58:60" + }, + { + "body": { + "id": 14393, + "nodeType": "Block", + "src": "4761:1228:60", + "statements": [ + { + "assignments": [ + 14283 + ], + "declarations": [ + { + "constant": false, + "id": 14283, + "mutability": "mutable", + "name": "D_P", + "nodeType": "VariableDeclaration", + "scope": 14393, + "src": "4775:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14282, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4775:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14285, + "initialValue": { + "id": 14284, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "4789:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4775:23:60" + }, + { + "body": { + "id": 14314, + "nodeType": "Block", + "src": "4853:176:60", + "statements": [ + { + "expression": { + "id": 14312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14296, + "name": "D_P", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14283, + "src": "4936:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 14301, + "name": "D_P", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14283, + "src": "4964:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14302, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "4969:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14299, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "4955:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "4955:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4955:24:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "baseExpression": { + "id": 14306, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14217, + "src": "4990:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14308, + "indexExpression": { + "id": 14307, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14287, + "src": "4999:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4990:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14309, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14227, + "src": "5003:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14304, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "4981:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "4981:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4981:32:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14297, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "4942:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "4942:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4942:72:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4936:78:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14313, + "nodeType": "ExpressionStatement", + "src": "4936:78:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14290, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14287, + "src": "4833:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 14291, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14227, + "src": "4837:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4833:13:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14315, + "initializationExpression": { + "assignments": [ + 14287 + ], + "declarations": [ + { + "constant": false, + "id": 14287, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 14315, + "src": "4818:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14286, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4818:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14289, + "initialValue": { + "hexValue": "30", + "id": 14288, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4830:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4818:13:60" + }, + "loopExpression": { + "expression": { + "id": 14294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "4848:3:60", + "subExpression": { + "id": 14293, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14287, + "src": "4848:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14295, + "nodeType": "ExpressionStatement", + "src": "4848:3:60" + }, + "nodeType": "ForStatement", + "src": "4813:216:60" + }, + { + "expression": { + "id": 14318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14316, + "name": "prevInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14260, + "src": "5043:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 14317, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5059:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5043:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14319, + "nodeType": "ExpressionStatement", + "src": "5043:25:60" + }, + { + "expression": { + "id": 14368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14320, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5083:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "components": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 14337, + "name": "D_P", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14283, + "src": "5307:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14338, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14227, + "src": "5312:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14335, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5298:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "5298:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5298:24:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 14329, + "name": "ampTimesTotal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14267, + "src": "5257:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14330, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14223, + "src": "5272:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14327, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5248:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "5248:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5248:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14332, + "name": "_AMP_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14209, + "src": "5278:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14325, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5235:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "5235:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5235:58:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "5235:62:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5235:88:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 14341, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5234:90:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14342, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5346:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14323, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5125:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "5125:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5125:248:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "components": [ + { + "arguments": [ + { + "arguments": [ + { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14359, + "name": "numTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14227, + "src": "5643:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 14360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5655:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5643:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 14362, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5642:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14363, + "name": "D_P", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14283, + "src": "5659:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14357, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5633:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "5633:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5633:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14348, + "name": "ampTimesTotal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14267, + "src": "5543:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 14349, + "name": "_AMP_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14209, + "src": "5559:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5543:30:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 14351, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5542:32:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14352, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5576:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14346, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5533:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "5533:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5533:53:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14354, + "name": "_AMP_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14209, + "src": "5588:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14344, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5520:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "5520:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5520:83:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "5520:87:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5520:165:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 14366, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5498:205:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14321, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "5095:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 14322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "5095:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5095:622:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5083:634:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14369, + "nodeType": "ExpressionStatement", + "src": "5083:634:60" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14370, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5736:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 14371, + "name": "prevInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14260, + "src": "5748:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5736:25:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14383, + "name": "prevInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14260, + "src": "5898:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 14384, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5914:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5898:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "hexValue": "31", + "id": 14386, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5927:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5898:30:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14391, + "nodeType": "IfStatement", + "src": "5894:85:60", + "trueBody": { + "id": 14390, + "nodeType": "Block", + "src": "5930:49:60", + "statements": [ + { + "expression": { + "id": 14388, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5955:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14221, + "id": 14389, + "nodeType": "Return", + "src": "5948:16:60" + } + ] + } + }, + "id": 14392, + "nodeType": "IfStatement", + "src": "5732:247:60", + "trueBody": { + "id": 14382, + "nodeType": "Block", + "src": "5763:125:60", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14373, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5785:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 14374, + "name": "prevInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14260, + "src": "5797:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5785:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "hexValue": "31", + "id": 14376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5814:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "5785:30:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14381, + "nodeType": "IfStatement", + "src": "5781:93:60", + "trueBody": { + "id": 14380, + "nodeType": "Block", + "src": "5817:57:60", + "statements": [ + { + "expression": { + "id": 14378, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14263, + "src": "5846:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14221, + "id": 14379, + "nodeType": "Return", + "src": "5839:16:60" + } + ] + } + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14276, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14273, + "src": "4747:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "323535", + "id": 14277, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4751:3:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "4747:7:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14394, + "initializationExpression": { + "assignments": [ + 14273 + ], + "declarations": [ + { + "constant": false, + "id": 14273, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14394, + "src": "4732:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14272, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4732:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14275, + "initialValue": { + "hexValue": "30", + "id": 14274, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4744:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "4732:13:60" + }, + "loopExpression": { + "expression": { + "id": 14280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "4756:3:60", + "subExpression": { + "id": 14279, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14273, + "src": "4756:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14281, + "nodeType": "ExpressionStatement", + "src": "4756:3:60" + }, + "nodeType": "ForStatement", + "src": "4727:1262:60" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 14396, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6007:6:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 14397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "STABLE_INVARIANT_DIDNT_CONVERGE", + "nodeType": "MemberAccess", + "referencedDeclaration": 677, + "src": "6007:38:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14395, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "5999:7:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 14398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5999:47:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 14399, + "nodeType": "ExpressionStatement", + "src": "5999:47:60" + } + ] + }, + "id": 14401, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calculateInvariant", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14218, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14214, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 14401, + "src": "3210:30:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14213, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3210:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14217, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 14401, + "src": "3242:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14215, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3242:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14216, + "nodeType": "ArrayTypeName", + "src": "3242:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "3209:59:60" + }, + "returnParameters": { + "id": 14221, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14220, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14401, + "src": "3316:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14219, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3316:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3315:9:60" + }, + "scope": 15487, + "src": "3181:2872:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14459, + "nodeType": "Block", + "src": "6485:2030:60", + "statements": [ + { + "expression": { + "id": 14428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14419, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14406, + "src": "7865:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14421, + "indexExpression": { + "id": 14420, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14408, + "src": "7874:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7865:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 14426, + "name": "tokenAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14412, + "src": "7917:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14422, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14406, + "src": "7890:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14424, + "indexExpression": { + "id": 14423, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14408, + "src": "7899:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7890:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "7890:26:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7890:41:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7865:66:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14429, + "nodeType": "ExpressionStatement", + "src": "7865:66:60" + }, + { + "assignments": [ + 14431 + ], + "declarations": [ + { + "constant": false, + "id": 14431, + "mutability": "mutable", + "name": "finalBalanceOut", + "nodeType": "VariableDeclaration", + "scope": 14459, + "src": "7942:23:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14430, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7942:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14438, + "initialValue": { + "arguments": [ + { + "id": 14433, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14403, + "src": "8031:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14434, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14406, + "src": "8067:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 14435, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14414, + "src": "8089:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14436, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14410, + "src": "8112:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14432, + "name": "_getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15427, + "src": "7968:49:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256) pure returns (uint256)" + } + }, + "id": 14437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7968:167:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7942:193:60" + }, + { + "expression": { + "id": 14447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14439, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14406, + "src": "8376:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14441, + "indexExpression": { + "id": 14440, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14408, + "src": "8385:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8376:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14446, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 14442, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14406, + "src": "8401:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14444, + "indexExpression": { + "id": 14443, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14408, + "src": "8410:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8401:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 14445, + "name": "tokenAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14412, + "src": "8426:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8401:38:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8376:63:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14448, + "nodeType": "ExpressionStatement", + "src": "8376:63:60" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "31", + "id": 14456, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8506:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "expression": { + "arguments": [ + { + "id": 14453, + "name": "finalBalanceOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14431, + "src": "8485:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14449, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14406, + "src": "8457:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14451, + "indexExpression": { + "id": 14450, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14410, + "src": "8466:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8457:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "8457:27:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8457:44:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14455, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "8457:48:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8457:51:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14418, + "id": 14458, + "nodeType": "Return", + "src": "8450:58:60" + } + ] + }, + "id": 14460, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calcOutGivenIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14415, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14403, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6262:30:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14402, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6262:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14406, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6302:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14404, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6302:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14405, + "nodeType": "ArrayTypeName", + "src": "6302:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14408, + "mutability": "mutable", + "name": "tokenIndexIn", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6337:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14407, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6337:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14410, + "mutability": "mutable", + "name": "tokenIndexOut", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6367:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6367:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14412, + "mutability": "mutable", + "name": "tokenAmountIn", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6398:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14411, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6398:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14414, + "mutability": "mutable", + "name": "invariant", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6429:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14413, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6429:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6252:200:60" + }, + "returnParameters": { + "id": 14418, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14417, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14460, + "src": "6476:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14416, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6476:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6475:9:60" + }, + "scope": 15487, + "src": "6228:2287:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14518, + "nodeType": "Block", + "src": "8991:2037:60", + "statements": [ + { + "expression": { + "id": 14487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14478, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14465, + "src": "10368:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14480, + "indexExpression": { + "id": 14479, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14469, + "src": "10377:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10368:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 14485, + "name": "tokenAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14471, + "src": "10422:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14481, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14465, + "src": "10394:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14483, + "indexExpression": { + "id": 14482, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14469, + "src": "10403:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10394:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "10394:27:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10394:43:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10368:69:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14488, + "nodeType": "ExpressionStatement", + "src": "10368:69:60" + }, + { + "assignments": [ + 14490 + ], + "declarations": [ + { + "constant": false, + "id": 14490, + "mutability": "mutable", + "name": "finalBalanceIn", + "nodeType": "VariableDeclaration", + "scope": 14518, + "src": "10448:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14489, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10448:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14497, + "initialValue": { + "arguments": [ + { + "id": 14492, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14462, + "src": "10536:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14493, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14465, + "src": "10572:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 14494, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14473, + "src": "10594:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14495, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14467, + "src": "10617:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14491, + "name": "_getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15427, + "src": "10473:49:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256) pure returns (uint256)" + } + }, + "id": 14496, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10473:166:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10448:191:60" + }, + { + "expression": { + "id": 14506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14498, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14465, + "src": "10888:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14500, + "indexExpression": { + "id": 14499, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14469, + "src": "10897:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "10888:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 14501, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14465, + "src": "10914:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14503, + "indexExpression": { + "id": 14502, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14469, + "src": "10923:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10914:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 14504, + "name": "tokenAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14471, + "src": "10940:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10914:40:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10888:66:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14507, + "nodeType": "ExpressionStatement", + "src": "10888:66:60" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "31", + "id": 14515, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11019:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 14510, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14465, + "src": "10991:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14512, + "indexExpression": { + "id": 14511, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14467, + "src": "11000:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10991:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14508, + "name": "finalBalanceIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14490, + "src": "10972:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "10972:18:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10972:42:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14514, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "10972:46:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14516, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10972:49:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14477, + "id": 14517, + "nodeType": "Return", + "src": "10965:56:60" + } + ] + }, + "id": 14519, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calcInGivenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14474, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14462, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8767:30:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14461, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8767:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14465, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8807:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14463, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8807:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14464, + "nodeType": "ArrayTypeName", + "src": "8807:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14467, + "mutability": "mutable", + "name": "tokenIndexIn", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8842:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14466, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8842:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14469, + "mutability": "mutable", + "name": "tokenIndexOut", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8872:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14468, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8872:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14471, + "mutability": "mutable", + "name": "tokenAmountOut", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8903:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14470, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8903:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14473, + "mutability": "mutable", + "name": "invariant", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8935:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14472, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8935:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8757:201:60" + }, + "returnParameters": { + "id": 14477, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14476, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14519, + "src": "8982:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14475, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8982:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8981:9:60" + }, + "scope": 15487, + "src": "8733:2295:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14751, + "nodeType": "Block", + "src": "11304:2383:60", + "statements": [ + { + "assignments": [ + 14539 + ], + "declarations": [ + { + "constant": false, + "id": 14539, + "mutability": "mutable", + "name": "sumBalances", + "nodeType": "VariableDeclaration", + "scope": 14751, + "src": "11524:19:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14538, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11524:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14541, + "initialValue": { + "hexValue": "30", + "id": 14540, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11546:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11524:23:60" + }, + { + "body": { + "id": 14562, + "nodeType": "Block", + "src": "11603:67:60", + "statements": [ + { + "expression": { + "id": 14560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14553, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14539, + "src": "11617:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 14556, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "11647:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14558, + "indexExpression": { + "id": 14557, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14543, + "src": "11656:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11647:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14554, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14539, + "src": "11631:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "11631:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11631:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11617:42:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14561, + "nodeType": "ExpressionStatement", + "src": "11617:42:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14546, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14543, + "src": "11577:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 14547, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "11581:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11581:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11577:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14563, + "initializationExpression": { + "assignments": [ + 14543 + ], + "declarations": [ + { + "constant": false, + "id": 14543, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14563, + "src": "11562:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14542, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11562:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14545, + "initialValue": { + "hexValue": "30", + "id": 14544, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11574:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11562:13:60" + }, + "loopExpression": { + "expression": { + "id": 14551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "11598:3:60", + "subExpression": { + "id": 14550, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14543, + "src": "11598:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14552, + "nodeType": "ExpressionStatement", + "src": "11598:3:60" + }, + "nodeType": "ForStatement", + "src": "11557:113:60" + }, + { + "assignments": [ + 14568 + ], + "declarations": [ + { + "constant": false, + "id": 14568, + "mutability": "mutable", + "name": "balanceRatiosWithFee", + "nodeType": "VariableDeclaration", + "scope": 14751, + "src": "11753:37:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14566, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11753:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14567, + "nodeType": "ArrayTypeName", + "src": "11753:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 14575, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 14572, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14527, + "src": "11807:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11807:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14571, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "11793:13:60", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 14569, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11797:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14570, + "nodeType": "ArrayTypeName", + "src": "11797:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 14574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11793:31:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11753:71:60" + }, + { + "assignments": [ + 14577 + ], + "declarations": [ + { + "constant": false, + "id": 14577, + "mutability": "mutable", + "name": "invariantRatioWithFees", + "nodeType": "VariableDeclaration", + "scope": 14751, + "src": "11895:30:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14576, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11895:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14579, + "initialValue": { + "hexValue": "30", + "id": 14578, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11928:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11895:34:60" + }, + { + "body": { + "id": 14630, + "nodeType": "Block", + "src": "11985:284:60", + "statements": [ + { + "assignments": [ + 14592 + ], + "declarations": [ + { + "constant": false, + "id": 14592, + "mutability": "mutable", + "name": "currentWeight", + "nodeType": "VariableDeclaration", + "scope": 14630, + "src": "11999:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14591, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11999:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14599, + "initialValue": { + "arguments": [ + { + "id": 14597, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14539, + "src": "12043:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14593, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "12023:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14595, + "indexExpression": { + "id": 14594, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "12032:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12023:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "12023:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12023:32:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11999:56:60" + }, + { + "expression": { + "id": 14616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14600, + "name": "balanceRatiosWithFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14568, + "src": "12069:20:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14602, + "indexExpression": { + "id": 14601, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "12090:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "12069:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 14612, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "12133:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14614, + "indexExpression": { + "id": 14613, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "12142:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12133:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 14607, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14527, + "src": "12111:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14609, + "indexExpression": { + "id": 14608, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "12121:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12111:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14603, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "12095:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14605, + "indexExpression": { + "id": 14604, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "12104:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12095:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "12095:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14610, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12095:29:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "12095:37:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12095:50:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12069:76:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14617, + "nodeType": "ExpressionStatement", + "src": "12069:76:60" + }, + { + "expression": { + "id": 14628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14618, + "name": "invariantRatioWithFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14577, + "src": "12159:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 14625, + "name": "currentWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14592, + "src": "12243:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14621, + "name": "balanceRatiosWithFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14568, + "src": "12211:20:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14623, + "indexExpression": { + "id": 14622, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "12232:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12211:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "12211:31:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12211:46:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14619, + "name": "invariantRatioWithFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14577, + "src": "12184:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "12184:26:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12184:74:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12159:99:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14629, + "nodeType": "ExpressionStatement", + "src": "12159:99:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14584, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "11959:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 14585, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "11963:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11963:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11959:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14631, + "initializationExpression": { + "assignments": [ + 14581 + ], + "declarations": [ + { + "constant": false, + "id": 14581, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14631, + "src": "11944:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14580, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11944:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14583, + "initialValue": { + "hexValue": "30", + "id": 14582, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11956:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "11944:13:60" + }, + "loopExpression": { + "expression": { + "id": 14589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "11980:3:60", + "subExpression": { + "id": 14588, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14581, + "src": "11980:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14590, + "nodeType": "ExpressionStatement", + "src": "11980:3:60" + }, + "nodeType": "ForStatement", + "src": "11939:330:60" + }, + { + "assignments": [ + 14636 + ], + "declarations": [ + { + "constant": false, + "id": 14636, + "mutability": "mutable", + "name": "newBalances", + "nodeType": "VariableDeclaration", + "scope": 14751, + "src": "12382:28:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14634, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12382:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14635, + "nodeType": "ArrayTypeName", + "src": "12382:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 14643, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 14640, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "12427:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12427:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14639, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "12413:13:60", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 14637, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12417:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14638, + "nodeType": "ArrayTypeName", + "src": "12417:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 14642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12413:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12382:61:60" + }, + { + "body": { + "id": 14718, + "nodeType": "Block", + "src": "12499:780:60", + "statements": [ + { + "assignments": [ + 14656 + ], + "declarations": [ + { + "constant": false, + "id": 14656, + "mutability": "mutable", + "name": "amountInWithoutFee", + "nodeType": "VariableDeclaration", + "scope": 14718, + "src": "12513:26:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14655, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12513:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14657, + "nodeType": "VariableDeclarationStatement", + "src": "12513:26:60" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 14658, + "name": "balanceRatiosWithFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14568, + "src": "12654:20:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14660, + "indexExpression": { + "id": 14659, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "12675:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12654:23:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 14661, + "name": "invariantRatioWithFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14577, + "src": "12680:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12654:48:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 14705, + "nodeType": "Block", + "src": "13136:66:60", + "statements": [ + { + "expression": { + "id": 14703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14699, + "name": "amountInWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14656, + "src": "13154:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 14700, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14527, + "src": "13175:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14702, + "indexExpression": { + "id": 14701, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "13185:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13175:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13154:33:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14704, + "nodeType": "ExpressionStatement", + "src": "13154:33:60" + } + ] + }, + "id": 14706, + "nodeType": "IfStatement", + "src": "12650:552:60", + "trueBody": { + "id": 14698, + "nodeType": "Block", + "src": "12704:426:60", + "statements": [ + { + "assignments": [ + 14664 + ], + "declarations": [ + { + "constant": false, + "id": 14664, + "mutability": "mutable", + "name": "nonTaxableAmount", + "nodeType": "VariableDeclaration", + "scope": 14698, + "src": "12722:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14663, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12722:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14675, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 14671, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "12796:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 14672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "12796:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14669, + "name": "invariantRatioWithFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14577, + "src": "12769:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "12769:26:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12769:42:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14665, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "12749:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14667, + "indexExpression": { + "id": 14666, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "12758:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12749:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "12749:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12749:63:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12722:90:60" + }, + { + "assignments": [ + 14677 + ], + "declarations": [ + { + "constant": false, + "id": 14677, + "mutability": "mutable", + "name": "taxableAmount", + "nodeType": "VariableDeclaration", + "scope": 14698, + "src": "12830:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14676, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12830:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14684, + "initialValue": { + "arguments": [ + { + "id": 14682, + "name": "nonTaxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14664, + "src": "12871:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14678, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14527, + "src": "12854:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14680, + "indexExpression": { + "id": 14679, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "12864:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12854:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "12854:16:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12854:34:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12830:58:60" + }, + { + "expression": { + "id": 14696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14685, + "name": "amountInWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14656, + "src": "13015:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 14690, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "13079:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 14691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "13079:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 14692, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14533, + "src": "13096:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13079:34:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14688, + "name": "taxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14677, + "src": "13057:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "13057:21:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13057:57:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14686, + "name": "nonTaxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14664, + "src": "13036:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "13036:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13036:79:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13015:100:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14697, + "nodeType": "ExpressionStatement", + "src": "13015:100:60" + } + ] + } + }, + { + "expression": { + "id": 14716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14707, + "name": "newBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14636, + "src": "13216:11:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14709, + "indexExpression": { + "id": 14708, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "13228:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "13216:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 14714, + "name": "amountInWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14656, + "src": "13249:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14710, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "13233:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14712, + "indexExpression": { + "id": 14711, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "13242:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13233:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "13233:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13233:35:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13216:52:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14717, + "nodeType": "ExpressionStatement", + "src": "13216:52:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14648, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "12473:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 14649, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14524, + "src": "12477:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12477:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12473:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14719, + "initializationExpression": { + "assignments": [ + 14645 + ], + "declarations": [ + { + "constant": false, + "id": 14645, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14719, + "src": "12458:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14644, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12458:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14647, + "initialValue": { + "hexValue": "30", + "id": 14646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12470:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "12458:13:60" + }, + "loopExpression": { + "expression": { + "id": 14653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "12494:3:60", + "subExpression": { + "id": 14652, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14645, + "src": "12494:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14654, + "nodeType": "ExpressionStatement", + "src": "12494:3:60" + }, + "nodeType": "ForStatement", + "src": "12453:826:60" + }, + { + "assignments": [ + 14721 + ], + "declarations": [ + { + "constant": false, + "id": 14721, + "mutability": "mutable", + "name": "newInvariant", + "nodeType": "VariableDeclaration", + "scope": 14751, + "src": "13289:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14720, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13289:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14726, + "initialValue": { + "arguments": [ + { + "id": 14723, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14521, + "src": "13332:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14724, + "name": "newBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14636, + "src": "13337:11:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 14722, + "name": "_calculateInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14401, + "src": "13312:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 14725, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13312:37:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13289:60:60" + }, + { + "assignments": [ + 14728 + ], + "declarations": [ + { + "constant": false, + "id": 14728, + "mutability": "mutable", + "name": "invariantRatio", + "nodeType": "VariableDeclaration", + "scope": 14751, + "src": "13359:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14727, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13359:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14733, + "initialValue": { + "arguments": [ + { + "id": 14731, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14531, + "src": "13405:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14729, + "name": "newInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14721, + "src": "13384:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "13384:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13384:38:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13359:63:60" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14734, + "name": "invariantRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14728, + "src": "13522:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 14735, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "13539:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 14736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "13539:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13522:31:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 14749, + "nodeType": "Block", + "src": "13648:33:60", + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 14747, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13669:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 14537, + "id": 14748, + "nodeType": "Return", + "src": "13662:8:60" + } + ] + }, + "id": 14750, + "nodeType": "IfStatement", + "src": "13518:163:60", + "trueBody": { + "id": 14746, + "nodeType": "Block", + "src": "13555:87:60", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14740, + "name": "invariantRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14728, + "src": "13599:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "expression": { + "id": 14741, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "13616:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 14742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "13616:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13599:31:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14738, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14529, + "src": "13576:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "13576:22:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14744, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13576:55:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14537, + "id": 14745, + "nodeType": "Return", + "src": "13569:62:60" + } + ] + } + } + ] + }, + "id": 14752, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calcBptOutGivenExactTokensIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14534, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14521, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11082:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14520, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11082:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14524, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11103:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11103:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14523, + "nodeType": "ArrayTypeName", + "src": "11103:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14527, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11138:26:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14525, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11138:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14526, + "nodeType": "ArrayTypeName", + "src": "11138:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14529, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11174:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14528, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11174:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14531, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11206:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14530, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11206:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14533, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11240:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14532, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11240:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11072:199:60" + }, + "returnParameters": { + "id": 14537, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14536, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14752, + "src": "11295:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14535, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11295:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11294:9:60" + }, + "scope": 15487, + "src": "11034:2653:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 14869, + "nodeType": "Block", + "src": "13984:1404:60", + "statements": [ + { + "assignments": [ + 14773 + ], + "declarations": [ + { + "constant": false, + "id": 14773, + "mutability": "mutable", + "name": "newInvariant", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "14040:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14772, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14040:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14784, + "initialValue": { + "arguments": [ + { + "id": 14782, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14765, + "src": "14124:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 14779, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14763, + "src": "14102:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 14776, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14761, + "src": "14082:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14774, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14763, + "src": "14063:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "14063:18:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14063:32:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "14063:38:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14063:54:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "14063:60:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14063:78:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14040:101:60" + }, + { + "assignments": [ + 14786 + ], + "declarations": [ + { + "constant": false, + "id": 14786, + "mutability": "mutable", + "name": "newBalanceTokenIndex", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "14196:28:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14785, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14196:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14793, + "initialValue": { + "arguments": [ + { + "id": 14788, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14754, + "src": "14290:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14789, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14757, + "src": "14307:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 14790, + "name": "newInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14773, + "src": "14329:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 14791, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14759, + "src": "14355:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14787, + "name": "_getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15427, + "src": "14227:49:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256) pure returns (uint256)" + } + }, + "id": 14792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14227:148:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14196:179:60" + }, + { + "assignments": [ + 14795 + ], + "declarations": [ + { + "constant": false, + "id": 14795, + "mutability": "mutable", + "name": "amountInWithoutFee", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "14385:26:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14794, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14385:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14802, + "initialValue": { + "arguments": [ + { + "baseExpression": { + "id": 14798, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14757, + "src": "14439:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14800, + "indexExpression": { + "id": 14799, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14759, + "src": "14448:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14439:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14796, + "name": "newBalanceTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14786, + "src": "14414:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "14414:24:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14414:46:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14385:75:60" + }, + { + "assignments": [ + 14804 + ], + "declarations": [ + { + "constant": false, + "id": 14804, + "mutability": "mutable", + "name": "sumBalances", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "14605:19:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14605:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14806, + "initialValue": { + "hexValue": "30", + "id": 14805, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14627:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "14605:23:60" + }, + { + "body": { + "id": 14827, + "nodeType": "Block", + "src": "14684:67:60", + "statements": [ + { + "expression": { + "id": 14825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14818, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14804, + "src": "14698:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 14821, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14757, + "src": "14728:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14823, + "indexExpression": { + "id": 14822, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14808, + "src": "14737:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14728:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14819, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14804, + "src": "14712:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "14712:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14712:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14698:42:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14826, + "nodeType": "ExpressionStatement", + "src": "14698:42:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14814, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14811, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14808, + "src": "14658:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 14812, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14757, + "src": "14662:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "14662:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14658:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14828, + "initializationExpression": { + "assignments": [ + 14808 + ], + "declarations": [ + { + "constant": false, + "id": 14808, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14828, + "src": "14643:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14643:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14810, + "initialValue": { + "hexValue": "30", + "id": 14809, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14655:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "14643:13:60" + }, + "loopExpression": { + "expression": { + "id": 14816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "14679:3:60", + "subExpression": { + "id": 14815, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14808, + "src": "14679:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14817, + "nodeType": "ExpressionStatement", + "src": "14679:3:60" + }, + "nodeType": "ForStatement", + "src": "14638:113:60" + }, + { + "assignments": [ + 14830 + ], + "declarations": [ + { + "constant": false, + "id": 14830, + "mutability": "mutable", + "name": "currentWeight", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "14905:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14829, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14905:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14837, + "initialValue": { + "arguments": [ + { + "id": 14835, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14804, + "src": "14958:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14831, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14757, + "src": "14929:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14833, + "indexExpression": { + "id": 14832, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14759, + "src": "14938:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14929:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "14929:28:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14836, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14929:41:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14905:65:60" + }, + { + "assignments": [ + 14839 + ], + "declarations": [ + { + "constant": false, + "id": 14839, + "mutability": "mutable", + "name": "taxablePercentage", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "14980:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14838, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14980:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14843, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 14840, + "name": "currentWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14830, + "src": "15008:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "complement", + "nodeType": "MemberAccess", + "referencedDeclaration": 7231, + "src": "15008:24:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 14842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15008:26:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14980:54:60" + }, + { + "assignments": [ + 14845 + ], + "declarations": [ + { + "constant": false, + "id": 14845, + "mutability": "mutable", + "name": "taxableAmount", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "15044:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14844, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15044:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14850, + "initialValue": { + "arguments": [ + { + "id": 14848, + "name": "taxablePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14839, + "src": "15093:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14846, + "name": "amountInWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14795, + "src": "15068:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "15068:24:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15068:43:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15044:67:60" + }, + { + "assignments": [ + 14852 + ], + "declarations": [ + { + "constant": false, + "id": 14852, + "mutability": "mutable", + "name": "nonTaxableAmount", + "nodeType": "VariableDeclaration", + "scope": 14869, + "src": "15121:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15121:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14857, + "initialValue": { + "arguments": [ + { + "id": 14855, + "name": "taxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14845, + "src": "15171:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14853, + "name": "amountInWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14795, + "src": "15148:18:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "15148:22:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14856, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15148:37:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15121:64:60" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 14862, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "15345:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 14863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "15345:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 14864, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14767, + "src": "15362:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "15345:34:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14860, + "name": "taxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14845, + "src": "15325:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "15325:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14866, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15325:55:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14858, + "name": "nonTaxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14852, + "src": "15304:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "15304:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14867, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15304:77:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14771, + "id": 14868, + "nodeType": "Return", + "src": "15297:84:60" + } + ] + }, + "id": 14870, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calcTokenInGivenExactBptOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14768, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14754, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13740:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13740:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14757, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13761:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14755, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13761:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14756, + "nodeType": "ArrayTypeName", + "src": "13761:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14759, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13796:18:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14758, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13796:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14761, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13824:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14760, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13824:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14763, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13854:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14762, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13854:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14765, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13886:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14764, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13886:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14767, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13920:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14766, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13920:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13730:221:60" + }, + "returnParameters": { + "id": 14771, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14770, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 14870, + "src": "13975:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14769, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13975:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13974:9:60" + }, + "scope": 15487, + "src": "13693:1695:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 15090, + "nodeType": "Block", + "src": "15837:2256:60", + "statements": [ + { + "assignments": [ + 14890 + ], + "declarations": [ + { + "constant": false, + "id": 14890, + "mutability": "mutable", + "name": "sumBalances", + "nodeType": "VariableDeclaration", + "scope": 15090, + "src": "16053:19:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14889, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16053:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14892, + "initialValue": { + "hexValue": "30", + "id": 14891, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16075:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "16053:23:60" + }, + { + "body": { + "id": 14913, + "nodeType": "Block", + "src": "16132:67:60", + "statements": [ + { + "expression": { + "id": 14911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14904, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14890, + "src": "16146:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 14907, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16176:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14909, + "indexExpression": { + "id": 14908, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14894, + "src": "16185:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16176:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14905, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14890, + "src": "16160:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14906, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "16160:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16160:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16146:42:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14912, + "nodeType": "ExpressionStatement", + "src": "16146:42:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14900, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14897, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14894, + "src": "16106:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 14898, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16110:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "16110:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16106:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14914, + "initializationExpression": { + "assignments": [ + 14894 + ], + "declarations": [ + { + "constant": false, + "id": 14894, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14914, + "src": "16091:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14893, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16091:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14896, + "initialValue": { + "hexValue": "30", + "id": 14895, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16103:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "16091:13:60" + }, + "loopExpression": { + "expression": { + "id": 14902, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "16127:3:60", + "subExpression": { + "id": 14901, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14894, + "src": "16127:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14903, + "nodeType": "ExpressionStatement", + "src": "16127:3:60" + }, + "nodeType": "ForStatement", + "src": "16086:113:60" + }, + { + "assignments": [ + 14919 + ], + "declarations": [ + { + "constant": false, + "id": 14919, + "mutability": "mutable", + "name": "balanceRatiosWithoutFee", + "nodeType": "VariableDeclaration", + "scope": 15090, + "src": "16282:40:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14917, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16282:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14918, + "nodeType": "ArrayTypeName", + "src": "16282:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 14926, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 14923, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14878, + "src": "16339:10:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "16339:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "16325:13:60", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 14920, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16329:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14921, + "nodeType": "ArrayTypeName", + "src": "16329:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 14925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16325:32:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16282:75:60" + }, + { + "assignments": [ + 14928 + ], + "declarations": [ + { + "constant": false, + "id": 14928, + "mutability": "mutable", + "name": "invariantRatioWithoutFees", + "nodeType": "VariableDeclaration", + "scope": 15090, + "src": "16367:33:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14927, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16367:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14930, + "initialValue": { + "hexValue": "30", + "id": 14929, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16403:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "16367:37:60" + }, + { + "body": { + "id": 14981, + "nodeType": "Block", + "src": "16460:291:60", + "statements": [ + { + "assignments": [ + 14943 + ], + "declarations": [ + { + "constant": false, + "id": 14943, + "mutability": "mutable", + "name": "currentWeight", + "nodeType": "VariableDeclaration", + "scope": 14981, + "src": "16474:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14942, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16474:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14950, + "initialValue": { + "arguments": [ + { + "id": 14948, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14890, + "src": "16516:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14944, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16498:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14946, + "indexExpression": { + "id": 14945, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16507:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16498:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "16498:17:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16498:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16474:54:60" + }, + { + "expression": { + "id": 14967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 14951, + "name": "balanceRatiosWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14919, + "src": "16542:23:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14953, + "indexExpression": { + "id": 14952, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16566:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "16542:26:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 14963, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16608:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14965, + "indexExpression": { + "id": 14964, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16617:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16608:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 14958, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14878, + "src": "16587:10:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14960, + "indexExpression": { + "id": 14959, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16598:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16587:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14954, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16571:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14956, + "indexExpression": { + "id": 14955, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16580:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16571:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "16571:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16571:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "16571:36:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16571:49:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16542:78:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14968, + "nodeType": "ExpressionStatement", + "src": "16542:78:60" + }, + { + "expression": { + "id": 14979, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 14969, + "name": "invariantRatioWithoutFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14928, + "src": "16634:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 14976, + "name": "currentWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14943, + "src": "16725:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 14972, + "name": "balanceRatiosWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14919, + "src": "16692:23:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14974, + "indexExpression": { + "id": 14973, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16716:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "16692:26:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14975, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "16692:32:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16692:47:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 14970, + "name": "invariantRatioWithoutFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14928, + "src": "16662:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "16662:29:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 14978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16662:78:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16634:106:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14980, + "nodeType": "ExpressionStatement", + "src": "16634:106:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 14938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14935, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16434:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 14936, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16438:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "16438:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16434:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 14982, + "initializationExpression": { + "assignments": [ + 14932 + ], + "declarations": [ + { + "constant": false, + "id": 14932, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 14982, + "src": "16419:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14931, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16419:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14934, + "initialValue": { + "hexValue": "30", + "id": 14933, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16431:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "16419:13:60" + }, + "loopExpression": { + "expression": { + "id": 14940, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "16455:3:60", + "subExpression": { + "id": 14939, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14932, + "src": "16455:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14941, + "nodeType": "ExpressionStatement", + "src": "16455:3:60" + }, + "nodeType": "ForStatement", + "src": "16414:337:60" + }, + { + "assignments": [ + 14987 + ], + "declarations": [ + { + "constant": false, + "id": 14987, + "mutability": "mutable", + "name": "newBalances", + "nodeType": "VariableDeclaration", + "scope": 15090, + "src": "16864:28:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16864:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14986, + "nodeType": "ArrayTypeName", + "src": "16864:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 14994, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 14991, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16909:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 14992, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "16909:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 14990, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "16895:13:60", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 14988, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16899:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14989, + "nodeType": "ArrayTypeName", + "src": "16899:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 14993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16895:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16864:61:60" + }, + { + "body": { + "id": 15067, + "nodeType": "Block", + "src": "16981:865:60", + "statements": [ + { + "assignments": [ + 15007 + ], + "declarations": [ + { + "constant": false, + "id": 15007, + "mutability": "mutable", + "name": "amountOutWithFee", + "nodeType": "VariableDeclaration", + "scope": 15067, + "src": "17183:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15006, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17183:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15008, + "nodeType": "VariableDeclarationStatement", + "src": "17183:24:60" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15009, + "name": "invariantRatioWithoutFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14928, + "src": "17225:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "baseExpression": { + "id": 15010, + "name": "balanceRatiosWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14919, + "src": "17253:23:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15012, + "indexExpression": { + "id": 15011, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "17277:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17253:26:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17225:54:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 15054, + "nodeType": "Block", + "src": "17706:65:60", + "statements": [ + { + "expression": { + "id": 15052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15048, + "name": "amountOutWithFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15007, + "src": "17724:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 15049, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14878, + "src": "17743:10:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15051, + "indexExpression": { + "id": 15050, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "17754:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17743:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17724:32:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15053, + "nodeType": "ExpressionStatement", + "src": "17724:32:60" + } + ] + }, + "id": 15055, + "nodeType": "IfStatement", + "src": "17221:550:60", + "trueBody": { + "id": 15047, + "nodeType": "Block", + "src": "17281:419:60", + "statements": [ + { + "assignments": [ + 15015 + ], + "declarations": [ + { + "constant": false, + "id": 15015, + "mutability": "mutable", + "name": "nonTaxableAmount", + "nodeType": "VariableDeclaration", + "scope": 15047, + "src": "17299:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15014, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17299:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15024, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 15020, + "name": "invariantRatioWithoutFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14928, + "src": "17346:25:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "complement", + "nodeType": "MemberAccess", + "referencedDeclaration": 7231, + "src": "17346:36:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 15022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17346:38:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 15016, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "17326:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15018, + "indexExpression": { + "id": 15017, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "17335:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17326:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "17326:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17326:59:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17299:86:60" + }, + { + "assignments": [ + 15026 + ], + "declarations": [ + { + "constant": false, + "id": 15026, + "mutability": "mutable", + "name": "taxableAmount", + "nodeType": "VariableDeclaration", + "scope": 15047, + "src": "17403:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15025, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17403:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15033, + "initialValue": { + "arguments": [ + { + "id": 15031, + "name": "nonTaxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15015, + "src": "17445:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 15027, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14878, + "src": "17427:10:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15029, + "indexExpression": { + "id": 15028, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "17438:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17427:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "17427:17:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17427:35:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17403:59:60" + }, + { + "expression": { + "id": 15045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15034, + "name": "amountOutWithFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15007, + "src": "17589:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 15039, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "17649:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 15040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "17649:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15041, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14884, + "src": "17666:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17649:34:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15037, + "name": "taxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15026, + "src": "17629:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15038, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "17629:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17629:55:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15035, + "name": "nonTaxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15015, + "src": "17608:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "17608:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17608:77:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17589:96:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15046, + "nodeType": "ExpressionStatement", + "src": "17589:96:60" + } + ] + } + }, + { + "expression": { + "id": 15065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 15056, + "name": "newBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14987, + "src": "17785:11:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15058, + "indexExpression": { + "id": 15057, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "17797:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "17785:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 15063, + "name": "amountOutWithFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15007, + "src": "17818:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 15059, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "17802:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15061, + "indexExpression": { + "id": 15060, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "17811:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "17802:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "17802:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17802:33:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "17785:50:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15066, + "nodeType": "ExpressionStatement", + "src": "17785:50:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 14999, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "16955:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 15000, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14875, + "src": "16959:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "16959:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "16955:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15068, + "initializationExpression": { + "assignments": [ + 14996 + ], + "declarations": [ + { + "constant": false, + "id": 14996, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 15068, + "src": "16940:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14995, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "16940:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 14998, + "initialValue": { + "hexValue": "30", + "id": 14997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16952:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "16940:13:60" + }, + "loopExpression": { + "expression": { + "id": 15004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "16976:3:60", + "subExpression": { + "id": 15003, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14996, + "src": "16976:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15005, + "nodeType": "ExpressionStatement", + "src": "16976:3:60" + }, + "nodeType": "ForStatement", + "src": "16935:911:60" + }, + { + "assignments": [ + 15070 + ], + "declarations": [ + { + "constant": false, + "id": 15070, + "mutability": "mutable", + "name": "newInvariant", + "nodeType": "VariableDeclaration", + "scope": 15090, + "src": "17856:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15069, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17856:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15075, + "initialValue": { + "arguments": [ + { + "id": 15072, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14872, + "src": "17899:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15073, + "name": "newBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14987, + "src": "17904:11:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 15071, + "name": "_calculateInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14401, + "src": "17879:19:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 15074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17879:37:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17856:60:60" + }, + { + "assignments": [ + 15077 + ], + "declarations": [ + { + "constant": false, + "id": 15077, + "mutability": "mutable", + "name": "invariantRatio", + "nodeType": "VariableDeclaration", + "scope": 15090, + "src": "17926:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15076, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "17926:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15082, + "initialValue": { + "arguments": [ + { + "id": 15080, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14882, + "src": "17972:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15078, + "name": "newInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15070, + "src": "17951:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "17951:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17951:38:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17926:63:60" + }, + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 15085, + "name": "invariantRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15077, + "src": "18058:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "complement", + "nodeType": "MemberAccess", + "referencedDeclaration": 7231, + "src": "18058:25:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 15087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18058:27:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15083, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14880, + "src": "18037:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "18037:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18037:49:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 14888, + "id": 15089, + "nodeType": "Return", + "src": "18030:56:60" + } + ] + }, + "id": 15091, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calcBptInGivenExactTokensOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 14885, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14872, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15614:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14871, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15614:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14875, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15635:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14873, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15635:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14874, + "nodeType": "ArrayTypeName", + "src": "15635:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14878, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15670:27:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 14876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15670:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 14877, + "nodeType": "ArrayTypeName", + "src": "15670:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14880, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15707:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14879, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15707:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14882, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15739:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14881, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15739:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 14884, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15773:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14883, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15773:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15604:200:60" + }, + "returnParameters": { + "id": 14888, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 14887, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 15091, + "src": "15828:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 14886, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "15828:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "15827:9:60" + }, + "scope": 15487, + "src": "15566:2527:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 15208, + "nodeType": "Block", + "src": "18389:1613:60", + "statements": [ + { + "assignments": [ + 15112 + ], + "declarations": [ + { + "constant": false, + "id": 15112, + "mutability": "mutable", + "name": "newInvariant", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "18448:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15111, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18448:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15123, + "initialValue": { + "arguments": [ + { + "id": 15121, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15104, + "src": "18531:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 15118, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15102, + "src": "18509:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 15115, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15100, + "src": "18490:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15113, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15102, + "src": "18471:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "18471:18:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18471:31:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "18471:37:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18471:53:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "18471:59:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15122, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18471:77:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18448:100:60" + }, + { + "assignments": [ + 15125 + ], + "declarations": [ + { + "constant": false, + "id": 15125, + "mutability": "mutable", + "name": "newBalanceTokenIndex", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "18603:28:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15124, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18603:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15132, + "initialValue": { + "arguments": [ + { + "id": 15127, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15093, + "src": "18697:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15128, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15096, + "src": "18714:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 15129, + "name": "newInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15112, + "src": "18736:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15130, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15098, + "src": "18762:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15126, + "name": "_getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15427, + "src": "18634:49:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256) pure returns (uint256)" + } + }, + "id": 15131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18634:148:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18603:179:60" + }, + { + "assignments": [ + 15134 + ], + "declarations": [ + { + "constant": false, + "id": 15134, + "mutability": "mutable", + "name": "amountOutWithoutFee", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "18792:27:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15133, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18792:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15141, + "initialValue": { + "arguments": [ + { + "id": 15139, + "name": "newBalanceTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15125, + "src": "18847:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 15135, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15096, + "src": "18822:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15137, + "indexExpression": { + "id": 15136, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15098, + "src": "18831:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "18822:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15138, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "18822:24:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18822:46:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18792:76:60" + }, + { + "assignments": [ + 15143 + ], + "declarations": [ + { + "constant": false, + "id": 15143, + "mutability": "mutable", + "name": "sumBalances", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "19013:19:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15142, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19013:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15145, + "initialValue": { + "hexValue": "30", + "id": 15144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19035:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "19013:23:60" + }, + { + "body": { + "id": 15166, + "nodeType": "Block", + "src": "19092:67:60", + "statements": [ + { + "expression": { + "id": 15164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15157, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15143, + "src": "19106:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 15160, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15096, + "src": "19136:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15162, + "indexExpression": { + "id": 15161, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15147, + "src": "19145:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "19136:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15158, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15143, + "src": "19120:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "19120:15:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19120:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19106:42:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15165, + "nodeType": "ExpressionStatement", + "src": "19106:42:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15150, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15147, + "src": "19066:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 15151, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15096, + "src": "19070:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15152, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "19070:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19066:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15167, + "initializationExpression": { + "assignments": [ + 15147 + ], + "declarations": [ + { + "constant": false, + "id": 15147, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 15167, + "src": "19051:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15146, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19051:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15149, + "initialValue": { + "hexValue": "30", + "id": 15148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19063:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "19051:13:60" + }, + "loopExpression": { + "expression": { + "id": 15155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "19087:3:60", + "subExpression": { + "id": 15154, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15147, + "src": "19087:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15156, + "nodeType": "ExpressionStatement", + "src": "19087:3:60" + }, + "nodeType": "ForStatement", + "src": "19046:113:60" + }, + { + "assignments": [ + 15169 + ], + "declarations": [ + { + "constant": false, + "id": 15169, + "mutability": "mutable", + "name": "currentWeight", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "19314:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15168, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19314:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15176, + "initialValue": { + "arguments": [ + { + "id": 15174, + "name": "sumBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15143, + "src": "19367:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 15170, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15096, + "src": "19338:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15172, + "indexExpression": { + "id": 15171, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15098, + "src": "19347:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "19338:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 7013, + "src": "19338:28:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19338:41:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19314:65:60" + }, + { + "assignments": [ + 15178 + ], + "declarations": [ + { + "constant": false, + "id": 15178, + "mutability": "mutable", + "name": "taxablePercentage", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "19389:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15177, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19389:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15182, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 15179, + "name": "currentWeight", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15169, + "src": "19417:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "complement", + "nodeType": "MemberAccess", + "referencedDeclaration": 7231, + "src": "19417:24:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint256)" + } + }, + "id": 15181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19417:26:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19389:54:60" + }, + { + "assignments": [ + 15184 + ], + "declarations": [ + { + "constant": false, + "id": 15184, + "mutability": "mutable", + "name": "taxableAmount", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "19654:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19654:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15189, + "initialValue": { + "arguments": [ + { + "id": 15187, + "name": "taxablePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15178, + "src": "19704:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15185, + "name": "amountOutWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15134, + "src": "19678:19:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "19678:25:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19678:44:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19654:68:60" + }, + { + "assignments": [ + 15191 + ], + "declarations": [ + { + "constant": false, + "id": 15191, + "mutability": "mutable", + "name": "nonTaxableAmount", + "nodeType": "VariableDeclaration", + "scope": 15208, + "src": "19732:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15190, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19732:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15196, + "initialValue": { + "arguments": [ + { + "id": 15194, + "name": "taxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15184, + "src": "19783:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15192, + "name": "amountOutWithoutFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15134, + "src": "19759:19:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "19759:23:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15195, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19759:38:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19732:65:60" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 15201, + "name": "FixedPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7232, + "src": "19959:10:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_FixedPoint_$7232_$", + "typeString": "type(library FixedPoint)" + } + }, + "id": 15202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ONE", + "nodeType": "MemberAccess", + "referencedDeclaration": 6817, + "src": "19959:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15203, + "name": "swapFeePercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15106, + "src": "19976:17:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "19959:34:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15199, + "name": "taxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15184, + "src": "19937:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 6919, + "src": "19937:21:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19937:57:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15197, + "name": "nonTaxableAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15191, + "src": "19916:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "19916:20:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19916:79:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 15110, + "id": 15207, + "nodeType": "Return", + "src": "19909:86:60" + } + ] + }, + "id": 15209, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_calcTokenOutGivenExactBptIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15107, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15093, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18146:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15092, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18146:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15096, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18167:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 15094, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18167:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15095, + "nodeType": "ArrayTypeName", + "src": "18167:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15098, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18202:18:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15097, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18202:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15100, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18230:19:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15099, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18230:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15102, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18259:22:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15101, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18259:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15104, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18291:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15103, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18291:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15106, + "mutability": "mutable", + "name": "swapFeePercentage", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18325:25:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15105, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18325:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18136:220:60" + }, + "returnParameters": { + "id": 15110, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15109, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 15209, + "src": "18380:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15108, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18380:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18379:9:60" + }, + "scope": 15487, + "src": "18099:1903:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 15426, + "nodeType": "Block", + "src": "20363:1856:60", + "statements": [ + { + "assignments": [ + 15224 + ], + "declarations": [ + { + "constant": false, + "id": 15224, + "mutability": "mutable", + "name": "ampTimesTotal", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "20410:21:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20410:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15229, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15225, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15211, + "src": "20434:22:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "expression": { + "id": 15226, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20459:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "20459:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20434:40:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20410:64:60" + }, + { + "assignments": [ + 15231 + ], + "declarations": [ + { + "constant": false, + "id": 15231, + "mutability": "mutable", + "name": "sum", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "20484:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15230, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20484:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15235, + "initialValue": { + "baseExpression": { + "id": 15232, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20498:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15234, + "indexExpression": { + "hexValue": "30", + "id": 15233, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20507:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20498:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20484:25:60" + }, + { + "assignments": [ + 15237 + ], + "declarations": [ + { + "constant": false, + "id": 15237, + "mutability": "mutable", + "name": "P_D", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "20519:11:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15236, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20519:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15244, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 15238, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20533:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15240, + "indexExpression": { + "hexValue": "30", + "id": 15239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20542:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20533:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "expression": { + "id": 15241, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20547:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "20547:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20533:29:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20519:43:60" + }, + { + "body": { + "id": 15284, + "nodeType": "Block", + "src": "20618:149:60", + "statements": [ + { + "expression": { + "id": 15273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15256, + "name": "P_D", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15237, + "src": "20632:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 15263, + "name": "P_D", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15237, + "src": "20669:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 15264, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20674:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15266, + "indexExpression": { + "id": 15265, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15246, + "src": "20683:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20674:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15261, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "20660:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "20660:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20660:26:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15268, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20688:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "20688:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15259, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "20651:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "20651:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20651:53:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15271, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15216, + "src": "20706:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15257, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "20638:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "20638:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20638:78:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20632:84:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15274, + "nodeType": "ExpressionStatement", + "src": "20632:84:60" + }, + { + "expression": { + "id": 15282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15275, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15231, + "src": "20730:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 15278, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20744:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15280, + "indexExpression": { + "id": 15279, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15246, + "src": "20753:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20744:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15276, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15231, + "src": "20736:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "20736:7:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20736:20:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20730:26:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15283, + "nodeType": "ExpressionStatement", + "src": "20730:26:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15249, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15246, + "src": "20592:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 15250, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20596:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "20596:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20592:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15285, + "initializationExpression": { + "assignments": [ + 15246 + ], + "declarations": [ + { + "constant": false, + "id": 15246, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 15285, + "src": "20577:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15245, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20577:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15248, + "initialValue": { + "hexValue": "31", + "id": 15247, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20589:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "nodeType": "VariableDeclarationStatement", + "src": "20577:13:60" + }, + "loopExpression": { + "expression": { + "id": 15254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "20613:3:60", + "subExpression": { + "id": 15253, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15246, + "src": "20613:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15255, + "nodeType": "ExpressionStatement", + "src": "20613:3:60" + }, + "nodeType": "ForStatement", + "src": "20572:195:60" + }, + { + "expression": { + "id": 15292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15286, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15231, + "src": "20894:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15287, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15231, + "src": "20900:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "baseExpression": { + "id": 15288, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "20906:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15290, + "indexExpression": { + "id": 15289, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15218, + "src": "20915:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "20906:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20900:26:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "20894:32:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15293, + "nodeType": "ExpressionStatement", + "src": "20894:32:60" + }, + { + "assignments": [ + 15295 + ], + "declarations": [ + { + "constant": false, + "id": 15295, + "mutability": "mutable", + "name": "inv2", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "20937:12:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15294, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20937:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15301, + "initialValue": { + "arguments": [ + { + "id": 15298, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15216, + "src": "20961:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15299, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15216, + "src": "20972:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15296, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "20952:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "20952:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20952:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20937:45:60" + }, + { + "assignments": [ + 15303 + ], + "declarations": [ + { + "constant": false, + "id": 15303, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "21050:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21050:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15323, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 15310, + "name": "inv2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15295, + "src": "21104:4:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 15313, + "name": "ampTimesTotal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15224, + "src": "21119:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15314, + "name": "P_D", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15237, + "src": "21134:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15311, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21110:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "21110:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21110:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15308, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21093:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 8841, + "src": "21093:10:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21093:46:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15317, + "name": "_AMP_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14209, + "src": "21141:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15306, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21084:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "21084:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21084:72:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 15319, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15214, + "src": "21170:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15321, + "indexExpression": { + "id": 15320, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15218, + "src": "21179:10:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "21170:20:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15304, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21062:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "21062:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21062:138:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21050:150:60" + }, + { + "assignments": [ + 15325 + ], + "declarations": [ + { + "constant": false, + "id": 15325, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "21210:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15324, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21210:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15338, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 15332, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15216, + "src": "21252:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15333, + "name": "ampTimesTotal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15224, + "src": "21263:13:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15330, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21239:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 8806, + "src": "21239:12:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21239:38:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15335, + "name": "_AMP_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14209, + "src": "21279:14:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15328, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21230:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "21230:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21230:64:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15326, + "name": "sum", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15231, + "src": "21222:3:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "21222:7:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21222:73:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21210:85:60" + }, + { + "assignments": [ + 15340 + ], + "declarations": [ + { + "constant": false, + "id": 15340, + "mutability": "mutable", + "name": "prevTokenBalance", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "21348:24:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15339, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21348:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15342, + "initialValue": { + "hexValue": "30", + "id": 15341, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21375:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "21348:28:60" + }, + { + "assignments": [ + 15344 + ], + "declarations": [ + { + "constant": false, + "id": 15344, + "mutability": "mutable", + "name": "tokenBalance", + "nodeType": "VariableDeclaration", + "scope": 15426, + "src": "21523:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15343, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21523:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15356, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 15349, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15303, + "src": "21566:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15347, + "name": "inv2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15295, + "src": "21557:4:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "21557:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21557:11:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 15353, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15325, + "src": "21584:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15351, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15216, + "src": "21570:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "21570:13:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21570:16:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15345, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21546:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 8841, + "src": "21546:10:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21546:41:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21523:64:60" + }, + { + "body": { + "id": 15419, + "nodeType": "Block", + "src": "21632:521:60", + "statements": [ + { + "expression": { + "id": 15369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15367, + "name": "prevTokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15340, + "src": "21646:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 15368, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21665:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21646:31:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15370, + "nodeType": "ExpressionStatement", + "src": "21646:31:60" + }, + { + "expression": { + "id": 15394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15371, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21692:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "id": 15380, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15303, + "src": "21776:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 15376, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21744:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15377, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21758:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15374, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21735:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "21735:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21735:36:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "21735:40:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21735:43:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 15391, + "name": "invariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15216, + "src": "21833:9:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 15388, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15325, + "src": "21826:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 15384, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21805:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "32", + "id": 15385, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21819:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + } + ], + "expression": { + "id": 15382, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21796:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "21796:8:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21796:25:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 6859, + "src": "21796:29:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21796:32:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 6885, + "src": "21796:36:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21796:47:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15372, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "21707:4:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 8841, + "src": "21707:10:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21707:150:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21692:165:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15395, + "nodeType": "ExpressionStatement", + "src": "21692:165:60" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15398, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15396, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21876:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 15397, + "name": "prevTokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15340, + "src": "21891:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21876:31:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15409, + "name": "prevTokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15340, + "src": "22053:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15410, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "22072:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "22053:31:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "hexValue": "31", + "id": 15412, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22088:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "22053:36:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15417, + "nodeType": "IfStatement", + "src": "22049:94:60", + "trueBody": { + "id": 15416, + "nodeType": "Block", + "src": "22091:52:60", + "statements": [ + { + "expression": { + "id": 15414, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "22116:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 15222, + "id": 15415, + "nodeType": "Return", + "src": "22109:19:60" + } + ] + } + }, + "id": 15418, + "nodeType": "IfStatement", + "src": "21872:271:60", + "trueBody": { + "id": 15408, + "nodeType": "Block", + "src": "21909:134:60", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15399, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21931:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15400, + "name": "prevTokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15340, + "src": "21946:16:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "21931:31:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "hexValue": "31", + "id": 15402, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21966:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "21931:36:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15407, + "nodeType": "IfStatement", + "src": "21927:102:60", + "trueBody": { + "id": 15406, + "nodeType": "Block", + "src": "21969:60:60", + "statements": [ + { + "expression": { + "id": 15404, + "name": "tokenBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15344, + "src": "21998:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 15222, + "id": 15405, + "nodeType": "Return", + "src": "21991:19:60" + } + ] + } + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15363, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15361, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15358, + "src": "21618:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "323535", + "id": 15362, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21622:3:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "21618:7:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15420, + "initializationExpression": { + "assignments": [ + 15358 + ], + "declarations": [ + { + "constant": false, + "id": 15358, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 15420, + "src": "21603:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15357, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21603:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15360, + "initialValue": { + "hexValue": "30", + "id": 15359, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21615:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "21603:13:60" + }, + "loopExpression": { + "expression": { + "id": 15365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "21627:3:60", + "subExpression": { + "id": 15364, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15358, + "src": "21627:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15366, + "nodeType": "ExpressionStatement", + "src": "21627:3:60" + }, + "nodeType": "ForStatement", + "src": "21598:555:60" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 15422, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "22171:6:60", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15423, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "STABLE_GET_BALANCE_DIDNT_CONVERGE", + "nodeType": "MemberAccess", + "referencedDeclaration": 680, + "src": "22171:40:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15421, + "name": "_revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 510, + 530 + ], + "referencedDeclaration": 510, + "src": "22163:7:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 15424, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22163:49:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15425, + "nodeType": "ExpressionStatement", + "src": "22163:49:60" + } + ] + }, + "id": 15427, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15219, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15211, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 15427, + "src": "20204:30:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15210, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20204:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15214, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 15427, + "src": "20244:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 15212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20244:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15213, + "nodeType": "ArrayTypeName", + "src": "20244:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15216, + "mutability": "mutable", + "name": "invariant", + "nodeType": "VariableDeclaration", + "scope": 15427, + "src": "20279:17:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15215, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20279:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15218, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 15427, + "src": "20306:18:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15217, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20306:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "20194:136:60" + }, + "returnParameters": { + "id": 15222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15221, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 15427, + "src": "20354:7:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "20354:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "20353:9:60" + }, + "scope": 15487, + "src": "20136:2083:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 15485, + "nodeType": "Block", + "src": "22402:1082:60", + "statements": [ + { + "assignments": [ + 15441 + ], + "declarations": [ + { + "constant": false, + "id": 15441, + "mutability": "mutable", + "name": "bptRatio", + "nodeType": "VariableDeclaration", + "scope": 15485, + "src": "23211:16:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15440, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23211:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15446, + "initialValue": { + "arguments": [ + { + "id": 15444, + "name": "totalBPT", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15434, + "src": "23249:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15442, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15432, + "src": "23230:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 7065, + "src": "23230:18:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23230:28:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23211:47:60" + }, + { + "assignments": [ + 15451 + ], + "declarations": [ + { + "constant": false, + "id": 15451, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 15485, + "src": "23269:26:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 15449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23269:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15450, + "nodeType": "ArrayTypeName", + "src": "23269:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 15458, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 15455, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15430, + "src": "23312:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "23312:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15454, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "23298:13:60", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 15452, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23302:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15453, + "nodeType": "ArrayTypeName", + "src": "23302:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 15457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23298:30:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23269:59:60" + }, + { + "body": { + "id": 15481, + "nodeType": "Block", + "src": "23384:67:60", + "statements": [ + { + "expression": { + "id": 15479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 15470, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15451, + "src": "23398:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15472, + "indexExpression": { + "id": 15471, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15460, + "src": "23408:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "23398:12:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 15477, + "name": "bptRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15441, + "src": "23431:8:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "baseExpression": { + "id": 15473, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15430, + "src": "23413:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15475, + "indexExpression": { + "id": 15474, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15460, + "src": "23422:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "23413:11:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mulUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 6967, + "src": "23413:17:60", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15478, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23413:27:60", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23398:42:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15480, + "nodeType": "ExpressionStatement", + "src": "23398:42:60" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15463, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15460, + "src": "23358:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 15464, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15430, + "src": "23362:8:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 15465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "23362:15:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "23358:19:60", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15482, + "initializationExpression": { + "assignments": [ + 15460 + ], + "declarations": [ + { + "constant": false, + "id": 15460, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 15482, + "src": "23343:9:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15459, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23343:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15462, + "initialValue": { + "hexValue": "30", + "id": 15461, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23355:1:60", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "23343:13:60" + }, + "loopExpression": { + "expression": { + "id": 15468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "23379:3:60", + "subExpression": { + "id": 15467, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15460, + "src": "23379:1:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15469, + "nodeType": "ExpressionStatement", + "src": "23379:3:60" + }, + "nodeType": "ForStatement", + "src": "23338:113:60" + }, + { + "expression": { + "id": 15483, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15451, + "src": "23468:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 15439, + "id": 15484, + "nodeType": "Return", + "src": "23461:16:60" + } + ] + }, + "id": 15486, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_computeProportionalAmountsIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15435, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15430, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 15486, + "src": "22273:25:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 15428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22273:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15429, + "nodeType": "ArrayTypeName", + "src": "22273:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15432, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 15486, + "src": "22308:20:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22308:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15434, + "mutability": "mutable", + "name": "totalBPT", + "nodeType": "VariableDeclaration", + "scope": 15486, + "src": "22338:16:60", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22338:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "22263:97:60" + }, + "returnParameters": { + "id": 15439, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15438, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 15486, + "src": "22384:16:60", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 15436, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22384:7:60", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15437, + "nodeType": "ArrayTypeName", + "src": "22384:9:60", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "22383:18:60" + }, + "scope": 15487, + "src": "22225:1259:60", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 15488, + "src": "1178:22308:60" + } + ], + "src": "688:22799:60" + }, + "id": 60 + }, + "contracts/StablePoolAmplification.sol": { + "ast": { + "absolutePath": "contracts/StablePoolAmplification.sol", + "exportedSymbols": { + "StablePoolAmplification": [ + 15989 + ] + }, + "id": 15990, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 15489, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:61" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/BasePoolAuthorization.sol", + "id": 15490, + "nodeType": "ImportDirective", + "scope": 15990, + "sourceUnit": 3956, + "src": "713:74:61", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/WordCodec.sol", + "id": 15491, + "nodeType": "ImportDirective", + "scope": 15990, + "sourceUnit": 6811, + "src": "788:74:61", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/StableMath.sol", + "file": "./StableMath.sol", + "id": 15492, + "nodeType": "ImportDirective", + "scope": 15990, + "sourceUnit": 15488, + "src": "864:26:61", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": true, + "baseContracts": [ + { + "baseName": { + "id": 15493, + "name": "BasePoolAuthorization", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 3955, + "src": "937:21:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BasePoolAuthorization_$3955", + "typeString": "contract BasePoolAuthorization" + } + }, + "id": 15494, + "nodeType": "InheritanceSpecifier", + "src": "937:21:61" + } + ], + "contractDependencies": [ + 1022, + 3955, + 5117 + ], + "contractKind": "contract", + "fullyImplemented": false, + "id": 15989, + "linearizedBaseContracts": [ + 15989, + 3955, + 5117, + 1022 + ], + "name": "StablePoolAmplification", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 15497, + "libraryName": { + "id": 15495, + "name": "WordCodec", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6810, + "src": "971:9:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WordCodec_$6810", + "typeString": "library WordCodec" + } + }, + "nodeType": "UsingForDirective", + "src": "965:28:61", + "typeName": { + "id": 15496, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "985:7:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + }, + { + "constant": true, + "id": 15500, + "mutability": "constant", + "name": "_MIN_UPDATE_TIME", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "1779:50:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15498, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1779:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "31", + "id": 15499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1823:6:61", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "1" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15503, + "mutability": "constant", + "name": "_MAX_AMP_UPDATE_DAILY_RATE", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "1835:55:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15501, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1835:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "32", + "id": 15502, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1889:1:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15506, + "mutability": "constant", + "name": "_AMP_START_VALUE_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2130:52:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15504, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2130:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "30", + "id": 15505, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2181:1:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15509, + "mutability": "constant", + "name": "_AMP_END_VALUE_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2188:51:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15507, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2188:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3634", + "id": 15508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2237:2:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15512, + "mutability": "constant", + "name": "_AMP_START_TIME_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2245:53:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15510, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2245:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313238", + "id": 15511, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2295:3:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_128_by_1", + "typeString": "int_const 128" + }, + "value": "128" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15515, + "mutability": "constant", + "name": "_AMP_END_TIME_OFFSET", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2304:51:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15513, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2304:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "313932", + "id": 15514, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2352:3:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_192_by_1", + "typeString": "int_const 192" + }, + "value": "192" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15518, + "mutability": "constant", + "name": "_AMP_VALUE_BIT_LENGTH", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2362:51:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15516, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2362:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3634", + "id": 15517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2411:2:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 15521, + "mutability": "constant", + "name": "_AMP_TIMESTAMP_BIT_LENGTH", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2419:55:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15519, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2419:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3634", + "id": 15520, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2472:2:61", + "typeDescriptions": { + "typeIdentifier": "t_rational_64_by_1", + "typeString": "int_const 64" + }, + "value": "64" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 15523, + "mutability": "mutable", + "name": "_packedAmplificationData", + "nodeType": "VariableDeclaration", + "scope": 15989, + "src": "2481:40:61", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 15522, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2481:7:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 15533, + "name": "AmpUpdateStarted", + "nodeType": "EventDefinition", + "parameters": { + "id": 15532, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15525, + "indexed": false, + "mutability": "mutable", + "name": "startValue", + "nodeType": "VariableDeclaration", + "scope": 15533, + "src": "2551:18:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15524, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2551:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15527, + "indexed": false, + "mutability": "mutable", + "name": "endValue", + "nodeType": "VariableDeclaration", + "scope": 15533, + "src": "2571:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15526, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2571:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15529, + "indexed": false, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 15533, + "src": "2589:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15528, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2589:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15531, + "indexed": false, + "mutability": "mutable", + "name": "endTime", + "nodeType": "VariableDeclaration", + "scope": 15533, + "src": "2608:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15530, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2608:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2550:74:61" + }, + "src": "2528:97:61" + }, + { + "anonymous": false, + "id": 15537, + "name": "AmpUpdateStopped", + "nodeType": "EventDefinition", + "parameters": { + "id": 15536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15535, + "indexed": false, + "mutability": "mutable", + "name": "currentValue", + "nodeType": "VariableDeclaration", + "scope": 15537, + "src": "2653:20:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15534, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2653:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2652:22:61" + }, + "src": "2630:45:61" + }, + { + "body": { + "id": 15573, + "nodeType": "Block", + "src": "2725:303:61", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15543, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15539, + "src": "2744:22:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "expression": { + "id": 15544, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "2770:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_MIN_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 14203, + "src": "2770:19:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2744:45:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15547, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2791:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MIN_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 614, + "src": "2791:14:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15542, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2735:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2735:71:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15550, + "nodeType": "ExpressionStatement", + "src": "2735:71:61" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15552, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15539, + "src": "2825:22:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "id": 15553, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "2851:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_MAX_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 14206, + "src": "2851:19:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2825:45:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15556, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "2872:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MAX_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 617, + "src": "2872:14:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15551, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "2816:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2816:71:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15559, + "nodeType": "ExpressionStatement", + "src": "2816:71:61" + }, + { + "assignments": [ + 15561 + ], + "declarations": [ + { + "constant": false, + "id": 15561, + "mutability": "mutable", + "name": "initialAmp", + "nodeType": "VariableDeclaration", + "scope": 15573, + "src": "2898:18:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15560, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2898:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15568, + "initialValue": { + "arguments": [ + { + "id": 15564, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15539, + "src": "2928:22:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15565, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "2952:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15566, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_AMP_PRECISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 14209, + "src": "2952:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15562, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "2919:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "2919:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2919:59:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2898:80:61" + }, + { + "expression": { + "arguments": [ + { + "id": 15570, + "name": "initialAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15561, + "src": "3010:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15569, + "name": "_setAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 15887, + 15913 + ], + "referencedDeclaration": 15887, + "src": "2988:21:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 15571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2988:33:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15572, + "nodeType": "ExpressionStatement", + "src": "2988:33:61" + } + ] + }, + "id": 15574, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15540, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15539, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 15574, + "src": "2693:30:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15538, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2693:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2692:32:61" + }, + "returnParameters": { + "id": 15541, + "nodeType": "ParameterList", + "parameters": [], + "src": "2725:0:61" + }, + "scope": 15989, + "src": "2681:347:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 15595, + "nodeType": "Block", + "src": "3219:114:61", + "statements": [ + { + "expression": { + "id": 15588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 15583, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15577, + "src": "3230:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15584, + "name": "isUpdating", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15579, + "src": "3237:10:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 15585, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "3229:19:61", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 15586, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "3251:26:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 15587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3251:28:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "src": "3229:50:61", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15589, + "nodeType": "ExpressionStatement", + "src": "3229:50:61" + }, + { + "expression": { + "id": 15593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15590, + "name": "precision", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15581, + "src": "3289:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 15591, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "3301:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_AMP_PRECISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 14209, + "src": "3301:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3289:37:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15594, + "nodeType": "ExpressionStatement", + "src": "3289:37:61" + } + ] + }, + "functionSelector": "6daccffa", + "id": 15596, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAmplificationParameter", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15575, + "nodeType": "ParameterList", + "parameters": [], + "src": "3068:2:61" + }, + "returnParameters": { + "id": 15582, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15577, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 15596, + "src": "3131:13:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15576, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3131:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15579, + "mutability": "mutable", + "name": "isUpdating", + "nodeType": "VariableDeclaration", + "scope": 15596, + "src": "3158:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 15578, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3158:4:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15581, + "mutability": "mutable", + "name": "precision", + "nodeType": "VariableDeclaration", + "scope": 15596, + "src": "3187:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15580, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3187:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3117:97:61" + }, + "scope": 15989, + "src": "3034:299:61", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 15681, + "nodeType": "Block", + "src": "3608:1155:61", + "statements": [ + { + "assignments": [ + 15604, + 15606, + 15608, + 15610 + ], + "declarations": [ + { + "constant": false, + "id": 15604, + "mutability": "mutable", + "name": "startValue", + "nodeType": "VariableDeclaration", + "scope": 15681, + "src": "3619:18:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15603, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3619:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15606, + "mutability": "mutable", + "name": "endValue", + "nodeType": "VariableDeclaration", + "scope": 15681, + "src": "3639:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15605, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3639:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15608, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 15681, + "src": "3657:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15607, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3657:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15610, + "mutability": "mutable", + "name": "endTime", + "nodeType": "VariableDeclaration", + "scope": 15681, + "src": "3676:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15609, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3676:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15613, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 15611, + "name": "_getAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15726, + "src": "3695:21:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function () view returns (uint256,uint256,uint256,uint256)" + } + }, + "id": 15612, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3695:23:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256,uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3618:100:61" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15617, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 15614, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "3850:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "3850:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 15616, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15610, + "src": "3868:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3850:25:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 15679, + "nodeType": "Block", + "src": "4684:73:61", + "statements": [ + { + "expression": { + "id": 15673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15671, + "name": "isUpdating", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15601, + "src": "4698:10:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 15672, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4711:5:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "4698:18:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15674, + "nodeType": "ExpressionStatement", + "src": "4698:18:61" + }, + { + "expression": { + "id": 15677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15675, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15599, + "src": "4730:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 15676, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15606, + "src": "4738:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4730:16:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15678, + "nodeType": "ExpressionStatement", + "src": "4730:16:61" + } + ] + }, + "id": 15680, + "nodeType": "IfStatement", + "src": "3846:911:61", + "trueBody": { + "id": 15670, + "nodeType": "Block", + "src": "3877:801:61", + "statements": [ + { + "expression": { + "id": 15620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15618, + "name": "isUpdating", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15601, + "src": "3891:10:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "74727565", + "id": 15619, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3904:4:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "src": "3891:17:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 15621, + "nodeType": "ExpressionStatement", + "src": "3891:17:61" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15622, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15606, + "src": "4369:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 15623, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15604, + "src": "4380:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4369:21:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 15668, + "nodeType": "Block", + "src": "4533:135:61", + "statements": [ + { + "expression": { + "id": 15666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15647, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15599, + "src": "4551:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15648, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15604, + "src": "4559:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15664, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15658, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15651, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15649, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15604, + "src": "4574:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15650, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15606, + "src": "4587:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4574:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15652, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4573:23:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 15653, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4600:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4600:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15655, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15608, + "src": "4618:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4600:27:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15657, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4599:29:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4573:55:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15659, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4572:57:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15660, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15610, + "src": "4633:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15661, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15608, + "src": "4643:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4633:19:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15663, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4632:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4572:81:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4559:94:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4551:102:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15667, + "nodeType": "ExpressionStatement", + "src": "4551:102:61" + } + ] + }, + "id": 15669, + "nodeType": "IfStatement", + "src": "4365:303:61", + "trueBody": { + "id": 15646, + "nodeType": "Block", + "src": "4392:135:61", + "statements": [ + { + "expression": { + "id": 15644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15625, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15599, + "src": "4410:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15626, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15604, + "src": "4418:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15627, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15606, + "src": "4433:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15628, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15604, + "src": "4444:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4433:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15630, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4432:23:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 15631, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4459:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "4459:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15633, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15608, + "src": "4477:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4459:27:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15635, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4458:29:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4432:55:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15637, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4431:57:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15638, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15610, + "src": "4492:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 15639, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15608, + "src": "4502:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4492:19:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 15641, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4491:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4431:81:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4418:94:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4410:102:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15645, + "nodeType": "ExpressionStatement", + "src": "4410:102:61" + } + ] + } + } + ] + } + } + ] + }, + "id": 15682, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getAmplificationParameter", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15597, + "nodeType": "ParameterList", + "parameters": [], + "src": "3550:2:61" + }, + "returnParameters": { + "id": 15602, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15599, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 15682, + "src": "3576:13:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15598, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3576:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15601, + "mutability": "mutable", + "name": "isUpdating", + "nodeType": "VariableDeclaration", + "scope": 15682, + "src": "3591:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 15600, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3591:4:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3575:32:61" + }, + "scope": 15989, + "src": "3515:1248:61", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 15725, + "nodeType": "Block", + "src": "5047:427:61", + "statements": [ + { + "expression": { + "id": 15699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15693, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15685, + "src": "5057:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 15696, + "name": "_AMP_START_VALUE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15506, + "src": "5106:23:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15697, + "name": "_AMP_VALUE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15518, + "src": "5131:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15694, + "name": "_packedAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15523, + "src": "5070:24:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 15695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "5070:35:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 15698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5070:83:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5057:96:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15700, + "nodeType": "ExpressionStatement", + "src": "5057:96:61" + }, + { + "expression": { + "id": 15707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15701, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15687, + "src": "5163:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 15704, + "name": "_AMP_END_VALUE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15509, + "src": "5210:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15705, + "name": "_AMP_VALUE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15518, + "src": "5233:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15702, + "name": "_packedAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15523, + "src": "5174:24:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 15703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "5174:35:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 15706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5174:81:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5163:92:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15708, + "nodeType": "ExpressionStatement", + "src": "5163:92:61" + }, + { + "expression": { + "id": 15715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15709, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15689, + "src": "5265:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 15712, + "name": "_AMP_START_TIME_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15512, + "src": "5313:22:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15713, + "name": "_AMP_TIMESTAMP_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15521, + "src": "5337:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15710, + "name": "_packedAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15523, + "src": "5277:24:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 15711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "5277:35:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 15714, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5277:86:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5265:98:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15716, + "nodeType": "ExpressionStatement", + "src": "5265:98:61" + }, + { + "expression": { + "id": 15723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15717, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15691, + "src": "5373:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 15720, + "name": "_AMP_END_TIME_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15515, + "src": "5419:20:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15721, + "name": "_AMP_TIMESTAMP_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15521, + "src": "5441:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15718, + "name": "_packedAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15523, + "src": "5383:24:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 15719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "decodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6514, + "src": "5383:35:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_bytes32_$", + "typeString": "function (bytes32,uint256,uint256) pure returns (uint256)" + } + }, + "id": 15722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5383:84:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5373:94:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15724, + "nodeType": "ExpressionStatement", + "src": "5373:94:61" + } + ] + }, + "id": 15726, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getAmplificationData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15683, + "nodeType": "ParameterList", + "parameters": [], + "src": "4862:2:61" + }, + "returnParameters": { + "id": 15692, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15685, + "mutability": "mutable", + "name": "startValue", + "nodeType": "VariableDeclaration", + "scope": 15726, + "src": "4924:18:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15684, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4924:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15687, + "mutability": "mutable", + "name": "endValue", + "nodeType": "VariableDeclaration", + "scope": 15726, + "src": "4956:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15686, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4956:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15689, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 15726, + "src": "4986:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15688, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4986:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15691, + "mutability": "mutable", + "name": "endTime", + "nodeType": "VariableDeclaration", + "scope": 15726, + "src": "5017:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15690, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5017:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4910:132:61" + }, + "scope": 15989, + "src": "4832:642:61", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 15843, + "nodeType": "Block", + "src": "6010:1198:61", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15737, + "name": "rawEndValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15729, + "src": "6029:11:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "expression": { + "id": 15738, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "6044:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_MIN_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 14203, + "src": "6044:19:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6029:34:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15741, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6065:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MIN_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 614, + "src": "6065:14:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15736, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6020:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6020:60:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15744, + "nodeType": "ExpressionStatement", + "src": "6020:60:61" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15746, + "name": "rawEndValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15729, + "src": "6099:11:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "id": 15747, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "6114:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_MAX_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 14206, + "src": "6114:19:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6099:34:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15750, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6135:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MAX_AMP", + "nodeType": "MemberAccess", + "referencedDeclaration": 617, + "src": "6135:14:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15745, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6090:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6090:60:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15753, + "nodeType": "ExpressionStatement", + "src": "6090:60:61" + }, + { + "assignments": [ + 15755 + ], + "declarations": [ + { + "constant": false, + "id": 15755, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 15843, + "src": "6161:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15754, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6161:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15762, + "initialValue": { + "arguments": [ + { + "id": 15758, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15731, + "src": "6189:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15759, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6198:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6198:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15756, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6180:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 8652, + "src": "6180:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6180:34:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6161:53:61" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15764, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15755, + "src": "6233:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 15765, + "name": "_MIN_UPDATE_TIME", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15500, + "src": "6245:16:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6233:28:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15767, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6263:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AMP_END_TIME_TOO_CLOSE", + "nodeType": "MemberAccess", + "referencedDeclaration": 665, + "src": "6263:29:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15763, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6224:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6224:69:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15770, + "nodeType": "ExpressionStatement", + "src": "6224:69:61" + }, + { + "assignments": [ + 15772, + 15774 + ], + "declarations": [ + { + "constant": false, + "id": 15772, + "mutability": "mutable", + "name": "currentValue", + "nodeType": "VariableDeclaration", + "scope": 15843, + "src": "6305:20:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15771, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6305:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15774, + "mutability": "mutable", + "name": "isUpdating", + "nodeType": "VariableDeclaration", + "scope": 15843, + "src": "6327:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 15773, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6327:4:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 15777, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 15775, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "6346:26:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 15776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6346:28:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6304:70:61" + }, + { + "expression": { + "arguments": [ + { + "id": 15780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "6393:11:61", + "subExpression": { + "id": 15779, + "name": "isUpdating", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15774, + "src": "6394:10:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15781, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "6406:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AMP_ONGOING_UPDATE", + "nodeType": "MemberAccess", + "referencedDeclaration": 668, + "src": "6406:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15778, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "6384:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6384:48:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15784, + "nodeType": "ExpressionStatement", + "src": "6384:48:61" + }, + { + "assignments": [ + 15786 + ], + "declarations": [ + { + "constant": false, + "id": 15786, + "mutability": "mutable", + "name": "endValue", + "nodeType": "VariableDeclaration", + "scope": 15843, + "src": "6443:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15785, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6443:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15793, + "initialValue": { + "arguments": [ + { + "id": 15789, + "name": "rawEndValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15729, + "src": "6471:11:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15790, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "6484:10:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 15791, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_AMP_PRECISION", + "nodeType": "MemberAccess", + "referencedDeclaration": 14209, + "src": "6484:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15787, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6462:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "6462:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6462:48:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6443:67:61" + }, + { + "assignments": [ + 15795 + ], + "declarations": [ + { + "constant": false, + "id": 15795, + "mutability": "mutable", + "name": "dailyRate", + "nodeType": "VariableDeclaration", + "scope": 15843, + "src": "6817:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15794, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6817:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 15826, + "initialValue": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15796, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15786, + "src": "6837:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 15797, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15772, + "src": "6848:12:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6837:23:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "31", + "id": 15816, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6982:6:61", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "1" + }, + { + "id": 15817, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15772, + "src": "6990:12:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15814, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6973:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "6973:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6973:30:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 15821, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15786, + "src": "7014:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15822, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15755, + "src": "7024:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15819, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "7005:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15820, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "7005:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7005:28:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15812, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6962:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 8841, + "src": "6962:10:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6962:72:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 15825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "6837:197:61", + "trueExpression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "31", + "id": 15803, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6895:6:61", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + "value": "1" + }, + { + "id": 15804, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15786, + "src": "6903:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_86400_by_1", + "typeString": "int_const 86400" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15801, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6886:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "6886:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6886:26:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 15808, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15772, + "src": "6923:12:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15809, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15755, + "src": "6937:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15806, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6914:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 8761, + "src": "6914:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15810, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6914:32:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15799, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8842, + "src": "6875:4:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$8842_$", + "typeString": "type(library Math)" + } + }, + "id": 15800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "divUp", + "nodeType": "MemberAccess", + "referencedDeclaration": 8841, + "src": "6875:10:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 15811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6875:72:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6817:217:61" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 15830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15828, + "name": "dailyRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15795, + "src": "7053:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 15829, + "name": "_MAX_AMP_UPDATE_DAILY_RATE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15503, + "src": "7066:26:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7053:39:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15831, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7094:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AMP_RATE_TOO_HIGH", + "nodeType": "MemberAccess", + "referencedDeclaration": 671, + "src": "7094:24:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15827, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7044:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7044:75:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15834, + "nodeType": "ExpressionStatement", + "src": "7044:75:61" + }, + { + "expression": { + "arguments": [ + { + "id": 15836, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15772, + "src": "7152:12:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15837, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15786, + "src": "7166:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15838, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7176:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "7176:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15840, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15731, + "src": "7193:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15835, + "name": "_setAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 15887, + 15913 + ], + "referencedDeclaration": 15913, + "src": "7130:21:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256,uint256)" + } + }, + "id": 15841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7130:71:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15842, + "nodeType": "ExpressionStatement", + "src": "7130:71:61" + } + ] + }, + "documentation": { + "id": 15727, + "nodeType": "StructuredDocumentation", + "src": "5480:422:61", + "text": " @dev Begin changing the amplification parameter to `rawEndValue` over time. The value will change linearly until\n `endTime` is reached, when it will be `rawEndValue`.\n NOTE: Internally, the amplification parameter is represented using higher precision. The values returned by\n `getAmplificationParameter` have to be corrected to account for this when comparing to `rawEndValue`." + }, + "functionSelector": "2f1a0bc9", + "id": 15844, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 15734, + "modifierName": { + "id": 15733, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "5997:12:61", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5997:12:61" + } + ], + "name": "startAmplificationParameterUpdate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15729, + "mutability": "mutable", + "name": "rawEndValue", + "nodeType": "VariableDeclaration", + "scope": 15844, + "src": "5950:19:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15728, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5950:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15731, + "mutability": "mutable", + "name": "endTime", + "nodeType": "VariableDeclaration", + "scope": 15844, + "src": "5971:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15730, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5971:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5949:38:61" + }, + "returnParameters": { + "id": 15735, + "nodeType": "ParameterList", + "parameters": [], + "src": "6010:0:61" + }, + "scope": 15989, + "src": "5907:1301:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 15867, + "nodeType": "Block", + "src": "7385:193:61", + "statements": [ + { + "assignments": [ + 15851, + 15853 + ], + "declarations": [ + { + "constant": false, + "id": 15851, + "mutability": "mutable", + "name": "currentValue", + "nodeType": "VariableDeclaration", + "scope": 15867, + "src": "7396:20:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15850, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7396:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15853, + "mutability": "mutable", + "name": "isUpdating", + "nodeType": "VariableDeclaration", + "scope": 15867, + "src": "7418:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 15852, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7418:4:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 15856, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 15854, + "name": "_getAmplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15682, + "src": "7437:26:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$_t_bool_$", + "typeString": "function () view returns (uint256,bool)" + } + }, + "id": 15855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7437:28:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_bool_$", + "typeString": "tuple(uint256,bool)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7395:70:61" + }, + { + "expression": { + "arguments": [ + { + "id": 15858, + "name": "isUpdating", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15853, + "src": "7484:10:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "expression": { + "id": 15859, + "name": "Errors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1011, + "src": "7496:6:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Errors_$1011_$", + "typeString": "type(library Errors)" + } + }, + "id": 15860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "AMP_NO_ONGOING_UPDATE", + "nodeType": "MemberAccess", + "referencedDeclaration": 674, + "src": "7496:28:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15857, + "name": "_require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 479, + 498 + ], + "referencedDeclaration": 479, + "src": "7475:8:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$returns$__$", + "typeString": "function (bool,uint256) pure" + } + }, + "id": 15861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7475:50:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15862, + "nodeType": "ExpressionStatement", + "src": "7475:50:61" + }, + { + "expression": { + "arguments": [ + { + "id": 15864, + "name": "currentValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15851, + "src": "7558:12:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15863, + "name": "_setAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 15887, + 15913 + ], + "referencedDeclaration": 15887, + "src": "7536:21:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 15865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7536:35:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15866, + "nodeType": "ExpressionStatement", + "src": "7536:35:61" + } + ] + }, + "documentation": { + "id": 15845, + "nodeType": "StructuredDocumentation", + "src": "7214:100:61", + "text": " @dev Stops the amplification parameter change process, keeping the current value." + }, + "functionSelector": "eb0f24d6", + "id": 15868, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 15848, + "modifierName": { + "id": 15847, + "name": "authenticate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5068, + "src": "7372:12:61", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7372:12:61" + } + ], + "name": "stopAmplificationParameterUpdate", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15846, + "nodeType": "ParameterList", + "parameters": [], + "src": "7360:2:61" + }, + "returnParameters": { + "id": 15849, + "nodeType": "ParameterList", + "parameters": [], + "src": "7385:0:61" + }, + "scope": 15989, + "src": "7319:259:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 15886, + "nodeType": "Block", + "src": "7638:126:61", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 15874, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15870, + "src": "7672:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15875, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15870, + "src": "7679:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15876, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7686:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "7686:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 15878, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7703:5:61", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 15879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "7703:15:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15873, + "name": "_storeAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15955, + "src": "7648:23:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256,uint256)" + } + }, + "id": 15880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7648:71:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15881, + "nodeType": "ExpressionStatement", + "src": "7648:71:61" + }, + { + "eventCall": { + "arguments": [ + { + "id": 15883, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15870, + "src": "7751:5:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15882, + "name": "AmpUpdateStopped", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15537, + "src": "7734:16:61", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 15884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7734:23:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15885, + "nodeType": "EmitStatement", + "src": "7729:28:61" + } + ] + }, + "id": 15887, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setAmplificationData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15871, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15870, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 15887, + "src": "7615:13:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15869, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7615:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7614:15:61" + }, + "returnParameters": { + "id": 15872, + "nodeType": "ParameterList", + "parameters": [], + "src": "7638:0:61" + }, + "scope": 15989, + "src": "7584:180:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 15912, + "nodeType": "Block", + "src": "7921:155:61", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 15899, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15889, + "src": "7955:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15900, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15891, + "src": "7967:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15901, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15893, + "src": "7977:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15902, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15895, + "src": "7988:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15898, + "name": "_storeAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15955, + "src": "7931:23:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256,uint256)" + } + }, + "id": 15903, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7931:65:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15904, + "nodeType": "ExpressionStatement", + "src": "7931:65:61" + }, + { + "eventCall": { + "arguments": [ + { + "id": 15906, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15889, + "src": "8028:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15907, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15891, + "src": "8040:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15908, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15893, + "src": "8050:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15909, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15895, + "src": "8061:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 15905, + "name": "AmpUpdateStarted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15533, + "src": "8011:16:61", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256,uint256,uint256)" + } + }, + "id": 15910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8011:58:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 15911, + "nodeType": "EmitStatement", + "src": "8006:63:61" + } + ] + }, + "id": 15913, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setAmplificationData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15896, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15889, + "mutability": "mutable", + "name": "startValue", + "nodeType": "VariableDeclaration", + "scope": 15913, + "src": "7810:18:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15888, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7810:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15891, + "mutability": "mutable", + "name": "endValue", + "nodeType": "VariableDeclaration", + "scope": 15913, + "src": "7838:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15890, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7838:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15893, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 15913, + "src": "7864:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15892, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7864:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15895, + "mutability": "mutable", + "name": "endTime", + "nodeType": "VariableDeclaration", + "scope": 15913, + "src": "7891:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15894, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7891:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7800:112:61" + }, + "returnParameters": { + "id": 15897, + "nodeType": "ParameterList", + "parameters": [], + "src": "7921:0:61" + }, + "scope": 15989, + "src": "7770:306:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 15954, + "nodeType": "Block", + "src": "8235:417:61", + "statements": [ + { + "expression": { + "id": 15952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 15924, + "name": "_packedAmplificationData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15523, + "src": "8245:24:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 15951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 15944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 15937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 15927, + "name": "startValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15915, + "src": "8305:10:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15928, + "name": "_AMP_START_VALUE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15506, + "src": "8317:23:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15929, + "name": "_AMP_VALUE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15518, + "src": "8342:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15925, + "name": "WordCodec", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "8284:9:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WordCodec_$6810_$", + "typeString": "type(library WordCodec)" + } + }, + "id": 15926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "encodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6445, + "src": "8284:20:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 15930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8284:80:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "id": 15933, + "name": "endValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15917, + "src": "8400:8:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15934, + "name": "_AMP_END_VALUE_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15509, + "src": "8410:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15935, + "name": "_AMP_VALUE_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15518, + "src": "8433:21:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15931, + "name": "WordCodec", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "8379:9:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WordCodec_$6810_$", + "typeString": "type(library WordCodec)" + } + }, + "id": 15932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "encodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6445, + "src": "8379:20:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 15936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8379:76:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8284:171:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "id": 15940, + "name": "startTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15919, + "src": "8491:9:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15941, + "name": "_AMP_START_TIME_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15512, + "src": "8502:22:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15942, + "name": "_AMP_TIMESTAMP_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15521, + "src": "8526:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15938, + "name": "WordCodec", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "8470:9:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WordCodec_$6810_$", + "typeString": "type(library WordCodec)" + } + }, + "id": 15939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "encodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6445, + "src": "8470:20:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 15943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8470:82:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8284:268:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "id": 15947, + "name": "endTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15921, + "src": "8588:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15948, + "name": "_AMP_END_TIME_OFFSET", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15515, + "src": "8597:20:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 15949, + "name": "_AMP_TIMESTAMP_BIT_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15521, + "src": "8619:25:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 15945, + "name": "WordCodec", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6810, + "src": "8567:9:61", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WordCodec_$6810_$", + "typeString": "type(library WordCodec)" + } + }, + "id": 15946, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "encodeUint", + "nodeType": "MemberAccess", + "referencedDeclaration": 6445, + "src": "8567:20:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$", + "typeString": "function (uint256,uint256,uint256) pure returns (bytes32)" + } + }, + "id": 15950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8567:78:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8284:361:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8245:400:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 15953, + "nodeType": "ExpressionStatement", + "src": "8245:400:61" + } + ] + }, + "id": 15955, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_storeAmplificationData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 15922, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15915, + "mutability": "mutable", + "name": "startValue", + "nodeType": "VariableDeclaration", + "scope": 15955, + "src": "8124:18:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15914, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8124:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15917, + "mutability": "mutable", + "name": "endValue", + "nodeType": "VariableDeclaration", + "scope": 15955, + "src": "8152:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15916, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8152:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15919, + "mutability": "mutable", + "name": "startTime", + "nodeType": "VariableDeclaration", + "scope": 15955, + "src": "8178:17:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15918, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8178:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 15921, + "mutability": "mutable", + "name": "endTime", + "nodeType": "VariableDeclaration", + "scope": 15955, + "src": "8205:15:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15920, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8205:7:61", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8114:112:61" + }, + "returnParameters": { + "id": 15923, + "nodeType": "ParameterList", + "parameters": [], + "src": "8235:0:61" + }, + "scope": 15989, + "src": "8082:570:61", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "private" + }, + { + "baseFunctions": [ + 3949 + ], + "body": { + "id": 15987, + "nodeType": "Block", + "src": "8893:249:61", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 15985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 15980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 15970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15964, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15958, + "src": "8923:8:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 15966, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "8947:4:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StablePoolAmplification_$15989", + "typeString": "contract StablePoolAmplification" + } + }, + "id": 15967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "startAmplificationParameterUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 15844, + "src": "8947:38:61", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) external" + } + }, + "id": 15968, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "8947:47:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 15965, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5107, + "src": "8935:11:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 15969, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8935:60:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "8923:72:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 15971, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8922:74:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 15978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 15972, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15958, + "src": "9013:8:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 15974, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9037:4:61", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StablePoolAmplification_$15989", + "typeString": "contract StablePoolAmplification" + } + }, + "id": 15975, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "stopAmplificationParameterUpdate", + "nodeType": "MemberAccess", + "referencedDeclaration": 15868, + "src": "9037:37:61", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$__$returns$__$", + "typeString": "function () external" + } + }, + "id": 15976, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "9037:46:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + ], + "id": 15973, + "name": "getActionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5107, + "src": "9025:11:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$", + "typeString": "function (bytes4) view returns (bytes32)" + } + }, + "id": 15977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9025:59:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "9013:71:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 15979, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9012:73:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8922:163:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 15983, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15958, + "src": "9126:8:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 15981, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "9101:5:61", + "typeDescriptions": { + "typeIdentifier": "t_super$_StablePoolAmplification_$15989", + "typeString": "contract super StablePoolAmplification" + } + }, + "id": 15982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_isOwnerOnlyAction", + "nodeType": "MemberAccess", + "referencedDeclaration": 3949, + "src": "9101:24:61", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 15984, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9101:34:61", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8922:213:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 15963, + "id": 15986, + "nodeType": "Return", + "src": "8903:232:61" + } + ] + }, + "documentation": { + "id": 15956, + "nodeType": "StructuredDocumentation", + "src": "8689:107:61", + "text": " @dev Overrides only owner action to allow setting the cache duration for the token rates" + }, + "id": 15988, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 15960, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8869:8:61" + }, + "parameters": { + "id": 15959, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15958, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 15988, + "src": "8829:16:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 15957, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "8829:7:61", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "8828:18:61" + }, + "returnParameters": { + "id": 15963, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 15962, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 15988, + "src": "8887:4:61", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 15961, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8887:4:61", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8886:6:61" + }, + "scope": 15989, + "src": "8801:341:61", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + } + ], + "scope": 15990, + "src": "892:8252:61" + } + ], + "src": "688:8457:61" + }, + "id": 61 + }, + "contracts/test/MockComposableStablePool.sol": { + "ast": { + "absolutePath": "contracts/test/MockComposableStablePool.sol", + "exportedSymbols": { + "MockComposableStablePool": [ + 16154 + ] + }, + "id": 16155, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 15991, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:62" + }, + { + "id": 15992, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:62" + }, + { + "absolutePath": "@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol", + "file": "@balancer-labs/v2-pool-utils/contracts/test/MockFailureModes.sol", + "id": 15993, + "nodeType": "ImportDirective", + "scope": 16155, + "sourceUnit": 5041, + "src": "747:74:62", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePool.sol", + "file": "../ComposableStablePool.sol", + "id": 15994, + "nodeType": "ImportDirective", + "scope": 16155, + "sourceUnit": 11877, + "src": "823:37:62", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 15995, + "name": "ComposableStablePool", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 11876, + "src": "899:20:62", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePool_$11876", + "typeString": "contract ComposableStablePool" + } + }, + "id": 15996, + "nodeType": "InheritanceSpecifier", + "src": "899:20:62" + }, + { + "baseName": { + "id": 15997, + "name": "MockFailureModes", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5040, + "src": "921:16:62", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockFailureModes_$5040", + "typeString": "contract MockFailureModes" + } + }, + "id": 15998, + "nodeType": "InheritanceSpecifier", + "src": "921:16:62" + } + ], + "contractDependencies": [ + 409, + 428, + 451, + 461, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1466, + 1491, + 2230, + 2468, + 3860, + 3955, + 4136, + 4691, + 5040, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 11876, + 12430, + 13150, + 14193, + 15989 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 16154, + "linearizedBaseContracts": [ + 16154, + 5040, + 11876, + 12430, + 4691, + 13150, + 14193, + 15989, + 2468, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1466, + 1425, + 1491, + 461, + 428 + ], + "name": "MockComposableStablePool", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 16006, + "nodeType": "Block", + "src": "1014:64:62", + "statements": [] + }, + "id": 16007, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 16003, + "name": "params", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16000, + "src": "1006:6:62", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams memory" + } + } + ], + "id": 16004, + "modifierName": { + "id": 16002, + "name": "ComposableStablePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 11876, + "src": "985:20:62", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePool_$11876_$", + "typeString": "type(contract ComposableStablePool)" + } + }, + "nodeType": "ModifierInvocation", + "src": "985:28:62" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16001, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16000, + "mutability": "mutable", + "name": "params", + "nodeType": "VariableDeclaration", + "scope": 16007, + "src": "956:27:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_memory_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + }, + "typeName": { + "id": 15999, + "name": "NewPoolParams", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 9755, + "src": "956:13:62", + "typeDescriptions": { + "typeIdentifier": "t_struct$_NewPoolParams_$9755_storage_ptr", + "typeString": "struct ComposableStablePool.NewPoolParams" + } + }, + "visibility": "internal" + } + ], + "src": "955:29:62" + }, + "returnParameters": { + "id": 16005, + "nodeType": "ParameterList", + "parameters": [], + "src": "1014:0:62" + }, + "scope": 16154, + "src": "944:134:62", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 16016, + "nodeType": "Block", + "src": "1147:50:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16013, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16009, + "src": "1184:5:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16012, + "name": "_cacheTokenRateIfNecessary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12938, + "src": "1157:26:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 16014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1157:33:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16015, + "nodeType": "ExpressionStatement", + "src": "1157:33:62" + } + ] + }, + "functionSelector": "c6e9407e", + "id": 16017, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mockCacheTokenRateIfNecessary", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16010, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16009, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 16017, + "src": "1123:13:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16008, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1123:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1122:15:62" + }, + "returnParameters": { + "id": 16011, + "nodeType": "ParameterList", + "parameters": [], + "src": "1147:0:62" + }, + "scope": 16154, + "src": "1084:113:62", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16028, + "nodeType": "Block", + "src": "1277:52:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16025, + "name": "actionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16019, + "src": "1313:8:62", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 16024, + "name": "_isOwnerOnlyAction", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 11875 + ], + "referencedDeclaration": 11875, + "src": "1294:18:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bool_$", + "typeString": "function (bytes32) view returns (bool)" + } + }, + "id": 16026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1294:28:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 16023, + "id": 16027, + "nodeType": "Return", + "src": "1287:35:62" + } + ] + }, + "functionSelector": "e78af078", + "id": 16029, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isOwnerOnlyAction", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16019, + "mutability": "mutable", + "name": "actionId", + "nodeType": "VariableDeclaration", + "scope": 16029, + "src": "1230:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16018, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1230:7:62", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1229:18:62" + }, + "returnParameters": { + "id": 16023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16022, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16029, + "src": "1271:4:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 16021, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1271:4:62", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "1270:6:62" + }, + "scope": 16154, + "src": "1203:126:62", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 12863 + ], + "body": { + "id": 16050, + "nodeType": "Block", + "src": "1516:78:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16045, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16031, + "src": "1561:5:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16046, + "name": "provider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16033, + "src": "1568:8:62", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + { + "id": 16047, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16035, + "src": "1578:8:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 16043, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "1533:5:62", + "typeDescriptions": { + "typeIdentifier": "t_super$_MockComposableStablePool_$16154", + "typeString": "contract super MockComposableStablePool" + } + }, + "id": 16044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_updateTokenRateCache", + "nodeType": "MemberAccess", + "referencedDeclaration": 12863, + "src": "1533:27:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IRateProvider_$428_$_t_uint256_$returns$__$", + "typeString": "function (uint256,contract IRateProvider,uint256)" + } + }, + "id": 16048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1533:54:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "functionReturnParameters": 16042, + "id": 16049, + "nodeType": "Return", + "src": "1526:61:62" + } + ] + }, + "id": 16051, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "expression": { + "id": 16039, + "name": "FailureMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4968, + "src": "1492:11:62", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FailureMode_$4968_$", + "typeString": "type(enum MockFailureModes.FailureMode)" + } + }, + "id": 16040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "PRICE_RATE", + "nodeType": "MemberAccess", + "src": "1492:22:62", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + } + ], + "id": 16041, + "modifierName": { + "id": 16038, + "name": "whenNotInFailureMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4986, + "src": "1471:20:62", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_enum$_FailureMode_$4968_$", + "typeString": "modifier (enum MockFailureModes.FailureMode)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1471:44:62" + } + ], + "name": "_updateTokenRateCache", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16037, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1462:8:62" + }, + "parameters": { + "id": 16036, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16031, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 16051, + "src": "1375:13:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16030, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1375:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16033, + "mutability": "mutable", + "name": "provider", + "nodeType": "VariableDeclaration", + "scope": 16051, + "src": "1398:22:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16032, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "1398:13:62", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16035, + "mutability": "mutable", + "name": "duration", + "nodeType": "VariableDeclaration", + "scope": 16051, + "src": "1430:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16034, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1430:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1365:87:62" + }, + "returnParameters": { + "id": 16042, + "nodeType": "ParameterList", + "parameters": [], + "src": "1516:0:62" + }, + "scope": 16154, + "src": "1335:259:62", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 10023 + ], + "body": { + "id": 16078, + "nodeType": "Block", + "src": "1862:94:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16072, + "name": "request", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16053, + "src": "1900:7:62", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 16073, + "name": "balancesIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16056, + "src": "1909:20:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16074, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16058, + "src": "1931:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16075, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16060, + "src": "1940:8:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 16070, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "1879:5:62", + "typeDescriptions": { + "typeIdentifier": "t_super$_MockComposableStablePool_$16154", + "typeString": "contract super MockComposableStablePool" + } + }, + "id": 16071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_onSwapGivenIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 10023, + "src": "1879:20:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256) returns (uint256)" + } + }, + "id": 16076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1879:70:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16069, + "id": 16077, + "nodeType": "Return", + "src": "1872:77:62" + } + ] + }, + "id": 16079, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "expression": { + "id": 16064, + "name": "FailureMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4968, + "src": "1811:11:62", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FailureMode_$4968_$", + "typeString": "type(enum MockFailureModes.FailureMode)" + } + }, + "id": 16065, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "INVARIANT", + "nodeType": "MemberAccess", + "src": "1811:21:62", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + } + ], + "id": 16066, + "modifierName": { + "id": 16063, + "name": "whenNotInFailureMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4986, + "src": "1790:20:62", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_enum$_FailureMode_$4968_$", + "typeString": "modifier (enum MockFailureModes.FailureMode)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1790:43:62" + } + ], + "name": "_onSwapGivenIn", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16062, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1781:8:62" + }, + "parameters": { + "id": 16061, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16053, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 16079, + "src": "1633:26:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 16052, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "1633:11:62", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16056, + "mutability": "mutable", + "name": "balancesIncludingBpt", + "nodeType": "VariableDeclaration", + "scope": 16079, + "src": "1669:37:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16054, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1669:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16055, + "nodeType": "ArrayTypeName", + "src": "1669:9:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16058, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 16079, + "src": "1716:15:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16057, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1716:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16060, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 16079, + "src": "1741:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16059, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1741:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1623:140:62" + }, + "returnParameters": { + "id": 16069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16068, + "mutability": "mutable", + "name": "amountOut", + "nodeType": "VariableDeclaration", + "scope": 16079, + "src": "1843:17:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16067, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1843:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1842:19:62" + }, + "scope": 16154, + "src": "1600:356:62", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 10049 + ], + "body": { + "id": 16106, + "nodeType": "Block", + "src": "2224:95:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16100, + "name": "request", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16081, + "src": "2263:7:62", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + } + }, + { + "id": 16101, + "name": "balancesIncludingBpt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16084, + "src": "2272:20:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16102, + "name": "indexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16086, + "src": "2294:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16103, + "name": "indexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16088, + "src": "2303:8:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 16098, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "2241:5:62", + "typeDescriptions": { + "typeIdentifier": "t_super$_MockComposableStablePool_$16154", + "typeString": "contract super MockComposableStablePool" + } + }, + "id": 16099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_onSwapGivenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 10049, + "src": "2241:21:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SwapRequest_$1490_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (struct IPoolSwapStructs.SwapRequest memory,uint256[] memory,uint256,uint256) returns (uint256)" + } + }, + "id": 16104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2241:71:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16097, + "id": 16105, + "nodeType": "Return", + "src": "2234:78:62" + } + ] + }, + "id": 16107, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "expression": { + "id": 16092, + "name": "FailureMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4968, + "src": "2174:11:62", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_FailureMode_$4968_$", + "typeString": "type(enum MockFailureModes.FailureMode)" + } + }, + "id": 16093, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "INVARIANT", + "nodeType": "MemberAccess", + "src": "2174:21:62", + "typeDescriptions": { + "typeIdentifier": "t_enum$_FailureMode_$4968", + "typeString": "enum MockFailureModes.FailureMode" + } + } + ], + "id": 16094, + "modifierName": { + "id": 16091, + "name": "whenNotInFailureMode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4986, + "src": "2153:20:62", + "typeDescriptions": { + "typeIdentifier": "t_modifier$_t_enum$_FailureMode_$4968_$", + "typeString": "modifier (enum MockFailureModes.FailureMode)" + } + }, + "nodeType": "ModifierInvocation", + "src": "2153:43:62" + } + ], + "name": "_onSwapGivenOut", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16090, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2144:8:62" + }, + "parameters": { + "id": 16089, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16081, + "mutability": "mutable", + "name": "request", + "nodeType": "VariableDeclaration", + "scope": 16107, + "src": "1996:26:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_memory_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + }, + "typeName": { + "id": 16080, + "name": "SwapRequest", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1490, + "src": "1996:11:62", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SwapRequest_$1490_storage_ptr", + "typeString": "struct IPoolSwapStructs.SwapRequest" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16084, + "mutability": "mutable", + "name": "balancesIncludingBpt", + "nodeType": "VariableDeclaration", + "scope": 16107, + "src": "2032:37:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16082, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2032:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16083, + "nodeType": "ArrayTypeName", + "src": "2032:9:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16086, + "mutability": "mutable", + "name": "indexIn", + "nodeType": "VariableDeclaration", + "scope": 16107, + "src": "2079:15:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16085, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2079:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16088, + "mutability": "mutable", + "name": "indexOut", + "nodeType": "VariableDeclaration", + "scope": 16107, + "src": "2104:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16087, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2104:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1986:140:62" + }, + "returnParameters": { + "id": 16097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16096, + "mutability": "mutable", + "name": "amountIn", + "nodeType": "VariableDeclaration", + "scope": 16107, + "src": "2206:16:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16095, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2206:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2205:18:62" + }, + "scope": 16154, + "src": "1962:357:62", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 16126, + "nodeType": "Block", + "src": "2586:59:62", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16123, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16110, + "src": "2619:18:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 16122, + "name": "_beforeJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10966, + "src": "2603:15:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory) returns (uint256,uint256[] memory,uint256,uint256)" + } + }, + "id": 16124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2603:35:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256,uint256)" + } + }, + "functionReturnParameters": 16121, + "id": 16125, + "nodeType": "Return", + "src": "2596:42:62" + } + ] + }, + "functionSelector": "cd6ceda8", + "id": 16127, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "beforeJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16111, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16110, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 16127, + "src": "2349:35:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16108, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2349:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16109, + "nodeType": "ArrayTypeName", + "src": "2349:9:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2348:37:62" + }, + "returnParameters": { + "id": 16121, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16113, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 16127, + "src": "2433:25:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16112, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2433:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16116, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 16127, + "src": "2472:25:62", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16114, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2472:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16115, + "nodeType": "ArrayTypeName", + "src": "2472:9:62", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16118, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 16127, + "src": "2511:18:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2511:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16120, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 16127, + "src": "2543:28:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16119, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2543:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2419:162:62" + }, + "scope": 16154, + "src": "2325:320:62", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16152, + "nodeType": "Block", + "src": "2711:834:62", + "statements": [ + { + "assignments": [ + 16133, + 16135, + null, + null + ], + "declarations": [ + { + "constant": false, + "id": 16133, + "mutability": "mutable", + "name": "cash", + "nodeType": "VariableDeclaration", + "scope": 16152, + "src": "3196:12:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16132, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3196:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16135, + "mutability": "mutable", + "name": "managed", + "nodeType": "VariableDeclaration", + "scope": 16152, + "src": "3210:15:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3210:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null, + null + ], + "id": 16145, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 16139, + "name": "getPoolId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2649, + "src": "3261:9:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", + "typeString": "function () view returns (bytes32)" + } + }, + "id": 16140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3261:11:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 16142, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3281:4:62", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePool_$16154", + "typeString": "contract MockComposableStablePool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePool_$16154", + "typeString": "contract MockComposableStablePool" + } + ], + "id": 16141, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "3274:6:62", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3274:12:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 16136, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2059, + "src": "3233:8:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 16137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3233:10:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 16138, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getPoolTokenInfo", + "nodeType": "MemberAccess", + "referencedDeclaration": 1763, + "src": "3233:27:62", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_contract$_IERC20_$1152_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$", + "typeString": "function (bytes32,contract IERC20) view external returns (uint256,uint256,uint256,address)" + } + }, + "id": 16144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3233:54:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$", + "typeString": "tuple(uint256,uint256,uint256,address)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3195:92:62" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 16149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 16147, + "name": "cash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16133, + "src": "3523:4:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 16148, + "name": "managed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16135, + "src": "3530:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3523:14:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16146, + "name": "_getVirtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14192, + "src": "3505:17:62", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 16150, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3505:33:62", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16131, + "id": 16151, + "nodeType": "Return", + "src": "3498:40:62" + } + ] + }, + "functionSelector": "de82cd34", + "id": 16153, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVirtualSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16128, + "nodeType": "ParameterList", + "parameters": [], + "src": "2676:2:62" + }, + "returnParameters": { + "id": 16131, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16130, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16153, + "src": "2702:7:62", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16129, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2702:7:62", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2701:9:62" + }, + "scope": 16154, + "src": "2651:894:62", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + } + ], + "scope": 16155, + "src": "862:2685:62" + } + ], + "src": "688:2860:62" + }, + "id": 62 + }, + "contracts/test/MockComposableStablePoolProtocolFees.sol": { + "ast": { + "absolutePath": "contracts/test/MockComposableStablePoolProtocolFees.sol", + "exportedSymbols": { + "MockComposableStablePoolProtocolFees": [ + 16447 + ] + }, + "id": 16448, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 16156, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:63" + }, + { + "id": 16157, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:63" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "id": 16158, + "nodeType": "ImportDirective", + "scope": 16448, + "sourceUnit": 5883, + "src": "747:77:63", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolProtocolFees.sol", + "file": "../ComposableStablePoolProtocolFees.sol", + "id": 16159, + "nodeType": "ImportDirective", + "scope": 16448, + "sourceUnit": 12431, + "src": "826:49:63", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 16160, + "name": "ComposableStablePoolProtocolFees", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 12430, + "src": "926:32:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolProtocolFees_$12430", + "typeString": "contract ComposableStablePoolProtocolFees" + } + }, + "id": 16161, + "nodeType": "InheritanceSpecifier", + "src": "926:32:63" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3860, + 3955, + 4136, + 4691, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 12430, + 13150, + 14193 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 16447, + "linearizedBaseContracts": [ + 16447, + 12430, + 4691, + 13150, + 14193, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "MockComposableStablePoolProtocolFees", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 16233, + "nodeType": "Block", + "src": "2249:64:63", + "statements": [] + }, + "id": 16234, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 16182, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16168, + "src": "1367:6:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 16184, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1382:4:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePoolProtocolFees_$16447", + "typeString": "contract MockComposableStablePoolProtocolFees" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePoolProtocolFees_$16447", + "typeString": "contract MockComposableStablePoolProtocolFees" + } + ], + "id": 16183, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "1375:6:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1375:12:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16181, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "1353:13:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 16186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1353:35:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 16187, + "name": "tokenRateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16171, + "src": "1426:18:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "id": 16188, + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16177, + "src": "1495:31:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + ], + "id": 16180, + "name": "StorageParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13175, + "src": "1303:13:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_StorageParams_$13175_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolStorage.StorageParams storage pointer)" + } + }, + "id": 16189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "registeredTokens", + "tokenRateProviders", + "exemptFromYieldProtocolFeeFlags" + ], + "nodeType": "FunctionCall", + "src": "1303:238:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + } + ], + "id": 16190, + "modifierName": { + "id": 16179, + "name": "ComposableStablePoolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14193, + "src": "1262:27:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolStorage_$14193_$", + "typeString": "type(contract ComposableStablePoolStorage)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1262:289:63" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 16193, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16168, + "src": "1637:6:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 16194, + "name": "tokenRateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16171, + "src": "1676:18:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "id": 16195, + "name": "tokenRateCacheDurations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16174, + "src": "1737:23:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 16192, + "name": "RatesParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12456, + "src": "1599:11:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RatesParams_$12456_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolRates.RatesParams storage pointer)" + } + }, + "id": 16196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "tokens", + "rateProviders", + "tokenRateCacheDurations" + ], + "nodeType": "FunctionCall", + "src": "1599:176:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + } + ], + "id": 16197, + "modifierName": { + "id": 16191, + "name": "ComposableStablePoolRates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13150, + "src": "1560:25:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolRates_$13150_$", + "typeString": "type(contract ComposableStablePoolRates)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1560:225:63" + }, + { + "arguments": [ + { + "id": 16199, + "name": "protocolFeeProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16165, + "src": "1811:19:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + { + "expression": { + "id": 16200, + "name": "ProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4691, + "src": "1832:16:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeCache_$4691_$", + "typeString": "type(contract ProtocolFeeCache)" + } + }, + "id": 16201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", + "nodeType": "MemberAccess", + "referencedDeclaration": 4453, + "src": "1832:53:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 16202, + "modifierName": { + "id": 16198, + "name": "ProtocolFeeCache", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4691, + "src": "1794:16:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ProtocolFeeCache_$4691_$", + "typeString": "type(contract ProtocolFeeCache)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1794:92:63" + }, + { + "arguments": [ + { + "id": 16204, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16163, + "src": "1917:5:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + { + "expression": { + "expression": { + "id": 16205, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2021, + "src": "1936:6:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVault_$2021_$", + "typeString": "type(contract IVault)" + } + }, + "id": 16206, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PoolSpecialization", + "nodeType": "MemberAccess", + "referencedDeclaration": 1680, + "src": "1936:25:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PoolSpecialization_$1680_$", + "typeString": "type(enum IVault.PoolSpecialization)" + } + }, + "id": 16207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "GENERAL", + "nodeType": "MemberAccess", + "src": "1936:33:63", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + { + "hexValue": "4d6f636b537461626c65506f6f6c53746f72616765", + "id": 16208, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1983:23:63", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_36909a3924b7e963058ba7c6ba295f587afc86368077d8251295ee7ca28f3fad", + "typeString": "literal_string \"MockStablePoolStorage\"" + }, + "value": "MockStablePoolStorage" + }, + { + "hexValue": "4d4f434b5f425054", + "id": 16209, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2020:10:63", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cdbb9b422cf970c6eddcebbd9d809d55872436585090067ec6d05dcac338db2f", + "typeString": "literal_string \"MOCK_BPT\"" + }, + "value": "MOCK_BPT" + }, + { + "arguments": [ + { + "id": 16211, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16168, + "src": "2058:6:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 16213, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "2073:4:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePoolProtocolFees_$16447", + "typeString": "contract MockComposableStablePoolProtocolFees" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePoolProtocolFees_$16447", + "typeString": "contract MockComposableStablePoolProtocolFees" + } + ], + "id": 16212, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "2066:6:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16214, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2066:12:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16210, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "2044:13:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 16215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2044:35:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 16222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 16219, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16168, + "src": "2107:6:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 16220, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2107:13:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 16221, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2123:1:63", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "2107:17:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "2093:13:63", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (address[] memory)" + }, + "typeName": { + "baseType": { + "id": 16216, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2097:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 16217, + "nodeType": "ArrayTypeName", + "src": "2097:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + } + }, + "id": 16223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2093:32:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + { + "hexValue": "31653132", + "id": 16224, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2139:4:63", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000_by_1", + "typeString": "int_const 1000000000000" + }, + "value": "1e12" + }, + { + "hexValue": "30", + "id": 16225, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2194:1:63", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 16226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2209:1:63", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 16229, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2232:1:63", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 16228, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2224:7:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 16227, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2224:7:63", + "typeDescriptions": {} + } + }, + "id": 16230, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2224:10:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "id": 16231, + "modifierName": { + "id": 16203, + "name": "BasePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3860, + "src": "1895:8:63", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePool_$3860_$", + "typeString": "type(contract BasePool)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1895:349:63" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16178, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16163, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 16234, + "src": "986:12:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 16162, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "986:6:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16165, + "mutability": "mutable", + "name": "protocolFeeProvider", + "nodeType": "VariableDeclaration", + "scope": 16234, + "src": "1008:51:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + }, + "typeName": { + "id": 16164, + "name": "IProtocolFeePercentagesProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1269, + "src": "1008:31:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IProtocolFeePercentagesProvider_$1269", + "typeString": "contract IProtocolFeePercentagesProvider" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16168, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 16234, + "src": "1069:22:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 16166, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1069:6:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 16167, + "nodeType": "ArrayTypeName", + "src": "1069:8:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16171, + "mutability": "mutable", + "name": "tokenRateProviders", + "nodeType": "VariableDeclaration", + "scope": 16234, + "src": "1101:41:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 16169, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "1101:13:63", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 16170, + "nodeType": "ArrayTypeName", + "src": "1101:15:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16174, + "mutability": "mutable", + "name": "tokenRateCacheDurations", + "nodeType": "VariableDeclaration", + "scope": 16234, + "src": "1152:40:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16172, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1152:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16173, + "nodeType": "ArrayTypeName", + "src": "1152:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16177, + "mutability": "mutable", + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "VariableDeclaration", + "scope": 16234, + "src": "1202:45:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 16175, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1202:4:63", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 16176, + "nodeType": "ArrayTypeName", + "src": "1202:6:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + } + ], + "src": "976:277:63" + }, + "returnParameters": { + "id": 16232, + "nodeType": "ParameterList", + "parameters": [], + "src": "2249:0:63" + }, + "scope": 16447, + "src": "965:1348:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 16259, + "nodeType": "Block", + "src": "2553:187:63", + "statements": [ + { + "expression": { + "id": 16257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 16249, + "name": "virtualSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16244, + "src": "2564:13:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16250, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16247, + "src": "2579:8:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + null + ], + "id": 16251, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "2563:27:63", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$__$", + "typeString": "tuple(uint256,uint256[] memory,)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 16253, + "name": "registeredBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16237, + "src": "2637:18:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16254, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16239, + "src": "2669:15:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16255, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16241, + "src": "2698:25:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16252, + "name": "_payProtocolFeesBeforeJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12108, + "src": "2593:30:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256,uint256) returns (uint256,uint256[] memory,uint256)" + } + }, + "id": 16256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2593:140:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$", + "typeString": "tuple(uint256,uint256[] memory,uint256)" + } + }, + "src": "2563:170:63", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16258, + "nodeType": "ExpressionStatement", + "src": "2563:170:63" + } + ] + }, + "functionSelector": "c37bb32c", + "id": 16260, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "payProtocolFeesBeforeJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16242, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16237, + "mutability": "mutable", + "name": "registeredBalances", + "nodeType": "VariableDeclaration", + "scope": 16260, + "src": "2367:35:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16235, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2367:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16236, + "nodeType": "ArrayTypeName", + "src": "2367:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16239, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 16260, + "src": "2412:23:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16238, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2412:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16241, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 16260, + "src": "2445:33:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16240, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2445:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2357:127:63" + }, + "returnParameters": { + "id": 16248, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16244, + "mutability": "mutable", + "name": "virtualSupply", + "nodeType": "VariableDeclaration", + "scope": 16260, + "src": "2503:21:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2503:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16247, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 16260, + "src": "2526:25:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16245, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2526:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16246, + "nodeType": "ArrayTypeName", + "src": "2526:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2502:50:63" + }, + "scope": 16447, + "src": "2319:421:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16282, + "nodeType": "Block", + "src": "2971:242:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16275, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16262, + "src": "3047:10:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16276, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16265, + "src": "3075:8:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16277, + "name": "preJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16267, + "src": "3101:20:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16278, + "name": "preJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16269, + "src": "3139:17:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16279, + "name": "postJoinExitSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16271, + "src": "3174:18:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16274, + "name": "_updateInvariantAfterJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12354, + "src": "3000:29:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256)" + } + }, + "id": 16280, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3000:206:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "functionReturnParameters": 16273, + "id": 16281, + "nodeType": "Return", + "src": "2981:225:63" + } + ] + }, + "functionSelector": "64499362", + "id": 16283, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateInvariantAfterJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16272, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16262, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 16283, + "src": "2793:18:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16261, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2793:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16265, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 16283, + "src": "2821:25:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16263, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2821:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16264, + "nodeType": "ArrayTypeName", + "src": "2821:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16267, + "mutability": "mutable", + "name": "preJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 16283, + "src": "2856:28:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16266, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2856:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16269, + "mutability": "mutable", + "name": "preJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 16283, + "src": "2894:25:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16268, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2894:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16271, + "mutability": "mutable", + "name": "postJoinExitSupply", + "nodeType": "VariableDeclaration", + "scope": 16283, + "src": "2929:26:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16270, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2929:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2783:178:63" + }, + "returnParameters": { + "id": 16273, + "nodeType": "ParameterList", + "parameters": [], + "src": "2971:0:63" + }, + "scope": 16447, + "src": "2746:467:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16295, + "nodeType": "Block", + "src": "3307:71:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16291, + "name": "currentAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16285, + "src": "3337:10:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16292, + "name": "postJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16287, + "src": "3349:21:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16290, + "name": "_updatePostJoinExit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12382, + "src": "3317:19:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 16293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3317:54:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16294, + "nodeType": "ExpressionStatement", + "src": "3317:54:63" + } + ] + }, + "functionSelector": "f465d912", + "id": 16296, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updatePostJoinExit", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16288, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16285, + "mutability": "mutable", + "name": "currentAmp", + "nodeType": "VariableDeclaration", + "scope": 16296, + "src": "3247:18:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16284, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3247:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16287, + "mutability": "mutable", + "name": "postJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 16296, + "src": "3267:29:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16286, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3267:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3246:51:63" + }, + "returnParameters": { + "id": 16289, + "nodeType": "ParameterList", + "parameters": [], + "src": "3307:0:63" + }, + "scope": 16447, + "src": "3219:159:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16305, + "nodeType": "Block", + "src": "3436:43:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16302, + "name": "newSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16298, + "src": "3462:9:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16301, + "name": "_setTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9033, + "src": "3446:15:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 16303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3446:26:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16304, + "nodeType": "ExpressionStatement", + "src": "3446:26:63" + } + ] + }, + "functionSelector": "f7ea7a3d", + "id": 16306, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "setTotalSupply", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16299, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16298, + "mutability": "mutable", + "name": "newSupply", + "nodeType": "VariableDeclaration", + "scope": 16306, + "src": "3408:17:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3408:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3407:19:63" + }, + "returnParameters": { + "id": 16300, + "nodeType": "ParameterList", + "parameters": [], + "src": "3436:0:63" + }, + "scope": 16447, + "src": "3384:95:63", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16325, + "nodeType": "Block", + "src": "3768:75:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16321, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16309, + "src": "3806:8:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16322, + "name": "lastPostJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16311, + "src": "3816:19:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16320, + "name": "_getGrowthInvariants", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12268, + "src": "3785:20:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256) view returns (uint256,uint256,uint256)" + } + }, + "id": 16323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3785:51:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256,uint256)" + } + }, + "functionReturnParameters": 16319, + "id": 16324, + "nodeType": "Return", + "src": "3778:58:63" + } + ] + }, + "functionSelector": "ac392da6", + "id": 16326, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGrowthInvariants", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16312, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16309, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 16326, + "src": "3514:25:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16307, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3514:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16308, + "nodeType": "ArrayTypeName", + "src": "3514:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16311, + "mutability": "mutable", + "name": "lastPostJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 16326, + "src": "3541:27:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16310, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3541:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3513:56:63" + }, + "returnParameters": { + "id": 16319, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16314, + "mutability": "mutable", + "name": "swapFeeGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 16326, + "src": "3630:30:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16313, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3630:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16316, + "mutability": "mutable", + "name": "totalNonExemptGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 16326, + "src": "3674:37:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16315, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3674:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16318, + "mutability": "mutable", + "name": "totalGrowthInvariant", + "nodeType": "VariableDeclaration", + "scope": 16326, + "src": "3725:28:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16317, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3725:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3616:147:63" + }, + "scope": 16447, + "src": "3485:358:63", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16348, + "nodeType": "Block", + "src": "4042:204:63", + "statements": [ + { + "assignments": [ + 16339, + null + ], + "declarations": [ + { + "constant": false, + "id": 16339, + "mutability": "mutable", + "name": "percentage", + "nodeType": "VariableDeclaration", + "scope": 16348, + "src": "4053:18:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16338, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4053:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + null + ], + "id": 16345, + "initialValue": { + "arguments": [ + { + "id": 16341, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16329, + "src": "4126:8:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16342, + "name": "lastJoinExitAmp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16331, + "src": "4148:15:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 16343, + "name": "lastPostJoinExitInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16333, + "src": "4177:25:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16340, + "name": "_getProtocolPoolOwnershipPercentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12190, + "src": "4077:35:63", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256[] memory,uint256,uint256) view returns (uint256,uint256)" + } + }, + "id": 16344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4077:135:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4052:160:63" + }, + { + "expression": { + "id": 16346, + "name": "percentage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16339, + "src": "4229:10:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16337, + "id": 16347, + "nodeType": "Return", + "src": "4222:17:63" + } + ] + }, + "functionSelector": "a27ff18a", + "id": 16349, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getProtocolPoolOwnershipPercentage", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16334, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16329, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 16349, + "src": "3902:25:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16327, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3902:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16328, + "nodeType": "ArrayTypeName", + "src": "3902:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16331, + "mutability": "mutable", + "name": "lastJoinExitAmp", + "nodeType": "VariableDeclaration", + "scope": 16349, + "src": "3937:23:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16330, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3937:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16333, + "mutability": "mutable", + "name": "lastPostJoinExitInvariant", + "nodeType": "VariableDeclaration", + "scope": 16349, + "src": "3970:33:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16332, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3970:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3892:117:63" + }, + "returnParameters": { + "id": 16337, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16336, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16349, + "src": "4033:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16335, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4033:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4032:9:63" + }, + "scope": 16447, + "src": "3849:397:63", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 3519 + ], + "body": { + "id": 16356, + "nodeType": "Block", + "src": "4363:2:63", + "statements": [] + }, + "id": 16357, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_scalingFactors", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16351, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4327:8:63" + }, + "parameters": { + "id": 16350, + "nodeType": "ParameterList", + "parameters": [], + "src": "4302:2:63" + }, + "returnParameters": { + "id": 16355, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16354, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16357, + "src": "4345:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16352, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4345:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16353, + "nodeType": "ArrayTypeName", + "src": "4345:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4344:18:63" + }, + "scope": 16447, + "src": "4278:87:63", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3338 + ], + "body": { + "id": 16381, + "nodeType": "Block", + "src": "4562:42:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16378, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4579:17:63", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16377, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "4572:6:63", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4572:25:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16380, + "nodeType": "ExpressionStatement", + "src": "4572:25:63" + } + ] + }, + "id": 16382, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onInitializePool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16370, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4517:8:63" + }, + "parameters": { + "id": 16369, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16359, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4407:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16358, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4407:7:63", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16361, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4424:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16360, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4424:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16363, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4441:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16362, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4441:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16366, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4458:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16364, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4458:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16365, + "nodeType": "ArrayTypeName", + "src": "4458:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16368, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4484:12:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16367, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4484:5:63", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4397:105:63" + }, + "returnParameters": { + "id": 16376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16372, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4535:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16371, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4535:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16375, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16382, + "src": "4544:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16373, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4544:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16374, + "nodeType": "ArrayTypeName", + "src": "4544:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4534:27:63" + }, + "scope": 16447, + "src": "4371:233:63", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3365 + ], + "body": { + "id": 16413, + "nodeType": "Block", + "src": "4855:42:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16410, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4872:17:63", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16409, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "4865:6:63", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4865:25:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16412, + "nodeType": "ExpressionStatement", + "src": "4865:25:63" + } + ] + }, + "id": 16414, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onJoinPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16402, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4810:8:63" + }, + "parameters": { + "id": 16401, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16384, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4640:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16383, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4640:7:63", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16386, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4657:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16385, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4657:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16388, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4674:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16387, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4674:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16391, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4691:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4691:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16390, + "nodeType": "ArrayTypeName", + "src": "4691:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16393, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4717:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4717:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16395, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4734:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4734:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16398, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4751:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16396, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4751:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16397, + "nodeType": "ArrayTypeName", + "src": "4751:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16400, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4777:12:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16399, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4777:5:63", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4630:165:63" + }, + "returnParameters": { + "id": 16408, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16404, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4828:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16403, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4828:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16407, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16414, + "src": "4837:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16405, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4837:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16406, + "nodeType": "ArrayTypeName", + "src": "4837:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4827:27:63" + }, + "scope": 16447, + "src": "4610:287:63", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3392 + ], + "body": { + "id": 16445, + "nodeType": "Block", + "src": "5148:42:63", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16442, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5165:17:63", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16441, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "5158:6:63", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5158:25:63", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16444, + "nodeType": "ExpressionStatement", + "src": "5158:25:63" + } + ] + }, + "id": 16446, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onExitPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16434, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5103:8:63" + }, + "parameters": { + "id": 16433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16416, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "4933:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16415, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4933:7:63", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16418, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "4950:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16417, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4950:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16420, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "4967:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16419, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4967:7:63", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16423, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "4984:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4984:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16422, + "nodeType": "ArrayTypeName", + "src": "4984:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16425, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "5010:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16424, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5010:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16427, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "5027:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16426, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5027:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16430, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "5044:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5044:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16429, + "nodeType": "ArrayTypeName", + "src": "5044:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16432, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "5070:12:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16431, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5070:5:63", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4923:165:63" + }, + "returnParameters": { + "id": 16440, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16436, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "5121:7:63", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5121:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16439, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16446, + "src": "5130:16:63", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5130:7:63", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16438, + "nodeType": "ArrayTypeName", + "src": "5130:9:63", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5120:27:63" + }, + "scope": 16447, + "src": "4903:287:63", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 16448, + "src": "877:4315:63" + } + ], + "src": "688:4505:63" + }, + "id": 63 + }, + "contracts/test/MockComposableStablePoolRates.sol": { + "ast": { + "absolutePath": "contracts/test/MockComposableStablePoolRates.sol", + "exportedSymbols": { + "MockComposableStablePoolRates": [ + 16651 + ] + }, + "id": 16652, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 16449, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:64" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "id": 16450, + "nodeType": "ImportDirective", + "scope": 16652, + "sourceUnit": 5883, + "src": "713:77:64", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolRates.sol", + "file": "../ComposableStablePoolRates.sol", + "id": 16451, + "nodeType": "ImportDirective", + "scope": 16652, + "sourceUnit": 13151, + "src": "792:42:64", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 16452, + "name": "ComposableStablePoolRates", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 13150, + "src": "878:25:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolRates_$13150", + "typeString": "contract ComposableStablePoolRates" + } + }, + "id": 16453, + "nodeType": "InheritanceSpecifier", + "src": "878:25:64" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3860, + 3955, + 4136, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 13150, + 14193 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 16651, + "linearizedBaseContracts": [ + 16651, + 13150, + 14193, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "MockComposableStablePoolRates", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 16517, + "nodeType": "Block", + "src": "1781:64:64", + "statements": [] + }, + "id": 16518, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 16473, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16458, + "src": "1207:6:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 16474, + "name": "tokenRateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16461, + "src": "1215:18:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "id": 16475, + "name": "tokenRateCacheDurations", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16464, + "src": "1235:23:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 16472, + "name": "RatesParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12456, + "src": "1195:11:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RatesParams_$12456_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolRates.RatesParams storage pointer)" + } + }, + "id": 16476, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1195:64:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RatesParams_$12456_memory_ptr", + "typeString": "struct ComposableStablePoolRates.RatesParams memory" + } + } + ], + "id": 16477, + "modifierName": { + "id": 16471, + "name": "ComposableStablePoolRates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13150, + "src": "1169:25:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolRates_$13150_$", + "typeString": "type(contract ComposableStablePoolRates)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1169:91:64" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 16481, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16458, + "src": "1338:6:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 16483, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1353:4:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePoolRates_$16651", + "typeString": "contract MockComposableStablePoolRates" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePoolRates_$16651", + "typeString": "contract MockComposableStablePoolRates" + } + ], + "id": 16482, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "1346:6:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1346:12:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16480, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "1324:13:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 16485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1324:35:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 16486, + "name": "tokenRateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16461, + "src": "1361:18:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "id": 16487, + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16467, + "src": "1381:31:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + ], + "id": 16479, + "name": "StorageParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13175, + "src": "1310:13:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_StorageParams_$13175_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolStorage.StorageParams storage pointer)" + } + }, + "id": 16488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1310:103:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + } + ], + "id": 16489, + "modifierName": { + "id": 16478, + "name": "ComposableStablePoolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14193, + "src": "1269:27:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolStorage_$14193_$", + "typeString": "type(contract ComposableStablePoolStorage)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1269:154:64" + }, + { + "arguments": [ + { + "id": 16491, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16455, + "src": "1454:5:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + { + "expression": { + "expression": { + "id": 16492, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2021, + "src": "1473:6:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVault_$2021_$", + "typeString": "type(contract IVault)" + } + }, + "id": 16493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PoolSpecialization", + "nodeType": "MemberAccess", + "referencedDeclaration": 1680, + "src": "1473:25:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PoolSpecialization_$1680_$", + "typeString": "type(enum IVault.PoolSpecialization)" + } + }, + "id": 16494, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "GENERAL", + "nodeType": "MemberAccess", + "src": "1473:33:64", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + { + "hexValue": "4d6f636b537461626c65506f6f6c53746f72616765", + "id": 16495, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1520:23:64", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_36909a3924b7e963058ba7c6ba295f587afc86368077d8251295ee7ca28f3fad", + "typeString": "literal_string \"MockStablePoolStorage\"" + }, + "value": "MockStablePoolStorage" + }, + { + "hexValue": "4d4f434b5f425054", + "id": 16496, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1557:10:64", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cdbb9b422cf970c6eddcebbd9d809d55872436585090067ec6d05dcac338db2f", + "typeString": "literal_string \"MOCK_BPT\"" + }, + "value": "MOCK_BPT" + }, + { + "arguments": [ + { + "id": 16498, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16458, + "src": "1595:6:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 16500, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1610:4:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePoolRates_$16651", + "typeString": "contract MockComposableStablePoolRates" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePoolRates_$16651", + "typeString": "contract MockComposableStablePoolRates" + } + ], + "id": 16499, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "1603:6:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1603:12:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16497, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "1581:13:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 16502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1581:35:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 16509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 16506, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16458, + "src": "1644:6:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 16507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1644:13:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 16508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1660:1:64", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1644:17:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16505, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1630:13:64", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (address[] memory)" + }, + "typeName": { + "baseType": { + "id": 16503, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1634:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 16504, + "nodeType": "ArrayTypeName", + "src": "1634:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + } + }, + "id": 16510, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1630:32:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + { + "hexValue": "31653132", + "id": 16511, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1676:4:64", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000_by_1", + "typeString": "int_const 1000000000000" + }, + "value": "1e12" + }, + { + "hexValue": "30", + "id": 16512, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1731:1:64", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 16513, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1746:1:64", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "id": 16514, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16469, + "src": "1761:5:64", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 16515, + "modifierName": { + "id": 16490, + "name": "BasePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3860, + "src": "1432:8:64", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePool_$3860_$", + "typeString": "type(contract BasePool)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1432:344:64" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16470, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16455, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 16518, + "src": "931:12:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 16454, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "931:6:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16458, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 16518, + "src": "953:22:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 16456, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "953:6:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 16457, + "nodeType": "ArrayTypeName", + "src": "953:8:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16461, + "mutability": "mutable", + "name": "tokenRateProviders", + "nodeType": "VariableDeclaration", + "scope": 16518, + "src": "985:41:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 16459, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "985:13:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 16460, + "nodeType": "ArrayTypeName", + "src": "985:15:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16464, + "mutability": "mutable", + "name": "tokenRateCacheDurations", + "nodeType": "VariableDeclaration", + "scope": 16518, + "src": "1036:40:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16462, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1036:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16463, + "nodeType": "ArrayTypeName", + "src": "1036:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16467, + "mutability": "mutable", + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "VariableDeclaration", + "scope": 16518, + "src": "1086:45:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 16465, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1086:4:64", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 16466, + "nodeType": "ArrayTypeName", + "src": "1086:6:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16469, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 16518, + "src": "1141:13:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16468, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1141:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "921:239:64" + }, + "returnParameters": { + "id": 16516, + "nodeType": "ParameterList", + "parameters": [], + "src": "1781:0:64" + }, + "scope": 16651, + "src": "910:935:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 16524, + "nodeType": "Block", + "src": "1898:46:64", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 16521, + "name": "_cacheTokenRatesIfNecessary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12889, + "src": "1908:27:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 16522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1908:29:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16523, + "nodeType": "ExpressionStatement", + "src": "1908:29:64" + } + ] + }, + "functionSelector": "d329c63d", + "id": 16525, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "cacheTokenRatesIfNecessary", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16519, + "nodeType": "ParameterList", + "parameters": [], + "src": "1886:2:64" + }, + "returnParameters": { + "id": 16520, + "nodeType": "ParameterList", + "parameters": [], + "src": "1898:0:64" + }, + "scope": 16651, + "src": "1851:93:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16536, + "nodeType": "Block", + "src": "2008:66:64", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 16532, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16527, + "src": "2060:5:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16531, + "name": "_getTokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13755, + "src": "2045:14:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IERC20_$1152_$returns$_t_uint256_$", + "typeString": "function (contract IERC20) view returns (uint256)" + } + }, + "id": 16533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2045:21:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16530, + "name": "_cacheTokenRateIfNecessary", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12938, + "src": "2018:26:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 16534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2018:49:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16535, + "nodeType": "ExpressionStatement", + "src": "2018:49:64" + } + ] + }, + "functionSelector": "0664f37b", + "id": 16537, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "cacheTokenRateIfNecessary", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16528, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16527, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 16537, + "src": "1985:12:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + }, + "typeName": { + "id": 16526, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "1985:6:64", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "visibility": "internal" + } + ], + "src": "1984:14:64" + }, + "returnParameters": { + "id": 16529, + "nodeType": "ParameterList", + "parameters": [], + "src": "2008:0:64" + }, + "scope": 16651, + "src": "1950:124:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16543, + "nodeType": "Block", + "src": "2115:34:64", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 16540, + "name": "_updateOldRates", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 12967, + "src": "2125:15:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 16541, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2125:17:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16542, + "nodeType": "ExpressionStatement", + "src": "2125:17:64" + } + ] + }, + "functionSelector": "aa51a570", + "id": 16544, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updateOldRates", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16538, + "nodeType": "ParameterList", + "parameters": [], + "src": "2103:2:64" + }, + "returnParameters": { + "id": 16539, + "nodeType": "ParameterList", + "parameters": [], + "src": "2115:0:64" + }, + "scope": 16651, + "src": "2080:69:64", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16560, + "nodeType": "Block", + "src": "2304:73:64", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16556, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16547, + "src": "2342:8:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16557, + "name": "ignoreExemptFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16549, + "src": "2352:17:64", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 16555, + "name": "_getAdjustedBalances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13049, + "src": "2321:20:64", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bool_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,bool) view returns (uint256[] memory)" + } + }, + "id": 16558, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2321:49:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 16554, + "id": 16559, + "nodeType": "Return", + "src": "2314:56:64" + } + ] + }, + "functionSelector": "bb2a71ac", + "id": 16561, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAdjustedBalances", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16550, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16547, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 16561, + "src": "2184:25:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16545, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2184:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16546, + "nodeType": "ArrayTypeName", + "src": "2184:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16549, + "mutability": "mutable", + "name": "ignoreExemptFlags", + "nodeType": "VariableDeclaration", + "scope": 16561, + "src": "2211:22:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 16548, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2211:4:64", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2183:51:64" + }, + "returnParameters": { + "id": 16554, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16553, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16561, + "src": "2282:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16551, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2282:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16552, + "nodeType": "ArrayTypeName", + "src": "2282:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2281:18:64" + }, + "scope": 16651, + "src": "2155:222:64", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 3338 + ], + "body": { + "id": 16585, + "nodeType": "Block", + "src": "2574:42:64", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16582, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2591:17:64", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16581, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "2584:6:64", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2584:25:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16584, + "nodeType": "ExpressionStatement", + "src": "2584:25:64" + } + ] + }, + "id": 16586, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onInitializePool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16574, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2529:8:64" + }, + "parameters": { + "id": 16573, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16563, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2419:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16562, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2419:7:64", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16565, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2436:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16564, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2436:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16567, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2453:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16566, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2453:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16570, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2470:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16568, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2470:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16569, + "nodeType": "ArrayTypeName", + "src": "2470:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16572, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2496:12:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16571, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2496:5:64", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2409:105:64" + }, + "returnParameters": { + "id": 16580, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16576, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2547:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16575, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2547:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16579, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16586, + "src": "2556:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16577, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2556:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16578, + "nodeType": "ArrayTypeName", + "src": "2556:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2546:27:64" + }, + "scope": 16651, + "src": "2383:233:64", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3365 + ], + "body": { + "id": 16617, + "nodeType": "Block", + "src": "2867:42:64", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16614, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2884:17:64", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16613, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "2877:6:64", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2877:25:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16616, + "nodeType": "ExpressionStatement", + "src": "2877:25:64" + } + ] + }, + "id": 16618, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onJoinPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16606, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2822:8:64" + }, + "parameters": { + "id": 16605, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16588, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2652:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16587, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2652:7:64", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16590, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2669:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16589, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2669:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16592, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2686:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16591, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2686:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16595, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2703:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16593, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2703:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16594, + "nodeType": "ArrayTypeName", + "src": "2703:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16597, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2729:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16596, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2729:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16599, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2746:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16598, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2746:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16602, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2763:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16600, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2763:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16601, + "nodeType": "ArrayTypeName", + "src": "2763:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16604, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2789:12:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16603, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2789:5:64", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2642:165:64" + }, + "returnParameters": { + "id": 16612, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16608, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2840:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16607, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2840:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16611, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16618, + "src": "2849:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16609, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2849:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16610, + "nodeType": "ArrayTypeName", + "src": "2849:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2839:27:64" + }, + "scope": 16651, + "src": "2622:287:64", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3392 + ], + "body": { + "id": 16649, + "nodeType": "Block", + "src": "3160:42:64", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3177:17:64", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16645, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "3170:6:64", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3170:25:64", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16648, + "nodeType": "ExpressionStatement", + "src": "3170:25:64" + } + ] + }, + "id": 16650, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onExitPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16638, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3115:8:64" + }, + "parameters": { + "id": 16637, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16620, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "2945:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16619, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2945:7:64", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16622, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "2962:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16621, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2962:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16624, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "2979:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16623, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2979:7:64", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16627, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "2996:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16625, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2996:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16626, + "nodeType": "ArrayTypeName", + "src": "2996:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16629, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "3022:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16628, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3022:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16631, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "3039:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16630, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3039:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16634, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "3056:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16632, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3056:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16633, + "nodeType": "ArrayTypeName", + "src": "3056:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16636, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "3082:12:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16635, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3082:5:64", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2935:165:64" + }, + "returnParameters": { + "id": 16644, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16640, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "3133:7:64", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16639, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3133:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16643, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16650, + "src": "3142:16:64", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16641, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3142:7:64", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16642, + "nodeType": "ArrayTypeName", + "src": "3142:9:64", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "3132:27:64" + }, + "scope": 16651, + "src": "2915:287:64", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 16652, + "src": "836:2368:64" + } + ], + "src": "688:2517:64" + }, + "id": 64 + }, + "contracts/test/MockComposableStablePoolStorage.sol": { + "ast": { + "absolutePath": "contracts/test/MockComposableStablePoolStorage.sol", + "exportedSymbols": { + "MockComposableStablePoolStorage": [ + 17005 + ] + }, + "id": 17006, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 16653, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:65" + }, + { + "id": 16654, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:65" + }, + { + "absolutePath": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "file": "@balancer-labs/v2-solidity-utils/contracts/helpers/ERC20Helpers.sol", + "id": 16655, + "nodeType": "ImportDirective", + "scope": 17006, + "sourceUnit": 5883, + "src": "747:77:65", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/ComposableStablePoolStorage.sol", + "file": "../ComposableStablePoolStorage.sol", + "id": 16656, + "nodeType": "ImportDirective", + "scope": 17006, + "sourceUnit": 14194, + "src": "826:44:65", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 16657, + "name": "ComposableStablePoolStorage", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 14193, + "src": "916:27:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ComposableStablePoolStorage_$14193", + "typeString": "contract ComposableStablePoolStorage" + } + }, + "id": 16658, + "nodeType": "InheritanceSpecifier", + "src": "916:27:65" + } + ], + "contractDependencies": [ + 409, + 451, + 1022, + 1040, + 1059, + 1152, + 1188, + 1425, + 1491, + 2230, + 3860, + 3955, + 4136, + 5117, + 5552, + 6282, + 8935, + 9426, + 9535, + 14193 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 17005, + "linearizedBaseContracts": [ + 17005, + 14193, + 3860, + 4136, + 6282, + 1059, + 2230, + 3955, + 5117, + 1022, + 451, + 9535, + 5552, + 8935, + 1040, + 1188, + 9426, + 1152, + 409, + 1425, + 1491 + ], + "name": "MockComposableStablePoolStorage", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 16713, + "nodeType": "Block", + "src": "1798:64:65", + "statements": [] + }, + "id": 16714, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 16674, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16663, + "src": "1241:6:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 16676, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1256:4:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePoolStorage_$17005", + "typeString": "contract MockComposableStablePoolStorage" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePoolStorage_$17005", + "typeString": "contract MockComposableStablePoolStorage" + } + ], + "id": 16675, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "1249:6:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1249:12:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16673, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "1227:13:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 16678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1227:35:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "id": 16679, + "name": "tokenRateProviders", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16666, + "src": "1300:18:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + } + }, + { + "id": 16680, + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16669, + "src": "1369:31:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[] memory" + }, + { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + ], + "id": 16672, + "name": "StorageParams", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13175, + "src": "1177:13:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_StorageParams_$13175_storage_ptr_$", + "typeString": "type(struct ComposableStablePoolStorage.StorageParams storage pointer)" + } + }, + "id": 16681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "registeredTokens", + "tokenRateProviders", + "exemptFromYieldProtocolFeeFlags" + ], + "nodeType": "FunctionCall", + "src": "1177:238:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_StorageParams_$13175_memory_ptr", + "typeString": "struct ComposableStablePoolStorage.StorageParams memory" + } + } + ], + "id": 16682, + "modifierName": { + "id": 16671, + "name": "ComposableStablePoolStorage", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14193, + "src": "1136:27:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ComposableStablePoolStorage_$14193_$", + "typeString": "type(contract ComposableStablePoolStorage)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1136:289:65" + }, + { + "arguments": [ + { + "id": 16684, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16660, + "src": "1456:5:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + { + "expression": { + "expression": { + "id": 16685, + "name": "IVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2021, + "src": "1475:6:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IVault_$2021_$", + "typeString": "type(contract IVault)" + } + }, + "id": 16686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "PoolSpecialization", + "nodeType": "MemberAccess", + "referencedDeclaration": 1680, + "src": "1475:25:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_PoolSpecialization_$1680_$", + "typeString": "type(enum IVault.PoolSpecialization)" + } + }, + "id": 16687, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "GENERAL", + "nodeType": "MemberAccess", + "src": "1475:33:65", + "typeDescriptions": { + "typeIdentifier": "t_enum$_PoolSpecialization_$1680", + "typeString": "enum IVault.PoolSpecialization" + } + }, + { + "hexValue": "4d6f636b436f6d706f7361626c65537461626c65506f6f6c53746f72616765", + "id": 16688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1522:33:65", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c241abfbb24e7b46e082fd34f67a43e0a75042d237e91651ca5e5b56f2733a2f", + "typeString": "literal_string \"MockComposableStablePoolStorage\"" + }, + "value": "MockComposableStablePoolStorage" + }, + { + "hexValue": "4d4f434b5f425054", + "id": 16689, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1569:10:65", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cdbb9b422cf970c6eddcebbd9d809d55872436585090067ec6d05dcac338db2f", + "typeString": "literal_string \"MOCK_BPT\"" + }, + "value": "MOCK_BPT" + }, + { + "arguments": [ + { + "id": 16691, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16663, + "src": "1607:6:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "id": 16693, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1622:4:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockComposableStablePoolStorage_$17005", + "typeString": "contract MockComposableStablePoolStorage" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockComposableStablePoolStorage_$17005", + "typeString": "contract MockComposableStablePoolStorage" + } + ], + "id": 16692, + "name": "IERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "1615:6:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20_$1152_$", + "typeString": "type(contract IERC20)" + } + }, + "id": 16694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1615:12:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + }, + { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + ], + "id": 16690, + "name": "_insertSorted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5714, + "src": "1593:13:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$_t_contract$_IERC20_$1152_$returns$_t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr_$", + "typeString": "function (contract IERC20[] memory,contract IERC20) pure returns (contract IERC20[] memory)" + } + }, + "id": 16695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1593:35:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 16702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 16699, + "name": "tokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16663, + "src": "1656:6:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 16700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1656:13:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 16701, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1672:1:65", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "1656:17:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16698, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "1642:13:65", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (address[] memory)" + }, + "typeName": { + "baseType": { + "id": 16696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1646:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 16697, + "nodeType": "ArrayTypeName", + "src": "1646:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + } + }, + "id": 16703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1642:32:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + { + "hexValue": "31653132", + "id": 16704, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1688:4:65", + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000_by_1", + "typeString": "int_const 1000000000000" + }, + "value": "1e12" + }, + { + "hexValue": "30", + "id": 16705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1743:1:65", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 16706, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1758:1:65", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "arguments": [ + { + "hexValue": "30", + "id": 16709, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1781:1:65", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 16708, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1773:7:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 16707, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1773:7:65", + "typeDescriptions": {} + } + }, + "id": 16710, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1773:10:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "id": 16711, + "modifierName": { + "id": 16683, + "name": "BasePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3860, + "src": "1434:8:65", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePool_$3860_$", + "typeString": "type(contract BasePool)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1434:359:65" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16670, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16660, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 16714, + "src": "971:12:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 16659, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "971:6:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16663, + "mutability": "mutable", + "name": "tokens", + "nodeType": "VariableDeclaration", + "scope": 16714, + "src": "993:22:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "id": 16661, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1152, + "src": "993:6:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$1152", + "typeString": "contract IERC20" + } + }, + "id": 16662, + "nodeType": "ArrayTypeName", + "src": "993:8:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$1152_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16666, + "mutability": "mutable", + "name": "tokenRateProviders", + "nodeType": "VariableDeclaration", + "scope": 16714, + "src": "1025:41:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_memory_ptr", + "typeString": "contract IRateProvider[]" + }, + "typeName": { + "baseType": { + "id": 16664, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "1025:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "id": 16665, + "nodeType": "ArrayTypeName", + "src": "1025:15:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRateProvider_$428_$dyn_storage_ptr", + "typeString": "contract IRateProvider[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16669, + "mutability": "mutable", + "name": "exemptFromYieldProtocolFeeFlags", + "nodeType": "VariableDeclaration", + "scope": 16714, + "src": "1076:45:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 16667, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1076:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 16668, + "nodeType": "ArrayTypeName", + "src": "1076:6:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + } + ], + "src": "961:166:65" + }, + "returnParameters": { + "id": 16712, + "nodeType": "ParameterList", + "parameters": [], + "src": "1798:0:65" + }, + "scope": 17005, + "src": "950:912:65", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 16725, + "nodeType": "Block", + "src": "1937:44:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16722, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16716, + "src": "1968:5:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16721, + "name": "_skipBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13797, + "src": "1954:13:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 16723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1954:20:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16720, + "id": 16724, + "nodeType": "Return", + "src": "1947:27:65" + } + ] + }, + "functionSelector": "dd93a2c9", + "id": 16726, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "skipBptIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16717, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16716, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 16726, + "src": "1890:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16715, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1890:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1889:15:65" + }, + "returnParameters": { + "id": 16720, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16719, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16726, + "src": "1928:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16718, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1928:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1927:9:65" + }, + "scope": 17005, + "src": "1868:113:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16737, + "nodeType": "Block", + "src": "2055:43:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16734, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16728, + "src": "2085:5:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16733, + "name": "_addBptIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13911, + "src": "2072:12:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 16735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2072:19:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16732, + "id": 16736, + "nodeType": "Return", + "src": "2065:26:65" + } + ] + }, + "functionSelector": "f4e81884", + "id": 16738, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "addBptIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16729, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16728, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 16738, + "src": "2008:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16727, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2008:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2007:15:65" + }, + "returnParameters": { + "id": 16732, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16731, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16738, + "src": "2046:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16730, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2046:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2045:9:65" + }, + "scope": 17005, + "src": "1987:111:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16751, + "nodeType": "Block", + "src": "2192:45:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16748, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16741, + "src": "2222:7:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "id": 16747, + "name": "_dropBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13853, + "src": "2209:12:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory) view returns (uint256[] memory)" + } + }, + "id": 16749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2209:21:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 16746, + "id": 16750, + "nodeType": "Return", + "src": "2202:28:65" + } + ] + }, + "functionSelector": "42e68aad", + "id": 16752, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "dropBptItem", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16742, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16741, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 16752, + "src": "2125:24:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16739, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2125:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16740, + "nodeType": "ArrayTypeName", + "src": "2125:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2124:26:65" + }, + "returnParameters": { + "id": 16746, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16745, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16752, + "src": "2174:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2174:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16744, + "nodeType": "ArrayTypeName", + "src": "2174:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2173:18:65" + }, + "scope": 17005, + "src": "2104:133:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16768, + "nodeType": "Block", + "src": "2392:55:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16764, + "name": "amounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16755, + "src": "2421:7:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 16765, + "name": "bptAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16757, + "src": "2430:9:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16763, + "name": "_addBptItem", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13970, + "src": "2409:11:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256[] memory,uint256) view returns (uint256[] memory)" + } + }, + "id": 16766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2409:31:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "functionReturnParameters": 16762, + "id": 16767, + "nodeType": "Return", + "src": "2402:38:65" + } + ] + }, + "functionSelector": "14841db4", + "id": 16769, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "addBptItem", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16758, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16755, + "mutability": "mutable", + "name": "amounts", + "nodeType": "VariableDeclaration", + "scope": 16769, + "src": "2263:24:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2263:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16754, + "nodeType": "ArrayTypeName", + "src": "2263:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16757, + "mutability": "mutable", + "name": "bptAmount", + "nodeType": "VariableDeclaration", + "scope": 16769, + "src": "2289:17:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16756, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2289:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2262:45:65" + }, + "returnParameters": { + "id": 16762, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16761, + "mutability": "mutable", + "name": "amountsWithBpt", + "nodeType": "VariableDeclaration", + "scope": 16769, + "src": "2355:31:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16759, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2355:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16760, + "nodeType": "ArrayTypeName", + "src": "2355:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2354:33:65" + }, + "scope": 17005, + "src": "2243:204:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16776, + "nodeType": "Block", + "src": "2519:38:65", + "statements": [ + { + "expression": { + "id": 16774, + "name": "_rateProvider0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13208, + "src": "2536:14:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16773, + "id": 16775, + "nodeType": "Return", + "src": "2529:21:65" + } + ] + }, + "functionSelector": "bb2478d4", + "id": 16777, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16770, + "nodeType": "ParameterList", + "parameters": [], + "src": "2478:2:65" + }, + "returnParameters": { + "id": 16773, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16772, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16777, + "src": "2504:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16771, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2504:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "2503:15:65" + }, + "scope": 17005, + "src": "2453:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16784, + "nodeType": "Block", + "src": "2629:38:65", + "statements": [ + { + "expression": { + "id": 16782, + "name": "_rateProvider1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13210, + "src": "2646:14:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16781, + "id": 16783, + "nodeType": "Return", + "src": "2639:21:65" + } + ] + }, + "functionSelector": "a8e59c7c", + "id": 16785, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16778, + "nodeType": "ParameterList", + "parameters": [], + "src": "2588:2:65" + }, + "returnParameters": { + "id": 16781, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16780, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16785, + "src": "2614:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16779, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2614:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "2613:15:65" + }, + "scope": 17005, + "src": "2563:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16792, + "nodeType": "Block", + "src": "2739:38:65", + "statements": [ + { + "expression": { + "id": 16790, + "name": "_rateProvider2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13212, + "src": "2756:14:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16789, + "id": 16791, + "nodeType": "Return", + "src": "2749:21:65" + } + ] + }, + "functionSelector": "98411490", + "id": 16793, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16786, + "nodeType": "ParameterList", + "parameters": [], + "src": "2698:2:65" + }, + "returnParameters": { + "id": 16789, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16788, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16793, + "src": "2724:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16787, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2724:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "2723:15:65" + }, + "scope": 17005, + "src": "2673:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16800, + "nodeType": "Block", + "src": "2849:38:65", + "statements": [ + { + "expression": { + "id": 16798, + "name": "_rateProvider3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13214, + "src": "2866:14:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16797, + "id": 16799, + "nodeType": "Return", + "src": "2859:21:65" + } + ] + }, + "functionSelector": "1d936c67", + "id": 16801, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16794, + "nodeType": "ParameterList", + "parameters": [], + "src": "2808:2:65" + }, + "returnParameters": { + "id": 16797, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16796, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16801, + "src": "2834:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16795, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2834:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "2833:15:65" + }, + "scope": 17005, + "src": "2783:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16808, + "nodeType": "Block", + "src": "2959:38:65", + "statements": [ + { + "expression": { + "id": 16806, + "name": "_rateProvider4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13216, + "src": "2976:14:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16805, + "id": 16807, + "nodeType": "Return", + "src": "2969:21:65" + } + ] + }, + "functionSelector": "3eb3ed29", + "id": 16809, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16802, + "nodeType": "ParameterList", + "parameters": [], + "src": "2918:2:65" + }, + "returnParameters": { + "id": 16805, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16804, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16809, + "src": "2944:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16803, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "2944:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "2943:15:65" + }, + "scope": 17005, + "src": "2893:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16816, + "nodeType": "Block", + "src": "3069:38:65", + "statements": [ + { + "expression": { + "id": 16814, + "name": "_rateProvider5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13218, + "src": "3086:14:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16813, + "id": 16815, + "nodeType": "Return", + "src": "3079:21:65" + } + ] + }, + "functionSelector": "c9e51c90", + "id": 16817, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16810, + "nodeType": "ParameterList", + "parameters": [], + "src": "3028:2:65" + }, + "returnParameters": { + "id": 16813, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16812, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16817, + "src": "3054:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16811, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3054:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "3053:15:65" + }, + "scope": 17005, + "src": "3003:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16824, + "nodeType": "Block", + "src": "3174:39:65", + "statements": [ + { + "expression": { + "id": 16822, + "name": "_scalingFactor0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13196, + "src": "3191:15:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16821, + "id": 16823, + "nodeType": "Return", + "src": "3184:22:65" + } + ] + }, + "functionSelector": "e3c6137d", + "id": 16825, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactor0", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16818, + "nodeType": "ParameterList", + "parameters": [], + "src": "3139:2:65" + }, + "returnParameters": { + "id": 16821, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16820, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16825, + "src": "3165:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16819, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3165:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3164:9:65" + }, + "scope": 17005, + "src": "3113:100:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16832, + "nodeType": "Block", + "src": "3280:39:65", + "statements": [ + { + "expression": { + "id": 16830, + "name": "_scalingFactor1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13198, + "src": "3297:15:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16829, + "id": 16831, + "nodeType": "Return", + "src": "3290:22:65" + } + ] + }, + "functionSelector": "1a16a923", + "id": 16833, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactor1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16826, + "nodeType": "ParameterList", + "parameters": [], + "src": "3245:2:65" + }, + "returnParameters": { + "id": 16829, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16828, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16833, + "src": "3271:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16827, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3271:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3270:9:65" + }, + "scope": 17005, + "src": "3219:100:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16840, + "nodeType": "Block", + "src": "3386:39:65", + "statements": [ + { + "expression": { + "id": 16838, + "name": "_scalingFactor2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13200, + "src": "3403:15:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16837, + "id": 16839, + "nodeType": "Return", + "src": "3396:22:65" + } + ] + }, + "functionSelector": "064ca1b8", + "id": 16841, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactor2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16834, + "nodeType": "ParameterList", + "parameters": [], + "src": "3351:2:65" + }, + "returnParameters": { + "id": 16837, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16836, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16841, + "src": "3377:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16835, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3377:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3376:9:65" + }, + "scope": 17005, + "src": "3325:100:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16848, + "nodeType": "Block", + "src": "3492:39:65", + "statements": [ + { + "expression": { + "id": 16846, + "name": "_scalingFactor3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13202, + "src": "3509:15:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16845, + "id": 16847, + "nodeType": "Return", + "src": "3502:22:65" + } + ] + }, + "functionSelector": "b2469446", + "id": 16849, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactor3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16842, + "nodeType": "ParameterList", + "parameters": [], + "src": "3457:2:65" + }, + "returnParameters": { + "id": 16845, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16844, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16849, + "src": "3483:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16843, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3483:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3482:9:65" + }, + "scope": 17005, + "src": "3431:100:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16856, + "nodeType": "Block", + "src": "3598:39:65", + "statements": [ + { + "expression": { + "id": 16854, + "name": "_scalingFactor4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13204, + "src": "3615:15:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16853, + "id": 16855, + "nodeType": "Return", + "src": "3608:22:65" + } + ] + }, + "functionSelector": "eaecb2b8", + "id": 16857, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactor4", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16850, + "nodeType": "ParameterList", + "parameters": [], + "src": "3563:2:65" + }, + "returnParameters": { + "id": 16853, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16852, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16857, + "src": "3589:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3589:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3588:9:65" + }, + "scope": 17005, + "src": "3537:100:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16864, + "nodeType": "Block", + "src": "3704:39:65", + "statements": [ + { + "expression": { + "id": 16862, + "name": "_scalingFactor5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 13206, + "src": "3721:15:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 16861, + "id": 16863, + "nodeType": "Return", + "src": "3714:22:65" + } + ] + }, + "functionSelector": "21e63146", + "id": 16865, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScalingFactor5", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16858, + "nodeType": "ParameterList", + "parameters": [], + "src": "3669:2:65" + }, + "returnParameters": { + "id": 16861, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16860, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16865, + "src": "3695:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16859, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3695:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3694:9:65" + }, + "scope": 17005, + "src": "3643:100:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16876, + "nodeType": "Block", + "src": "3827:47:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16873, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16867, + "src": "3861:5:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16872, + "name": "_getRateProvider", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14115, + "src": "3844:16:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_contract$_IRateProvider_$428_$", + "typeString": "function (uint256) view returns (contract IRateProvider)" + } + }, + "id": 16874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3844:23:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "functionReturnParameters": 16871, + "id": 16875, + "nodeType": "Return", + "src": "3837:30:65" + } + ] + }, + "functionSelector": "48ade7b0", + "id": 16877, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRateProvider", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16868, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16867, + "mutability": "mutable", + "name": "index", + "nodeType": "VariableDeclaration", + "scope": 16877, + "src": "3774:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16866, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3774:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3773:15:65" + }, + "returnParameters": { + "id": 16871, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16870, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16877, + "src": "3812:13:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + }, + "typeName": { + "id": 16869, + "name": "IRateProvider", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 428, + "src": "3812:13:65", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRateProvider_$428", + "typeString": "contract IRateProvider" + } + }, + "visibility": "internal" + } + ], + "src": "3811:15:65" + }, + "scope": 17005, + "src": "3749:125:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16888, + "nodeType": "Block", + "src": "4064:70:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 16885, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 16879, + "src": "4116:10:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 16884, + "name": "_isTokenExemptFromYieldProtocolFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14177, + "src": "4081:34:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 16886, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4081:46:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 16883, + "id": 16887, + "nodeType": "Return", + "src": "4074:53:65" + } + ] + }, + "functionSelector": "0a3f0f60", + "id": 16889, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isTokenExemptFromYieldProtocolFeeByIndex", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16880, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16879, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 16889, + "src": "4015:18:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16878, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4015:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4014:20:65" + }, + "returnParameters": { + "id": 16883, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16882, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16889, + "src": "4058:4:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 16881, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4058:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4057:6:65" + }, + "scope": 17005, + "src": "3965:169:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16897, + "nodeType": "Block", + "src": "4199:45:65", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 16894, + "name": "_areAllTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14140, + "src": "4216:19:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 16895, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4216:21:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 16893, + "id": 16896, + "nodeType": "Return", + "src": "4209:28:65" + } + ] + }, + "functionSelector": "d25fc61a", + "id": 16898, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "areAllTokensExempt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16890, + "nodeType": "ParameterList", + "parameters": [], + "src": "4167:2:65" + }, + "returnParameters": { + "id": 16893, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16892, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16898, + "src": "4193:4:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 16891, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4193:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4192:6:65" + }, + "scope": 17005, + "src": "4140:104:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 16906, + "nodeType": "Block", + "src": "4308:44:65", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 16903, + "name": "_areNoTokensExempt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 14149, + "src": "4325:18:65", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", + "typeString": "function () view returns (bool)" + } + }, + "id": 16904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4325:20:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 16902, + "id": 16905, + "nodeType": "Return", + "src": "4318:27:65" + } + ] + }, + "functionSelector": "9a3b9cce", + "id": 16907, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "areNoTokensExempt", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 16899, + "nodeType": "ParameterList", + "parameters": [], + "src": "4276:2:65" + }, + "returnParameters": { + "id": 16902, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16901, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16907, + "src": "4302:4:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 16900, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4302:4:65", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4301:6:65" + }, + "scope": 17005, + "src": "4250:102:65", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 3519 + ], + "body": { + "id": 16914, + "nodeType": "Block", + "src": "4469:2:65", + "statements": [] + }, + "id": 16915, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_scalingFactors", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16909, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4433:8:65" + }, + "parameters": { + "id": 16908, + "nodeType": "ParameterList", + "parameters": [], + "src": "4408:2:65" + }, + "returnParameters": { + "id": 16913, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16912, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16915, + "src": "4451:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16910, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4451:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16911, + "nodeType": "ArrayTypeName", + "src": "4451:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4450:18:65" + }, + "scope": 17005, + "src": "4384:87:65", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3338 + ], + "body": { + "id": 16939, + "nodeType": "Block", + "src": "4668:42:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16936, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4685:17:65", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16935, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "4678:6:65", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4678:25:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16938, + "nodeType": "ExpressionStatement", + "src": "4678:25:65" + } + ] + }, + "id": 16940, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onInitializePool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16928, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4623:8:65" + }, + "parameters": { + "id": 16927, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16917, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4513:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16916, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4513:7:65", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16919, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4530:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16918, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4530:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16921, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4547:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16920, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4547:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16924, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4564:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16922, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4564:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16923, + "nodeType": "ArrayTypeName", + "src": "4564:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16926, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4590:12:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16925, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4590:5:65", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4503:105:65" + }, + "returnParameters": { + "id": 16934, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16930, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4641:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16929, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4641:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16933, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16940, + "src": "4650:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16931, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4650:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16932, + "nodeType": "ArrayTypeName", + "src": "4650:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4640:27:65" + }, + "scope": 17005, + "src": "4477:233:65", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3365 + ], + "body": { + "id": 16971, + "nodeType": "Block", + "src": "4961:42:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 16968, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4978:17:65", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16967, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "4971:6:65", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 16969, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4971:25:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 16970, + "nodeType": "ExpressionStatement", + "src": "4971:25:65" + } + ] + }, + "id": 16972, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onJoinPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16960, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4916:8:65" + }, + "parameters": { + "id": 16959, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16942, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4746:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16941, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4746:7:65", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16944, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4763:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16943, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4763:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16946, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4780:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16945, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4780:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16949, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4797:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16947, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4797:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16948, + "nodeType": "ArrayTypeName", + "src": "4797:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16951, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4823:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16950, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4823:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16953, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4840:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16952, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4840:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16956, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4857:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16954, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4857:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16955, + "nodeType": "ArrayTypeName", + "src": "4857:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16958, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4883:12:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16957, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4883:5:65", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4736:165:65" + }, + "returnParameters": { + "id": 16966, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16962, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4934:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16961, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4934:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16965, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 16972, + "src": "4943:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16963, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4943:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16964, + "nodeType": "ArrayTypeName", + "src": "4943:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4933:27:65" + }, + "scope": 17005, + "src": "4716:287:65", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "baseFunctions": [ + 3392 + ], + "body": { + "id": 17003, + "nodeType": "Block", + "src": "5254:42:65", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "4e4f545f494d504c454d454e544544", + "id": 17000, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5271:17:65", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + }, + "value": "NOT_IMPLEMENTED" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_f3e52d4895d0d64bf1f72fb73bc38a5ddfdac127eb04e917367bdd2b40828959", + "typeString": "literal_string \"NOT_IMPLEMENTED\"" + } + ], + "id": 16999, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -19, + -19 + ], + "referencedDeclaration": -19, + "src": "5264:6:65", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 17001, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5264:25:65", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 17002, + "nodeType": "ExpressionStatement", + "src": "5264:25:65" + } + ] + }, + "id": 17004, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_onExitPool", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 16992, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5209:8:65" + }, + "parameters": { + "id": 16991, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16974, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5039:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 16973, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5039:7:65", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16976, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5056:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16975, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5056:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16978, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5073:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 16977, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5073:7:65", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16981, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5090:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16979, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5090:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16980, + "nodeType": "ArrayTypeName", + "src": "5090:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16983, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5116:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16982, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5116:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16985, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5133:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16984, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5133:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16988, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5150:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16986, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5150:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16987, + "nodeType": "ArrayTypeName", + "src": "5150:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16990, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5176:12:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 16989, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5176:5:65", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5029:165:65" + }, + "returnParameters": { + "id": 16998, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 16994, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5227:7:65", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 16993, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5227:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 16997, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17004, + "src": "5236:16:65", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 16995, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5236:7:65", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 16996, + "nodeType": "ArrayTypeName", + "src": "5236:9:65", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5226:27:65" + }, + "scope": 17005, + "src": "5009:287:65", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 17006, + "src": "872:4426:65" + } + ], + "src": "688:4611:65" + }, + "id": 65 + }, + "contracts/test/MockStableMath.sol": { + "ast": { + "absolutePath": "contracts/test/MockStableMath.sol", + "exportedSymbols": { + "MockStableMath": [ + 17235 + ] + }, + "id": 17236, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 17007, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:66" + }, + { + "absolutePath": "contracts/StableMath.sol", + "file": "../StableMath.sol", + "id": 17008, + "nodeType": "ImportDirective", + "scope": 17236, + "sourceUnit": 15488, + "src": "713:27:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 17235, + "linearizedBaseContracts": [ + 17235 + ], + "name": "MockStableMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 17024, + "nodeType": "Block", + "src": "863:69:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17020, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17010, + "src": "911:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17021, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17013, + "src": "916:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 17018, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "880:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17019, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "880:30:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 17022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "880:45:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17017, + "id": 17023, + "nodeType": "Return", + "src": "873:52:66" + } + ] + }, + "functionSelector": "155bfcb8", + "id": 17025, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "invariant", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17010, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17025, + "src": "791:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17009, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "791:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17013, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17025, + "src": "804:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17011, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "804:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17012, + "nodeType": "ArrayTypeName", + "src": "804:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "790:40:66" + }, + "returnParameters": { + "id": 17017, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17016, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17025, + "src": "854:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17015, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "854:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "853:9:66" + }, + "scope": 17235, + "src": "772:160:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17055, + "nodeType": "Block", + "src": "1144:278:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17043, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17027, + "src": "1217:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17044, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17030, + "src": "1238:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17045, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17032, + "src": "1264:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17046, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17034, + "src": "1294:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17047, + "name": "tokenAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17036, + "src": "1325:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 17050, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17027, + "src": "1387:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17051, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17030, + "src": "1392:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 17048, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "1356:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "1356:30:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 17052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1356:45:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17041, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "1173:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcOutGivenIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 14460, + "src": "1173:26:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1173:242:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17040, + "id": 17054, + "nodeType": "Return", + "src": "1154:261:66" + } + ] + }, + "functionSelector": "fe2dd7ba", + "id": 17056, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "outGivenIn", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17037, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17027, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17056, + "src": "967:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17026, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "967:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17030, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17056, + "src": "988:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17028, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "988:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17029, + "nodeType": "ArrayTypeName", + "src": "988:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17032, + "mutability": "mutable", + "name": "tokenIndexIn", + "nodeType": "VariableDeclaration", + "scope": 17056, + "src": "1023:20:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17031, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1023:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17034, + "mutability": "mutable", + "name": "tokenIndexOut", + "nodeType": "VariableDeclaration", + "scope": 17056, + "src": "1053:21:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17033, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1053:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17036, + "mutability": "mutable", + "name": "tokenAmountIn", + "nodeType": "VariableDeclaration", + "scope": 17056, + "src": "1084:21:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17035, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1084:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "957:154:66" + }, + "returnParameters": { + "id": 17040, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17039, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17056, + "src": "1135:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17038, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1135:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1134:9:66" + }, + "scope": 17235, + "src": "938:484:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17086, + "nodeType": "Block", + "src": "1635:279:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17074, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17058, + "src": "1708:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17075, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17061, + "src": "1729:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17076, + "name": "tokenIndexIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17063, + "src": "1755:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17077, + "name": "tokenIndexOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17065, + "src": "1785:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17078, + "name": "tokenAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17067, + "src": "1816:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 17081, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17058, + "src": "1879:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17082, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17061, + "src": "1884:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + ], + "expression": { + "id": 17079, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "1848:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calculateInvariant", + "nodeType": "MemberAccess", + "referencedDeclaration": 14401, + "src": "1848:30:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory) pure returns (uint256)" + } + }, + "id": 17083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1848:45:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17072, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "1664:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcInGivenOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 14519, + "src": "1664:26:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1664:243:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17071, + "id": 17085, + "nodeType": "Return", + "src": "1645:262:66" + } + ] + }, + "functionSelector": "9cd91d3f", + "id": 17087, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "inGivenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17068, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17058, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17087, + "src": "1457:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17057, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1457:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17061, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17087, + "src": "1478:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17059, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1478:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17060, + "nodeType": "ArrayTypeName", + "src": "1478:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17063, + "mutability": "mutable", + "name": "tokenIndexIn", + "nodeType": "VariableDeclaration", + "scope": 17087, + "src": "1513:20:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17062, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1513:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17065, + "mutability": "mutable", + "name": "tokenIndexOut", + "nodeType": "VariableDeclaration", + "scope": 17087, + "src": "1543:21:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17064, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1543:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17067, + "mutability": "mutable", + "name": "tokenAmountOut", + "nodeType": "VariableDeclaration", + "scope": 17087, + "src": "1574:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17066, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1574:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1447:155:66" + }, + "returnParameters": { + "id": 17071, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17070, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17087, + "src": "1626:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17069, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1626:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1625:9:66" + }, + "scope": 17235, + "src": "1428:486:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17116, + "nodeType": "Block", + "src": "2173:255:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17108, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17089, + "src": "2260:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17109, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17092, + "src": "2281:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17110, + "name": "amountsIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17095, + "src": "2307:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17111, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17097, + "src": "2334:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17112, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17099, + "src": "2366:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17113, + "name": "swapFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17101, + "src": "2400:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17106, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "2202:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcBptOutGivenExactTokensIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 14752, + "src": "2202:40:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256[] memory,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2202:219:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17105, + "id": 17115, + "nodeType": "Return", + "src": "2183:238:66" + } + ] + }, + "functionSelector": "cc832ac9", + "id": 17117, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exactTokensInForBPTOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17089, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "1961:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17088, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1961:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17092, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "1982:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17090, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1982:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17091, + "nodeType": "ArrayTypeName", + "src": "1982:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17095, + "mutability": "mutable", + "name": "amountsIn", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "2017:26:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17093, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2017:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17094, + "nodeType": "ArrayTypeName", + "src": "2017:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17097, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "2053:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17096, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2053:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17099, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "2085:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17098, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2085:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17101, + "mutability": "mutable", + "name": "swapFee", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "2119:15:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2119:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "1951:189:66" + }, + "returnParameters": { + "id": 17105, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17104, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17117, + "src": "2164:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17103, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2164:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2163:9:66" + }, + "scope": 17235, + "src": "1920:508:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17148, + "nodeType": "Block", + "src": "2708:285:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17139, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17119, + "src": "2794:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17140, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17122, + "src": "2815:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17141, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17124, + "src": "2841:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17142, + "name": "bptAmountOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17126, + "src": "2869:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17143, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17128, + "src": "2899:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17144, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17130, + "src": "2931:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17145, + "name": "swapFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17132, + "src": "2965:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17137, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "2737:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17138, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcTokenInGivenExactBptOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 14870, + "src": "2737:39:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2737:249:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17136, + "id": 17147, + "nodeType": "Return", + "src": "2718:268:66" + } + ] + }, + "functionSelector": "59d02e62", + "id": 17149, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "tokenInForExactBPTOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17119, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2474:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17118, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2474:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17122, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2495:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17120, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2495:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17121, + "nodeType": "ArrayTypeName", + "src": "2495:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17124, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2530:18:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17123, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2530:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17126, + "mutability": "mutable", + "name": "bptAmountOut", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2558:20:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2558:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17128, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2588:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17127, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2588:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17130, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2620:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17129, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2620:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17132, + "mutability": "mutable", + "name": "swapFee", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2654:15:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2654:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2464:211:66" + }, + "returnParameters": { + "id": 17136, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17135, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17149, + "src": "2699:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17134, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2699:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2698:9:66" + }, + "scope": 17235, + "src": "2434:559:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17180, + "nodeType": "Block", + "src": "3272:284:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17171, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17151, + "src": "3358:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17172, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17154, + "src": "3379:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17173, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17156, + "src": "3405:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17174, + "name": "bptAmountIn", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17158, + "src": "3433:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17175, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17160, + "src": "3462:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17176, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17162, + "src": "3494:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17177, + "name": "swapFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17164, + "src": "3528:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17169, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "3301:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17170, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcTokenOutGivenExactBptIn", + "nodeType": "MemberAccess", + "referencedDeclaration": 15209, + "src": "3301:39:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3301:248:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17168, + "id": 17179, + "nodeType": "Return", + "src": "3282:267:66" + } + ] + }, + "functionSelector": "ab55d412", + "id": 17181, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "exactBPTInForTokenOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17165, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17151, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3039:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17150, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3039:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17154, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3060:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17152, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3060:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17153, + "nodeType": "ArrayTypeName", + "src": "3060:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17156, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3095:18:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17155, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3095:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17158, + "mutability": "mutable", + "name": "bptAmountIn", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3123:19:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17157, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3123:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17160, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3152:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17159, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3152:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17162, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3184:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17161, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3184:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17164, + "mutability": "mutable", + "name": "swapFee", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3218:15:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17163, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3218:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3029:210:66" + }, + "returnParameters": { + "id": 17168, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17167, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17181, + "src": "3263:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17166, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3263:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3262:9:66" + }, + "scope": 17235, + "src": "2999:557:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17210, + "nodeType": "Block", + "src": "3816:256:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17202, + "name": "amp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17183, + "src": "3903:3:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17203, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17186, + "src": "3924:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17204, + "name": "amountsOut", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17189, + "src": "3950:10:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17205, + "name": "bptTotalSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17191, + "src": "3978:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17206, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17193, + "src": "4010:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17207, + "name": "swapFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17195, + "src": "4044:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17200, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "3845:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_calcBptInGivenExactTokensOut", + "nodeType": "MemberAccess", + "referencedDeclaration": 15091, + "src": "3845:40:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256[] memory,uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3845:220:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17199, + "id": 17209, + "nodeType": "Return", + "src": "3826:239:66" + } + ] + }, + "functionSelector": "fff8e54e", + "id": 17211, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "bptInForExactTokensOut", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17196, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17183, + "mutability": "mutable", + "name": "amp", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3603:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17182, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3603:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17186, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3624:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17184, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3624:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17185, + "nodeType": "ArrayTypeName", + "src": "3624:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17189, + "mutability": "mutable", + "name": "amountsOut", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3659:27:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17187, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3659:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17188, + "nodeType": "ArrayTypeName", + "src": "3659:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17191, + "mutability": "mutable", + "name": "bptTotalSupply", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3696:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17190, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3696:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17193, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3728:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17192, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3728:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17195, + "mutability": "mutable", + "name": "swapFee", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3762:15:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3762:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3593:190:66" + }, + "returnParameters": { + "id": 17199, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17198, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17211, + "src": "3807:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17197, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3807:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3806:9:66" + }, + "scope": 17235, + "src": "3562:510:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 17233, + "nodeType": "Block", + "src": "4311:238:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 17227, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17213, + "src": "4418:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17228, + "name": "balances", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17216, + "src": "4458:8:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "id": 17229, + "name": "currentInvariant", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17218, + "src": "4484:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 17230, + "name": "tokenIndex", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17220, + "src": "4518:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 17225, + "name": "StableMath", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15487, + "src": "4340:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StableMath_$15487_$", + "typeString": "type(library StableMath)" + } + }, + "id": 17226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "_getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "MemberAccess", + "referencedDeclaration": 15427, + "src": "4340:60:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256[] memory,uint256,uint256) pure returns (uint256)" + } + }, + "id": 17231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4340:202:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 17224, + "id": 17232, + "nodeType": "Return", + "src": "4321:221:66" + } + ] + }, + "functionSelector": "f3e92912", + "id": 17234, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTokenBalanceGivenInvariantAndAllOtherBalances", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17221, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17213, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 17234, + "src": "4145:30:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17212, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4145:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17216, + "mutability": "mutable", + "name": "balances", + "nodeType": "VariableDeclaration", + "scope": 17234, + "src": "4185:25:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 17214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4185:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 17215, + "nodeType": "ArrayTypeName", + "src": "4185:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17218, + "mutability": "mutable", + "name": "currentInvariant", + "nodeType": "VariableDeclaration", + "scope": 17234, + "src": "4220:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17217, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4220:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17220, + "mutability": "mutable", + "name": "tokenIndex", + "nodeType": "VariableDeclaration", + "scope": 17234, + "src": "4254:18:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17219, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4254:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4135:143:66" + }, + "returnParameters": { + "id": 17224, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17223, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17234, + "src": "4302:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17222, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4302:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4301:9:66" + }, + "scope": 17235, + "src": "4078:471:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + } + ], + "scope": 17236, + "src": "742:3809:66" + } + ], + "src": "688:3864:66" + }, + "id": 66 + }, + "contracts/test/MockStablePoolAmplification.sol": { + "ast": { + "absolutePath": "contracts/test/MockStablePoolAmplification.sol", + "exportedSymbols": { + "MockStablePoolAmplification": [ + 17297 + ] + }, + "id": 17298, + "license": "GPL-3.0-or-later", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 17237, + "literals": [ + "solidity", + "^", + "0.7", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "688:23:67" + }, + { + "id": 17238, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "712:33:67" + }, + { + "absolutePath": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "file": "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol", + "id": 17239, + "nodeType": "ImportDirective", + "scope": 17298, + "sourceUnit": 2022, + "src": "747:65:67", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/StablePoolAmplification.sol", + "file": "../StablePoolAmplification.sol", + "id": 17240, + "nodeType": "ImportDirective", + "scope": 17298, + "sourceUnit": 15990, + "src": "814:40:67", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 17241, + "name": "StablePoolAmplification", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 15989, + "src": "896:23:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_StablePoolAmplification_$15989", + "typeString": "contract StablePoolAmplification" + } + }, + "id": 17242, + "nodeType": "InheritanceSpecifier", + "src": "896:23:67" + } + ], + "contractDependencies": [ + 1022, + 3955, + 5117, + 15989 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 17297, + "linearizedBaseContracts": [ + 17297, + 15989, + 3955, + 5117, + 1022 + ], + "name": "MockStablePoolAmplification", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": false, + "id": 17244, + "mutability": "immutable", + "name": "_vault", + "nodeType": "VariableDeclaration", + "scope": 17297, + "src": "926:31:67", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 17243, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "926:6:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 17275, + "nodeType": "Block", + "src": "1220:31:67", + "statements": [ + { + "expression": { + "id": 17273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 17271, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17244, + "src": "1230:6:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 17272, + "name": "vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17246, + "src": "1239:5:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "src": "1230:14:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 17274, + "nodeType": "ExpressionStatement", + "src": "1230:14:67" + } + ] + }, + "id": 17276, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "id": 17253, + "name": "amplificationParameter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17250, + "src": "1099:22:67", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 17254, + "modifierName": { + "id": 17252, + "name": "StablePoolAmplification", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 15989, + "src": "1075:23:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_StablePoolAmplification_$15989_$", + "typeString": "type(contract StablePoolAmplification)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1075:47:67" + }, + { + "arguments": [ + { + "id": 17256, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17248, + "src": "1153:5:67", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "id": 17257, + "modifierName": { + "id": 17255, + "name": "BasePoolAuthorization", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 3955, + "src": "1131:21:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_BasePoolAuthorization_$3955_$", + "typeString": "type(contract BasePoolAuthorization)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1131:28:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 17265, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "1207:4:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MockStablePoolAmplification_$17297", + "typeString": "contract MockStablePoolAmplification" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MockStablePoolAmplification_$17297", + "typeString": "contract MockStablePoolAmplification" + } + ], + "id": 17264, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1199:7:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 17263, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1199:7:67", + "typeDescriptions": {} + } + }, + "id": 17266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1199:13:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 17262, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1191:7:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 17261, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1191:7:67", + "typeDescriptions": {} + } + }, + "id": 17267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1191:22:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 17260, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1183:7:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 17259, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1183:7:67", + "typeDescriptions": {} + } + }, + "id": 17268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1183:31:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 17269, + "modifierName": { + "id": 17258, + "name": "Authentication", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5117, + "src": "1168:14:67", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Authentication_$5117_$", + "typeString": "type(contract Authentication)" + } + }, + "nodeType": "ModifierInvocation", + "src": "1168:47:67" + } + ], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17251, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17246, + "mutability": "mutable", + "name": "vault", + "nodeType": "VariableDeclaration", + "scope": 17276, + "src": "985:12:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 17245, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "985:6:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17248, + "mutability": "mutable", + "name": "owner", + "nodeType": "VariableDeclaration", + "scope": 17276, + "src": "1007:13:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 17247, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1007:7:67", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 17250, + "mutability": "mutable", + "name": "amplificationParameter", + "nodeType": "VariableDeclaration", + "scope": 17276, + "src": "1030:30:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 17249, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1030:7:67", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "975:91:67" + }, + "returnParameters": { + "id": 17270, + "nodeType": "ParameterList", + "parameters": [], + "src": "1220:0:67" + }, + "scope": 17297, + "src": "964:287:67", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 17283, + "nodeType": "Block", + "src": "1306:30:67", + "statements": [ + { + "expression": { + "id": 17281, + "name": "_vault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17244, + "src": "1323:6:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "functionReturnParameters": 17280, + "id": 17282, + "nodeType": "Return", + "src": "1316:13:67" + } + ] + }, + "functionSelector": "8d928af8", + "id": 17284, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getVault", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 17277, + "nodeType": "ParameterList", + "parameters": [], + "src": "1274:2:67" + }, + "returnParameters": { + "id": 17280, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17279, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17284, + "src": "1298:6:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + }, + "typeName": { + "id": 17278, + "name": "IVault", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2021, + "src": "1298:6:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "visibility": "internal" + } + ], + "src": "1297:8:67" + }, + "scope": 17297, + "src": "1257:79:67", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 3954 + ], + "body": { + "id": 17295, + "nodeType": "Block", + "src": "1413:50:67", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 17290, + "name": "getVault", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17284, + "src": "1430:8:67", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_contract$_IVault_$2021_$", + "typeString": "function () view returns (contract IVault)" + } + }, + "id": 17291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1430:10:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IVault_$2021", + "typeString": "contract IVault" + } + }, + "id": 17292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "getAuthorizer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1581, + "src": "1430:24:67", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1301_$", + "typeString": "function () view external returns (contract IAuthorizer)" + } + }, + "id": 17293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1430:26:67", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "functionReturnParameters": 17289, + "id": 17294, + "nodeType": "Return", + "src": "1423:33:67" + } + ] + }, + "id": 17296, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getAuthorizer", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 17286, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1382:8:67" + }, + "parameters": { + "id": 17285, + "nodeType": "ParameterList", + "parameters": [], + "src": "1365:2:67" + }, + "returnParameters": { + "id": 17289, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 17288, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 17296, + "src": "1400:11:67", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + }, + "typeName": { + "id": 17287, + "name": "IAuthorizer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1301, + "src": "1400:11:67", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IAuthorizer_$1301", + "typeString": "contract IAuthorizer" + } + }, + "visibility": "internal" + } + ], + "src": "1399:13:67" + }, + "scope": 17297, + "src": "1342:121:67", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 17298, + "src": "856:609:67" + } + ], + "src": "688:778:67" + }, + "id": 67 + } + } + } +} diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/bytecode/ComposableStablePoolFactory.json b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/bytecode/ComposableStablePoolFactory.json new file mode 100644 index 0000000000..fd7bbef95b --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/bytecode/ComposableStablePoolFactory.json @@ -0,0 +1,3 @@ +{ + "creationCode": "6101806040523480156200001257600080fd5b50604051620097243803806200972483398101604081905262000035916200036d565b83836040518060200162000049906200021c565b601f1982820381018352601f90910116604052805183903090839060006002820460a081905280830360e08190528185529091508362000095816200013d602090811b6200067c17901c565b60601b6001600160601b0319166080528285018051838252620000c4826200013d602090811b6200067c17901c565b6001600160601b0319606091821b811660c05296909352905261010095909552505092821b831661012052509290921b909116610140525050426276a700016101605281516200011c9060029060208501906200022a565b508051620001329060039060208401906200022a565b505050505062000415565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506200018b6001600160a01b03831615156101ac62000191565b50919050565b81620001a257620001a281620001a6565b5050565b620001b8816210905360ea1b620001bb565b50565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b617ff3806200173183390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029d565b828001600101855582156200029d579182015b828111156200029d57825182559160200191906001019062000280565b50620002ab929150620002af565b5090565b5b80821115620002ab5760008155600101620002b0565b600082601f830112620002d7578081fd5b81516001600160401b0380821115620002ee578283fd5b6040516020601f8401601f191682018101838111838210171562000310578586fd5b806040525081945083825286818588010111156200032d57600080fd5b600092505b8383101562000351578583018101518284018201529182019162000332565b83831115620003635760008185840101525b5050505092915050565b6000806000806080858703121562000383578384fd5b84516200039081620003ff565b6020860151909450620003a381620003ff565b60408601519093506001600160401b0380821115620003c0578384fd5b620003ce88838901620002c6565b93506060870151915080821115620003e4578283fd5b50620003f387828801620002c6565b91505092959194509250565b6001600160a01b0381168114620001b857600080fd5b60805160601c60a05160c05160601c60e051610100516101205160601c6101405160601c610160516112a36200048e60003980610232528061025b52508061055d5250806105d35250806105835250806106e3525080610209528061075f5250806107045250806101e8528061073b52506112a36000f3fe608060405234801561001057600080fd5b50600436106100de5760003560e01c80636634b7531161008c578063739238d611610066578063739238d61461018f578063851c1bb3146101975780638d928af8146101b7578063aaabadc5146101bf576100de565b80636634b7531461014757806366b59f6c146101675780636c57f5a914610187576100de565b80632f2770db116100bd5780632f2770db1461012d5780633f819b6f1461013757806354fd4d501461013f576100de565b8062c194db146100e3578063174481fa146101015780632da47c4014610117575b600080fd5b6100eb6101c7565b6040516100f89190611050565b60405180910390f35b6101096101e6565b6040516100f8929190610fe9565b61011f61022c565b6040516100f89291906111e8565b610135610296565b005b6100eb6102fb565b6100eb6103af565b61015a610155366004610cdd565b61042b565b6040516100f89190611010565b61017a610175366004610d71565b610456565b6040516100f89190611063565b61015a610552565b61017a61055b565b6101aa6101a5366004610d15565b61057f565b6040516100f8919061101b565b61017a6105d1565b61017a6105f5565b60606101e1604051806020016040528060008152506106db565b905090565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000009091565b600080427f000000000000000000000000000000000000000000000000000000000000000081101561028857807f000000000000000000000000000000000000000000000000000000000000000003925062278d009150610291565b60009250600091505b509091565b61029e6107b4565b6102a66107fd565b600180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016811790556040517f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d5090600090a1565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b5050505050905090565b60028054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600080600061046361022c565b91509150610542604051806101c0016040528061047e6105d1565b73ffffffffffffffffffffffffffffffffffffffff1681526020016104a161055b565b73ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018a81526020018981526020018881526020018b81526020018781526020018481526020018381526020018673ffffffffffffffffffffffffffffffffffffffff16815260200161051c6102fb565b905260405161052e9190602001611084565b604051602081830303815290604052610812565b9c9b505050505050505050505050565b60015460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016105b4929190610fb9565b604051602081830303815290604052805190602001209050919050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006105ff6105d1565b73ffffffffffffffffffffffffffffffffffffffff1663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561064457600080fd5b505afa158015610658573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e19190610d55565b80517f602038038060206000396000f3fefefefefefefefefefefefefefefefefefefe808352600091602081018484f090845291506106d573ffffffffffffffffffffffffffffffffffffffff831615156101ac6108a6565b50919050565b8051604080517f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000818101858101848101602090810190965280855293957f00000000000000000000000000000000000000000000000000000000000000009592947f000000000000000000000000000000000000000000000000000000000000000094938801866000828a3c846000888301883c50602089810190898501016107a68183866108b8565b505050505050505050919050565b60006107e36000357fffffffff000000000000000000000000000000000000000000000000000000001661057f565b90506107fa6107f28233610932565b6101916108a6565b50565b610810610808610552565b1560d36108a6565b565b600061081c6107fd565b6000610827836109d1565b73ffffffffffffffffffffffffffffffffffffffff811660008181526020819052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555192935090917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc9190a292915050565b816108b4576108b481610a19565b5050565b5b602081106108f65781518352602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0016108b9565b905182516020929092036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169116179052565b600061093c6105f5565b73ffffffffffffffffffffffffffffffffffffffff16639be2a8848484306040518463ffffffff1660e01b815260040161097893929190611024565b60206040518083038186803b15801561099057600080fd5b505afa1580156109a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c89190610cf9565b90505b92915050565b600060606109de836106db565b905060008151602083016000f0905073ffffffffffffffffffffffffffffffffffffffff8116610a12573d6000803e3d6000fd5b9392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808304818106603090810160081b83860601918390049283060160101b016642414c230000300160c81b6044526107fa917f42414c0000000000000000000000000000000000000000000000000000000000906242414c90606490fd5b80356109cb8161123d565b600082601f830112610ac3578081fd5b8135610ad6610ad18261121d565b6111f6565b818152915060208083019084810181840286018201871015610af757600080fd5b60005b84811015610b1f578135610b0d8161125f565b84529282019290820190600101610afa565b505050505092915050565b600082601f830112610b3a578081fd5b8135610b48610ad18261121d565b818152915060208083019084810181840286018201871015610b6957600080fd5b60005b84811015610b1f578135610b7f8161123d565b84529282019290820190600101610b6c565b600082601f830112610ba1578081fd5b8135610baf610ad18261121d565b818152915060208083019084810181840286018201871015610bd057600080fd5b60005b84811015610b1f578135610be68161123d565b84529282019290820190600101610bd3565b600082601f830112610c08578081fd5b8135610c16610ad18261121d565b818152915060208083019084810181840286018201871015610c3757600080fd5b60005b84811015610b1f57813584529282019290820190600101610c3a565b600082601f830112610c66578081fd5b813567ffffffffffffffff811115610c7c578182fd5b610cad60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016111f6565b9150808252836020828501011115610cc457600080fd5b8060208401602084013760009082016020015292915050565b600060208284031215610cee578081fd5b8135610a128161123d565b600060208284031215610d0a578081fd5b8151610a128161125f565b600060208284031215610d26578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a12578182fd5b600060208284031215610d66578081fd5b8151610a128161123d565b60008060008060008060008060006101208a8c031215610d8f578485fd5b893567ffffffffffffffff80821115610da6578687fd5b610db28d838e01610c56565b9a5060208c0135915080821115610dc7578687fd5b610dd38d838e01610c56565b995060408c0135915080821115610de8578687fd5b610df48d838e01610b2a565b985060608c0135975060808c0135915080821115610e10578687fd5b610e1c8d838e01610b91565b965060a08c0135915080821115610e31578586fd5b610e3d8d838e01610bf8565b955060c08c0135915080821115610e52578485fd5b50610e5f8c828d01610ab3565b93505060e08a01359150610e778b6101008c01610aa8565b90509295985092959850929598565b73ffffffffffffffffffffffffffffffffffffffff169052565b6000815180845260208085019450808401835b83811015610ed1578151151587529582019590820190600101610eb3565b509495945050505050565b6000815180845260208085019450808401835b83811015610ed157815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101610eef565b6000815180845260208085019450808401835b83811015610ed157815187529582019590820190600101610f34565b60008151808452815b81811015610f7557602081850181015186830182015201610f59565b81811115610f865782602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b6000602082526109c86020830184610f50565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b600060208252611098602083018451610e86565b60208301516110aa6040840182610e86565b5060408301516101c08060608501526110c76101e0850183610f50565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808685030160808701526111038483610f50565b935060808701519150808685030160a08701526111208483610edc565b935060a08701519150808685030160c087015261113d8483610edc565b935060c08701519150808685030160e087015261115a8483610f21565b935060e087015191506101008187860301818801526111798584610ea0565b908801516101208881019190915288015161014080890191909152880151610160808901919091528801516101808089019190915288015190945091506101a06111c581880184610e86565b8701518685039091018387015290506111de8382610f50565b9695505050505050565b918252602082015260400190565b60405181810167ffffffffffffffff8111828210171561121557600080fd5b604052919050565b600067ffffffffffffffff821115611233578081fd5b5060209081020190565b73ffffffffffffffffffffffffffffffffffffffff811681146107fa57600080fd5b80151581146107fa57600080fdfea2646970667358221220139c11f5919330a49b431e9ec65da6abcaecfa2895b17cea9c855010670ff62c64736f6c634300070100336105006040523480156200001257600080fd5b5060405162007ff338038062007ff3833981016040819052620000359162001b55565b6020810151600019620000488362000d93565b620000538462000dcc565b8461010001518560000151600087604001518860600151620000808a608001513062000e1560201b60201c565b8a60800151516001016001600160401b03811180156200009f57600080fd5b50604051908082528060200260200182016040528015620000ca578160200160208202803683370190505b508b61012001518c61014001518d61016001518e6101800151828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200012c929190620017f2565b50805162000142906004906020840190620017f2565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001c090506276a70083111561019462000faf565b620001d462278d0082111561019562000faf565b4290910161014081905201610160528551620001f6906002111560c862000faf565b620002106200020462000fc4565b8751111560c962000faf565b620002268662000fc960201b6200154e1760201c565b620002318462000fd5565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f9062000262908d9060040162001ddb565b602060405180830381600087803b1580156200027d57600080fd5b505af115801562000292573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b8919062001b1d565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002ed9084908b908b9060040162001d3f565b600060405180830381600087803b1580156200030857600080fd5b505af11580156200031d573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036457600080fd5b505afa15801562000379573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039f919062001b36565b60601b6001600160601b0319166101a05250620003d1995050506001891015965061012c955062000faf945050505050565b620003e461138882111561012d62000faf565b6000620003ff826103e86200106960201b620015581760201c565b90506200040c8162001098565b5050805151620004216002821160c862000faf565b6200044660018203836020015151846040015151620010d760201b620015831760201c565b6101c0819052815180516000906200045a57fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200049157fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004c857fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620004fe57600062000517565b8151805160039081106200050e57fe5b60200260200101515b60601b6001600160601b03191661026052600481116200053957600062000552565b8151805160049081106200054957fe5b60200260200101515b60601b6001600160601b0319166102805260058111620005745760006200058d565b8151805160059081106200058457fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005c69190600090620005b257fe5b6020026020010151620010f760201b60201c565b6102c05281518051620005e091906001908110620005b257fe5b6102e05281518051620005fa91906002908110620005b257fe5b61030052600381116200060f57600062000625565b620006258260000151600381518110620005b257fe5b61032052600481116200063a57600062000650565b620006508260000151600481518110620005b257fe5b6103405260058111620006655760006200067b565b6200067b8260000151600581518110620005b257fe5b61036052815151600019015b600081118015620006b857508251805130919083908110620006a557fe5b60200260200101516001600160a01b0316115b15620006c8576000190162000687565b6101e08190528251516060906001600160401b0381118015620006ea57600080fd5b5060405190808252806020026020018201604052801562000715578160200160208202803683370190505b50905060008080805b8751518110156200093857858110156200085457876020015181815181106200074357fe5b60200260200101518582815181106200075857fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620007c160006001600160a01b03168683815181106200079457fe5b60200260200101516001600160a01b031614158260060186620011c660201b620015a0179092919060201c565b935087604001518181518110620007d457fe5b60200260200101511562000849576200082060006001600160a01b0316868381518110620007fe57fe5b60200260200101516001600160a01b0316141561015562000faf60201b60201c565b6200083d60018286620011c660201b620015a0179092919060201c565b9350600192506200084e565b600191505b6200092f565b8581146200092f57876020015160018203815181106200087057fe5b60200260200101518582815181106200088557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050620008c160006001600160a01b03168683815181106200079457fe5b935087604001516001820381518110620008d757fe5b6020026020010151156200092a576200090160006001600160a01b0316868381518110620007fe57fe5b6200091e60018286620011c660201b620015a0179092919060201c565b9350600192506200092f565b600191505b6001016200071e565b50811560f890811b610460528115901b61048052835184906000906200095a57fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050836001815181106200098d57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505083600281518110620009c057fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003845111620009f757600062000a0e565b8360038151811062000a0557fe5b60200260200101515b60601b6001600160601b0319166103e052835160041062000a3157600062000a48565b8360048151811062000a3f57fe5b60200260200101515b60601b6001600160601b03191661040052835160051062000a6b57600062000a82565b8360058151811062000a7957fe5b60200260200101515b60601b6001600160601b0319166104205250506104405250508251516020808501515160408601515162000ac595509293509190620010d7811b6200158317901c565b805160609062000ad6903062000e15565b8051909150600019015b60008111801562000b165750306001600160a01b031682828151811062000b0357fe5b60200260200101516001600160a01b0316115b1562000b26576000190162000ae0565b6000805b84515181101562000c3f578281141562000b4357600191505b60208501518051828401916000918490811062000b5c57fe5b60200260200101516001600160a01b03161462000c355762000bb6818760200151848151811062000b8957fe5b60200260200101518860400151858151811062000ba257fe5b6020026020010151620011ef60201b60201c565b8560200151828151811062000bc757fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000c0b57fe5b602002602001015160405162000c22919062001df0565b60405180910390a362000c3581620012ea565b5060010162000b2a565b5050505050600019811460f881901b6104c0526001600160601b0319606084901b166104a05262000c7283600262001329565b62000c7f83600362001329565b801562000c995762000c9383600062001329565b62000d58565b60405163178b2b9360e21b815262000d2d906001600160a01b03851690635e2cae4c9062000ccd9060009060040162001df0565b60206040518083038186803b15801562000ce657600080fd5b505afa15801562000cfb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d21919062001b1d565b83111561025862000faf565b600060008051602062007fd38339815191528360405162000d4f919062001df0565b60405180910390a25b8062000d65578162000d68565b60005b6104e0525050506101a0810151805162000d8b91600d91602090910190620017f2565b505062001e62565b62000d9d62001873565b6040518060600160405280836080015181526020018360a0015181526020018360c0015181525090505b919050565b62000dd662001873565b604051806060016040528062000df784608001513062000e1560201b60201c565b81526020018360a0015181526020018360e001518152509050919050565b606082516001016001600160401b038111801562000e3257600080fd5b5060405190808252806020026020018201604052801562000e5d578160200160208202803683370190505b50905082516000141562000ea057818160008151811062000e7a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000fa9565b82515b60008111801562000edc5750826001600160a01b031684600183038151811062000ec957fe5b60200260200101516001600160a01b0316115b1562000f295783600182038151811062000ef257fe5b602002602001015182828151811062000f0757fe5b6001600160a01b03909216602092830291909101909101526000190162000ea3565b60005b8181101562000f785784818151811062000f4257fe5b602002602001015183828151811062000f5757fe5b6001600160a01b039092166020928302919091019091015260010162000f2c565b508282828151811062000f8757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000fc05762000fc081620014d4565b5050565b600690565b8062000fc081620014e9565b62000fee62000fe362001570565b82101560cb62000faf565b6200100762000ffc62001579565b82111560ca62000faf565b620010298160c0603f6008546200158560201b620015c717909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200105e90839062001df0565b60405180910390a150565b600082820262001091841580620010895750838583816200108657fe5b04145b600362000faf565b9392505050565b620010a681804280620015aa565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516200105e919062001df0565b620010f28284148015620010ea57508183145b606762000faf565b505050565b60006001600160a01b0382163014156200111b5750670de0b6b3a764000062000dc7565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200115757600080fd5b505afa1580156200116c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001192919062001d1c565b60ff1690506000620011b16012836200161d60201b620015ef1760201c565b600a0a670de0b6b3a764000002949350505050565b60006001821b1984168284620011de576000620011e1565b60015b60ff16901b17949350505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200122b57600080fd5b505afa15801562001240573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001266919062001b1d565b6000858152600a602090815260409091205491925062001295908290849086906200160562001635821b17901c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620012db90859062001df0565b60405180910390a25050505050565b6000818152600a602090815260409091205490620013139082906200163d62001691821b17901c565b6000928352600a60205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200135a90859060040162001df0565b60206040518083038186803b1580156200137357600080fd5b505afa15801562001388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ae919062001b1d565b905081620013f257620013cc81620016bc60201b620016551760201c565b600b80546001600160401b0319166001600160401b0392909216919091179055620014a6565b600282141562001448576200141281620016bc60201b620016551760201c565b600b80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620014a6565b600382141562001499576200146881620016bc60201b620016551760201c565b600b80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620014a6565b620014a66101bb620014d4565b8160008051602062007fd383398151915282604051620014c7919062001df0565b60405180910390a2505050565b620014e6816210905360ea1b620016da565b50565b600281511015620014fa57620014e6565b6000816000815181106200150a57fe5b602002602001015190506000600190505b8251811015620010f25760008382815181106200153457fe5b6020026020010151905062001565816001600160a01b0316846001600160a01b031610606562000faf60201b60201c565b91506001016200151b565b64e8d4a5100090565b67016345785d8a000090565b6000620015948484846200173b565b506001901b60001901811b1992909216911b1790565b620015c48160c060406200179660201b620016721760201c565b620015de83608060406200179660201b620016721760201c565b620015f7856040806200179660201b620016721760201c565b6200161187600060406200179660201b620016721760201c565b17171760095550505050565b60006200162f83831115600162000faf565b50900390565b60006200164a606084901c1561014962000faf565b6200168942830160e06020620016738660c083838c8c60006060620015c762001585871b17861c565b6200158560201b620015c717909392919060201c565b949350505050565b600062000fa9620016a283620017ab565b606080856200158560201b620015c717909392919060201c565b6000620016d66001600160401b038311156101ba62000faf565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6200174c6101008310606462000faf565b62001785600182101580156200177d57506200177960ff8461010003620017cb60201b620016851760201c565b8211155b606462000faf565b620010f283821c156101b462000faf565b6000620017a58484846200173b565b50501b90565b600062000fa96000606084620017e360201b6200169b179092919060201c565b6000818310620017dc578162001091565b5090919050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200183557805160ff191683800117855562001865565b8280016001018555821562001865579182015b828111156200186557825182559160200191906001019062001848565b50620016d692915062001894565b60405180606001604052806060815260200160608152602001606081525090565b5b80821115620016d6576000815560010162001895565b805162000fa98162001e4c565b600082601f830112620018c9578081fd5b8151620018e0620018da8262001e20565b62001df9565b8181529150602080830190848101818402860182018710156200190257600080fd5b6000805b858110156200193257825180151581146200191f578283fd5b8552938301939183019160010162001906565b50505050505092915050565b600082601f8301126200194f578081fd5b815162001960620018da8262001e20565b8181529150602080830190848101818402860182018710156200198257600080fd5b60005b84811015620019ae5781516200199b8162001e4c565b8452928201929082019060010162001985565b505050505092915050565b600082601f830112620019ca578081fd5b8151620019db620018da8262001e20565b818152915060208083019084810181840286018201871015620019fd57600080fd5b60005b84811015620019ae57815162001a168162001e4c565b8452928201929082019060010162001a00565b600082601f83011262001a3a578081fd5b815162001a4b620018da8262001e20565b81815291506020808301908481018184028601820187101562001a6d57600080fd5b60005b84811015620019ae5781518452928201929082019060010162001a70565b600082601f83011262001a9f578081fd5b81516001600160401b0381111562001ab5578182fd5b602062001acb601f8301601f1916820162001df9565b9250818352848183860101111562001ae257600080fd5b60005b8281101562001b0257848101820151848201830152810162001ae5565b8281111562001b145760008284860101525b50505092915050565b60006020828403121562001b2f578081fd5b5051919050565b60006020828403121562001b48578081fd5b8151620010918162001e4c565b60006020828403121562001b67578081fd5b81516001600160401b038082111562001b7e578283fd5b81840191506101c080838703121562001b95578384fd5b62001ba08162001df9565b905062001bae8684620018ab565b815262001bbf8660208501620018ab565b602082015260408301518281111562001bd6578485fd5b62001be48782860162001a8e565b60408301525060608301518281111562001bfc578485fd5b62001c0a8782860162001a8e565b60608301525060808301518281111562001c22578485fd5b62001c30878286016200193e565b60808301525060a08301518281111562001c48578485fd5b62001c5687828601620019b9565b60a08301525060c08301518281111562001c6e578485fd5b62001c7c8782860162001a29565b60c08301525060e08301518281111562001c94578485fd5b62001ca287828601620018b8565b60e083015250610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018062001ce587828601620018ab565b908201526101a0838101518381111562001cfd578586fd5b62001d0b8882870162001a8e565b918301919091525095945050505050565b60006020828403121562001d2e578081fd5b815160ff8116811462001091578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001d8b5762001d78855162001e40565b8352938301939183019160010162001d63565b505084810360408601528551808252908201925081860190845b8181101562001dcd5762001dba835162001e40565b8552938301939183019160010162001da5565b509298975050505050505050565b602081016003831062001dea57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001e1857600080fd5b604052919050565b60006001600160401b0382111562001e36578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b0381168114620014e657600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160f81c6104a05160601c6104c05160f81c6104e051615fb36200202060003980610e2552508061090a52508061088a52806108b552806108e05250806147a9525080614785525080612b3c52806143fe525080611c5c525080611c2c525080611bfc525080611bcc525080611b9c525080611b6c525080612fcc525080612f9c525080612f6c525080612f3c525080612f0c525080612edc525080611eb9525080611e77525080611e35525080611df3525080611db1525080611d6f52508061104e5250806116ca525080611279525080610be4525080611b40525080611b1c52508061114e52508061112a525080611086525080612d4a525080612d8c525080612d6b5250615fb36000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c806370464016116101d3578063a457c2d711610104578063d505accf116100a2578063ddf4627b1161007c578063ddf4627b146106e3578063eb0f24d6146106eb578063ed24911d146106f3578063f4b7964d146106fb57610378565b8063d505accf146106aa578063d5c096c4146106bd578063dd62ed3e146106d057610378565b8063ab7759f1116100de578063ab7759f11461067f578063b35056b814610692578063b7b814fc1461069a578063d2946c2b146106a257610378565b8063a457c2d714610651578063a9059cbb14610664578063aaabadc51461067757610378565b8063851c1bb311610171578063893d20e81161014b578063893d20e8146106195780638d928af81461062e57806390193b7c1461063657806395d89b411461064957610378565b8063851c1bb3146105eb578063876f303b146105fe57806387ec68171461060657610378565b80637ecebe00116101ad5780637ecebe00146105a55780637f1260d1146105b857806382687a56146105db5780638456cb59146105e357610378565b8063704640161461055e57806370a082311461057157806374f3b0091461058457610378565b80633644e515116102ad57806354a844ba1161024b57806355c676281161022557806355c67628146105165780636028bfd41461051e578063679aefce1461053f5780636daccffa1461054757610378565b806354a844ba146104f357806354dea00a146104fb57806354fd4d501461050e57610378565b8063395093511161028757806339509351146104af5780633c975d51146104c25780633f4ba83a146104d857806350dd6ed9146104e057610378565b80633644e5151461048c57806338e9922e1461049457806338fff2d0146104a757610378565b80631c0de0511161031a57806323b872dd116102f457806323b872dd1461043e5780632df2c7c0146104515780632f1a0bc914610464578063313ce5671461047757610378565b80631c0de051146103fd5780631dd746ea14610414578063238a2d591461042957610378565b8063095ea7b311610356578063095ea7b3146103c35780630da0669c146103e357806315b0015b146103ed57806318160ddd146103f557610378565b806301ec954a1461037d57806304842d4c146103a657806306fdde03146103ae575b600080fd5b61039061038b366004615a13565b61070e565b60405161039d9190615dc3565b60405180910390f35b6103906107b4565b6103b66107c3565b60405161039d9190615e99565b6103d66103d1366004615638565b610859565b60405161039d9190615da0565b6103eb610870565b005b6103d6610908565b61039061092c565b610405610932565b60405161039d93929190615dab565b61041c61095b565b60405161039d9190615d68565b610431610965565b60405161039d9190615d1b565b6103d661044c366004615588565b610a00565b6103eb61045f366004615534565b610a74565b6103eb610472366004615b62565b610ad0565b61047f610bb3565b60405161039d9190615f04565b610390610bbc565b6103eb6104a2366004615b32565b610bc6565b610390610be2565b6103d66104bd366004615638565b610c06565b6104ca610c41565b60405161039d929190615edb565b6103eb610c6c565b6103eb6104ee36600461584e565b610c7e565b6103eb610c9c565b610390610509366004615534565b610cae565b6103b6610cc9565b610390610d2a565b61053161052c36600461574f565b610d3d565b60405161039d929190615eac565b610390610d74565b61054f610de0565b60405161039d93929190615ec5565b61039061056c366004615b32565b610dfb565b61039061057f366004615534565b610ec1565b61059761059236600461574f565b610edc565b60405161039d929190615d7b565b6103906105b3366004615534565b610fdf565b6105cb6105c6366004615534565b610fea565b60405161039d9493929190615ee9565b61039061104c565b6103eb611070565b6103906105f93660046157f2565b611082565b6103906110d4565b61053161061436600461574f565b611102565b610621611128565b60405161039d9190615d07565b61062161114c565b610390610644366004615534565b611170565b6103b661118b565b6103d661065f366004615638565b6111ec565b6103d6610672366004615638565b61122a565b610621611237565b6103d661068d366004615534565b611241565b6103d6611254565b6103eb611265565b610621611277565b6103eb6106b83660046155c8565b61129b565b6105976106cb36600461574f565b611326565b6103906106de366004615550565b611449565b610390611486565b6103eb61148c565b6103906114b8565b6103eb610709366004615638565b6114c2565b6000846080015161073b61072061114c565b6001600160a01b0316336001600160a01b03161460cd6116aa565b610750610746610be2565b82146101f46116aa565b6107586116b8565b61076a84846107656116c8565b6116ec565b6060610774611704565b905060008751600181111561078557fe5b1461079c57610797878787878561179d565b6107a9565b6107a987878787856117f6565b979650505050505050565b60006107be611831565b905090565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b820191906000526020600020905b81548152906001019060200180831161083257829003601f168201915b5050505050905090565b6000610866338484611838565b5060015b92915050565b6108786118a0565b610880610908565b156108b0576108b07f0000000000000000000000000000000000000000000000000000000000000000600061190d565b6108db7f0000000000000000000000000000000000000000000000000000000000000000600261190d565b6109067f0000000000000000000000000000000000000000000000000000000000000000600361190d565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b600080600061093f611afd565b15925061094a611b1a565b9150610954611b3e565b9050909192565b60606107be611704565b606060006109716116c8565b905060608167ffffffffffffffff8111801561098c57600080fd5b506040519080825280602002602001820160405280156109b6578160200160208202803683370190505b50905060005b828110156109f9576109cd81611b62565b8282815181106109d957fe5b6001600160a01b03909216602092830291909101909101526001016109bc565b5091505090565b600080610a0d8533611449565b9050610a31336001600160a01b0387161480610a295750838210155b61019e6116aa565b610a3c858585611c8b565b336001600160a01b03861614801590610a5757506000198114155b15610a6957610a698533858403611838565b506001949350505050565b6000610a7f82611d6b565b90506000610a8c82611b62565b9050610aa56001600160a01b03821615156101556116aa565b6000828152600a6020526040812054610abd90611ef9565b9050610aca838383611f08565b50505050565b610ad8611feb565b610ae8600183101561012c6116aa565b610af961138883111561012d6116aa565b6000610b0582426115ef565b9050610b196201518082101561013d6116aa565b600080610b24612031565b91509150610b35811561013e6116aa565b6000610b43866103e8611558565b90506000838211610b7257610b6d610b5e6201518086611558565b610b688488611558565b6120a5565b610b8c565b610b8c610b826201518084611558565b610b688688611558565b9050610b9e600282111561013f6116aa565b610baa848342896120d8565b50505050505050565b60055460ff1690565b60006107be6114b8565b610bce611feb565b610bd6612127565b610bdf8161213a565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610866918590610c3c90866121b3565b611838565b600c546000908190610c568160e9601761169b565b9250610c6581600060e961169b565b9150509091565b610c74611feb565b61090660006121c5565b610c86611feb565b610c8e612127565b610c988282612256565b5050565b610ca4611feb565b6109066001612364565b6000610cc1610cbc83611d6b565b6123bb565b90505b919050565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6008546000906107be9060c0603f61169b565b60006060610d538651610d4e6116c8565b61240e565b610d688989898989898961241b61243d6124a6565b97509795505050505050565b60006060600080600080610d8661263d565b9398509196509450925090506000610d9e85856121b3565b90506000610daa612031565b5090506000848214610dc557610dc0828961272d565b610dc7565b835b9050610dd3818461288f565b9850505050505050505090565b6000806000610ded612031565b90949093506103e892509050565b6000610e05611254565b15610e1257506000610cc4565b81610e5e57610e1f610908565b610e49577f0000000000000000000000000000000000000000000000000000000000000000610e57565b600b5467ffffffffffffffff165b9050610cc4565b6002821415610e865750600b5468010000000000000000900467ffffffffffffffff16610cc4565b6003821415610eb65750600b54700100000000000000000000000000000000900467ffffffffffffffff16610cc4565b610cc46101bb6128e0565b6001600160a01b031660009081526020819052604090205490565b60608088610eeb61072061114c565b610ef6610746610be2565b60606000610f038661290a565b15610f2b57610f10612939565b610f2289610f1c61092c565b8861294c565b92509050610f7d565b610f336116b8565b6060610f3d611704565b9050610f498a82612990565b610f6d8d8d8d8d8d610f59611254565b610f63578d610f66565b60005b878e61241b565b93509150610f7b838261243d565b505b610f878b826129f9565b81895167ffffffffffffffff81118015610fa057600080fd5b50604051908082528060200260200182016040528015610fca578160200160208202803683370190505b509450945050505b5097509795505050505050565b6000610cc182611170565b6000806000806000600a6000610fff88611d6b565b815260208101919091526040016000205490506110208115156101556116aa565b61102981612a03565b945061103481612a11565b935061103f81612a1f565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b611078611feb565b61090660016121c5565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016110b7929190615c91565b604051602081830303815290604052805190602001209050919050565b60008060006110e161263d565b505092509250506110fb81836121b390919063ffffffff16565b9250505090565b600060606111138651610d4e6116c8565b610d6889898989898989612a41612a526124a6565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561084f5780601f106108245761010080835404028352916020019161084f565b6000806111f93385611449565b90508083106112135761120e33856000611838565b611220565b6112203385858403611838565b5060019392505050565b6000610866338484611c8b565b60006107be612abb565b6000610cc161124f83611d6b565b612b35565b6008546000906107be9060ff612b5d565b61126d611feb565b6109066000612364565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112ca8c611170565b896040516020016112e096959493929190615deb565b6040516020818303038152906040528051906020012090506113118882611308878787612b67565b886101f8612ba6565b61131c888888611838565b5050505050505050565b6060808861133561072061114c565b611340610746610be2565b6113486116b8565b6060611352611704565b905061135c61092c565b61140957600060606113718d8d8d868b612bfd565b9150915061138a611380611831565b83101560cc6116aa565b61139c6000611397611831565b612cd6565b6113af8b6113a8611831565b8403612cd6565b6113b98184612a52565b808a5167ffffffffffffffff811180156113d257600080fd5b506040519080825280602002602001820160405280156113fc578160200160208202803683370190505b5095509550505050610fd2565b6114138882612990565b6000606061143b8d8d8d8d8d611427611254565b611431578d611434565b60005b898e612a41565b915091506113af8b83612cd6565b600061145361114c565b6001600160a01b0316826001600160a01b03161415611475575060001961086a565b61147f8383612ce0565b905061086a565b60001981565b611494611feb565b60008061149f612031565b915091506114af816101406116aa565b610c9882612d0b565b60006107be612d46565b6114ca611feb565b60006114d583611d6b565b905060006114e282611b62565b90506114fb6001600160a01b03821615156101556116aa565b611506828285611f08565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516115409190615dc3565b60405180910390a350505050565b80610c9881612de3565b600082820261157c84158061157557508385838161157257fe5b04145b60036116aa565b9392505050565b61159b828414801561159457508183145b60676116aa565b505050565b60006001821b19841682846115b65760006115b9565b60015b60ff16901b17949350505050565b60006115d4848484612e5c565b5082821b6000196001831b01831b198516175b949350505050565b60006115ff8383111560016116aa565b50900390565b6000611618606084901c156101496116aa565b6115e742830160e060206116358660c083838c8c600060606115c7565b9291906115c7565b6000610cc161164b83612a03565b83906060806115c7565b600061166e67ffffffffffffffff8311156101ba6116aa565b5090565b600061167f848484612e5c565b50501b90565b6000818310611694578161157c565b5090919050565b6001901b6000190191901c1690565b81610c9857610c98816128e0565b6116c0612ea2565b610906612eaa565b7f000000000000000000000000000000000000000000000000000000000000000090565b61159b81841080156116fd57508183105b60646116aa565b606060006117106116c8565b905060608167ffffffffffffffff8111801561172b57600080fd5b50604051908082528060200260200182016040528015611755578160200160208202803683370190505b50905060005b828110156109f95761177e61176f826123bb565b61177883612ed2565b90612ff0565b82828151811061178a57fe5b602090810291909101015260010161175b565b60208501516000906001600160a01b03163014806117c7575060408601516001600160a01b031630145b6117dd576117d8868686868661301c565b6117ea565b6117ea8686868686613086565b90505b95945050505050565b60208501516000906001600160a01b0316301480611820575060408601516001600160a01b031630145b6117dd576117d8868686868661318a565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611893908590615dc3565b60405180910390a3505050565b6118a8612127565b606060008060006118b761263d565b94509450945050935060008311156118d2576118d2836131e1565b60006118dc612031565b50905060008382146118f7576118f2828761272d565b6118f9565b825b905061190582826131f2565b505050505050565b6040517f1a7c32630000000000000000000000000000000000000000000000000000000081526000906001600160a01b03841690631a7c326390611955908590600401615dc3565b60206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190615b4a565b9050816119f3576119b581611655565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055611ac0565b6002821415611a5057611a0581611655565b600b805467ffffffffffffffff9290921668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff909216919091179055611ac0565b6003821415611ab557611a6281611655565b600b805467ffffffffffffffff92909216700100000000000000000000000000000000027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611ac0565b611ac06101bb6128e0565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611af09190615dc3565b60405180910390a2505050565b6000611b07611b3e565b4211806107be57505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611b9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415611bc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415611bf057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415611c2057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415611c5057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b610cc46101356128e0565b611ca26001600160a01b03841615156101986116aa565b611cb96001600160a01b03831615156101996116aa565b611cc483838361159b565b6001600160a01b038316600090815260208190526040902054611cea90826101a0613218565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d1990826121b3565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611893908590615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611daf57506000610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611df157506001610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e3357506002610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e7557506003610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611eb757506004610cc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611c8057506005610cc4565b6000610cc18260c0602061169b565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f4357600080fd5b505afa158015611f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7b9190615b4a565b6000858152600a6020526040902054909150611f98818385611605565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90611fdc908590615dc3565b60405180910390a25050505050565b600061201a6000357fffffffff0000000000000000000000000000000000000000000000000000000016611082565b9050610bdf612029823361322e565b6101916116aa565b600080600080600080612042613317565b93509350935093508042101561209557600194508383111561207957818103824203858503028161206f57fe5b0484019550612090565b818103824203848603028161208a57fe5b04840395505b61209d565b600094508295505b505050509091565b60006120b482151560046116aa565b826120c15750600061086a565b8160018403816120cd57fe5b04600101905061086a565b6120e484848484613376565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516121199493929190615ee9565b60405180910390a150505050565b610906612132611afd565b6101926116aa565b61214f6121456133b5565b82101560cb6116aa565b61216461215a6133be565b82111560ca6116aa565b600854612175908260c0603f6115c7565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906121a8908390615dc3565b60405180910390a150565b600082820161157c84821015836116aa565b80156121e5576121e06121d6611b1a565b42106101936116aa565b6121fa565b6121fa6121f0611b3e565b42106101a96116aa565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906121a8908390615da0565b6000612260610be2565b9050600061226c61114c565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b8152600401612299929190615e64565b60806040518083038186803b1580156122b157600080fd5b505afa1580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190615b83565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d49250612336915085908790600401615e4b565b600060405180830381600087803b15801561235057600080fd5b505af115801561131c573d6000803e3d6000fd5b600854612373908260ff6115a0565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c8906123a6908390615da0565b60405180910390a180610bdf57610bdf6133ca565b60006123c561104c565b8214156123db5750670de0b6b3a7640000610cc4565b6000828152600a602052604090205480156123fe576123f981612a03565b61157c565b670de0b6b3a76400009392505050565b610c9881831460676116aa565b6000606061242c600088868661349c565b915091509850989650505050505050565b8151815161244c90829061240e565b60005b81811015610aca5761248784828151811061246657fe5b602002602001015184838151811061247a57fe5b602002602001015161288f565b84828151811061249357fe5b602090810291909101015260010161244f565b333014612595576000306001600160a01b03166000366040516124ca929190615cc1565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050806000811461251b57fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114612577573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b61259d6116b8565b60606125a7611704565b90506125b38782612990565b600060606125cb8c8c8c8c8c8c898d8d63ffffffff16565b915091506125dd81848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b6060600080600080606061264f61114c565b6001600160a01b031663f94d4668612665610be2565b6040518263ffffffff1660e01b81526004016126819190615dc3565b60006040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d59190810190615663565b509150506126ea816126e5611704565b612990565b6126f38161354a565b965094506000612701610c41565b90945090506000612713888684613583565b945090506127218782613610565b95505050509091929394565b80516000908190815b8181101561276e5761276485828151811061274d57fe5b6020026020010151846121b390919063ffffffff16565b9250600101612736565b508161277f5760009250505061086a565b600082868302825b60ff811015612878578260005b868110156127d5576127cb6127a98387611558565b6127c68c84815181106127b857fe5b60200260200101518a611558565b613628565b9150600101612794565b5083945061282e61280d6128076127ec848a611558565b6128016127f9888d611558565b6103e8613628565b906121b3565b86611558565b6127c661281d8960010185611558565b6128016127f96103e889038a611558565b93508484111561285657600185850311612851578397505050505050505061086a565b61286f565b60018486031161286f578397505050505050505061086a565b50600101612787565b506128846101416128e0565b505050505092915050565b600061289e82151560046116aa565b826128ab5750600061086a565b670de0b6b3a7640000838102906128ce908583816128c557fe5b041460056116aa565b8281816128d757fe5b0491505061086a565b610bdf817f42414c0000000000000000000000000000000000000000000000000000000000613648565b6000808251118015610cc1575060ff80168280602001905181019061292f9190615bc3565b60ff161492915050565b610906612944611254565b6101b66116aa565b600060606000606061295d8761354a565b91509150600060606129708385896136c3565b91509150816129808260006136ef565b9550955050505050935093915050565b8151815161299f90829061240e565b60005b81811015610aca576129da8482815181106129b957fe5b60200260200101518483815181106129cd57fe5b6020026020010151612ff0565b8482815181106129e657fe5b60209081029190910101526001016129a2565b610c9882826137ac565b6000610cc18282606061169b565b6000610cc18260608061169b565b600080612a2b83611ef9565b9150612a3a8360e0602061169b565b9050915091565b6000606061242c600188868661349c565b81518151612a6190829061240e565b60005b81811015610aca57612a9c848281518110612a7b57fe5b6020026020010151848381518110612a8f57fe5b6020026020010151613878565b848281518110612aa857fe5b6020908102919091010152600101612a64565b6000612ac561114c565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612afd57600080fd5b505afa158015612b11573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107be9190615832565b6000610cc17f0000000000000000000000000000000000000000000000000000000000000000835b1c60019081161490565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612bb1856138c6565b9050612bc7612bc18783876138e2565b836116aa565b612bd6428410156101b86116aa565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612c0c84613991565b9050612c276000826003811115612c1f57fe5b1460ce6116aa565b6060612c32856139a7565b9050612c408151875161240e565b612c4a8187612990565b6000612c54612031565b5090506060612c62836139bd565b90506000612c70838361272d565b9050806000612c8d6d8000000000000000000000000000836115ef565b9050612c998d82612cd6565b8086612ca361104c565b81518110612cad57fe5b602002602001018181525050612cc385846131f2565b509c939b50929950505050505050505050565b610c988282613a5f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612d1781824242613376565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516121a89190615dc3565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612db3613aec565b30604051602001612dc8959493929190615e1f565b60405160208183030381529060405280519060200120905090565b600281511015612df257610bdf565b600081600081518110612e0157fe5b602002602001015190506000600190505b825181101561159b576000838281518110612e2957fe5b60200260200101519050612e52816001600160a01b0316846001600160a01b03161060656116aa565b9150600101612e12565b612e6b610100831060646116aa565b612e93600182101580156116fd5750612e8960ff8461010003611685565b82111560646116aa565b61159b83821c156101b46116aa565b610906612127565b6000612eb46116c8565b905060005b81811015610c9857612eca81613af0565b600101612eb9565b600081612f0057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160011415612f3057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160021415612f6057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160031415612f9057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160041415612fc057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b8160051415611c8057507f0000000000000000000000000000000000000000000000000000000000000000610cc4565b600082820261300a84158061157557508385838161157257fe5b670de0b6b3a764000090049392505050565b60006130288583612990565b613049866060015183858151811061303c57fe5b6020026020010151613b44565b6060870152600061305c87878787613b50565b905061307b8184878151811061306e57fe5b6020026020010151613b64565b90506107a981613b70565b600080808751600181111561309757fe5b1490506130a48684612990565b6130c4876060015184836130b857866130ba565b875b8151811061303c57fe5b876060018181525050600060606000806130dd8a613b8c565b93509350935093506000806130f061104c565b8a1461311657613111878e60600151876131098e613bf5565b888b89613c2a565b613131565b613131878e60600151876131298f613bf5565b888b89613c63565b915091506131428486858985613c87565b8661315c57613157828a8d8151811061306e57fe5b613179565b613179828a8c8151811061316c57fe5b6020026020010151613d07565b9d9c50505050505050505050505050565b60006131998660600151613d13565b60608701526131a88583612990565b6131bc866060015183868151811061303c57fe5b606087015260006131cf87878787613d34565b90506107a98184868151811061316c57fe5b610bdf6131ec611277565b82612cd6565b6131ff81600060e9611672565b61320c8360e96017611672565b17600c55610c98613d48565b600061322784841115836116aa565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61324d611128565b6001600160a01b031614158015613268575061326883613d7e565b1561329057613275611128565b6001600160a01b0316336001600160a01b031614905061086a565b613298612abb565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016132c793929190615dcc565b60206040518083038186803b1580156132df57600080fd5b505afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147f919061572f565b6000806000806133366000604060095461169b9092919063ffffffff16565b6009549094506133489060408061169b565b60095490935061335b906080604061169b565b60095490925061336e9060c0604061169b565b905090919293565b6133838160c06040611672565b6133908360806040611672565b61339c85604080611672565b6133a98760006040611672565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b60606133d461114c565b6001600160a01b031663f94d46686133ea610be2565b6040518263ffffffff1660e01b81526004016134069190615dc3565b60006040518083038186803b15801561341e57600080fd5b505afa158015613432573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261345a9190810190615663565b5091505061346a816126e5611704565b6060613475826139bd565b90506000613481612031565b5090506000613490828461272d565b9050610aca82826131f2565b60006060600060606000806134b089613b8c565b93509350935093506153d08a6134c857613d896134cc565b613e1e5b9050600060606134e4868689878f8f8963ffffffff16565b915091506153d08d6134f8576115ef6134fc565b6121b35b9050613509878383613e9c565b600061351989858463ffffffff16565b90506135288789888c85613c87565b836135348460006136ef565b9a509a5050505050505050505094509492505050565b600060606135718361355a61104c565b8151811061356457fe5b6020026020010151613f10565b61357a846139bd565b91509150915091565b60008060008060006135958888613f24565b92509250925060008684116135ab5760006135af565b8684035b905060008484116135c15760006135c5565b8484035b905060006135e06135d66000610dfb565b611778858761288f565b905060006135fb6135f16002610dfb565b611778858861288f565b919091019b939a509298505050505050505050565b600061157c61361f8484611558565b6127c684613fa6565b600061363782151560046116aa565b81838161364057fe5b049392505050565b7f08c379a000000000000000000000000000000000000000000000000000000000600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6000606060006136d284613fcc565b905060606136e1878784613fe2565b919791965090945050505050565b6060825160010167ffffffffffffffff8111801561370c57600080fd5b50604051908082528060200260200182016040528015613736578160200160208202803683370190505b50905060005b81518110156137a55761374d61104c565b8114613784578361375c61104c565b821061376b576001820361376d565b815b8151811061377757fe5b6020026020010151613786565b825b82828151811061379257fe5b602090810291909101015260010161373c565b5092915050565b6137c36001600160a01b038316151561019b6116aa565b6137cf8260008361159b565b6001600160a01b0382166000908152602081905260409020546137f590826101b2613218565b6001600160a01b0383166000908152602081905260409020556138286138238261381d61092c565b90614091565b61409f565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386c9190615dc3565b60405180910390a35050565b600061388782151560046116aa565b826138945750600061086a565b670de0b6b3a7640000838102906138ae908583816128c557fe5b8260018203816138ba57fe5b0460010191505061086a565b60006138d0612d46565b826040516020016110b7929190615cd1565b60006138f482516041146101b96116aa565b60208281015160408085015160608601518251600080825295019283905292939092811a9160019061392d908990859088908890615e7b565b6020604051602081039080840390855afa15801561394f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906139855750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610cc1919061595d565b60608180602001905181019061157c9190615978565b606080600183510367ffffffffffffffff811180156139db57600080fd5b50604051908082528060200260200182016040528015613a05578160200160208202803683370190505b50905060005b81518110156137a55783613a1d61104c565b8210613a2c5781600101613a2e565b815b81518110613a3857fe5b6020026020010151828281518110613a4c57fe5b6020908102919091010152600101613a0b565b613a6b6000838361159b565b613a7a6138238261280161092c565b6001600160a01b038216600090815260208190526040902054613a9d90826121b3565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061386c908590615dc3565b4690565b613af861104c565b811415613b0457610bdf565b6000818152600a60205260409020548015610c9857600080613b2583612a1f565b9150915080421115610aca57610aca84613b3e86611b62565b84611f08565b600061157c8383612ff0565b60006117ed600086606001518686866140a4565b600061157c8383613878565b6000610cc1613b85613b80610d2a565b613fa6565b8390613878565b60006060600080600080613b9e610c41565b91509150600060606000613bb38a8686614116565b9250925092506000613bc3612031565b5090506000868214613bde57613bd9828561272d565b613be0565b825b949c939b509099509297509095505050505050565b6000613c0c613c0261104c565b83141560646116aa565b613c1461104c565b821061166e57613c258260016115ef565b610cc1565b60008088613c4557613c4088888888888861416e565b613c53565b613c53888888888888614245565b9150915097509795505050505050565b60008088613c7957613c408888888888886142a6565b613c5388888888888861430c565b6000613c93868661272d565b90506000613ca1838561288f565b90506000613caf8683612ff0565b905080831115613cfd578083036000613cd9613cd383613cce84610dfb565b611558565b86613628565b90508015613cfa576000613ced8783613610565b9050613cf8816131e1565b505b50505b61131c88846131f2565b600061157c838361288f565b600080613d28613d21610d2a565b84906143bb565b905061157c83826115ef565b60006117ed600186606001518686866140a4565b6000613d526116c8565b905060005b81811015610c9857613d68816143f7565b15613d7657613d7681614426565b600101613d57565b6000610cc182614454565b600060606000613d988461445f565b90506001816002811115613da857fe5b1415613dc657613dbc87878a8c8989614475565b9250925050613e13565b6002816002811115613dd457fe5b1415613de557613dbc878a866144d4565b6000816002811115613df357fe5b1415613e0657613dbc87878a8c886144f2565b613e116101506128e0565b505b965096945050505050565b600060606000613e2d84613991565b90506001816003811115613e3d57fe5b1415613e5157613dbc87878a8c8989614593565b6003816003811115613e5f57fe5b1415613e7057613dbc878a866145e2565b6002816003811115613e7e57fe5b1415613e9157613dbc87878a8c88614600565b613e116101366128e0565b82518251613eab90829061240e565b60005b81811015613f0957613eea858281518110613ec557fe5b6020026020010151858381518110613ed957fe5b60200260200101518563ffffffff16565b858281518110613ef657fe5b6020908102919091010152600101613eae565b5050505050565b6000610cc182613f1e61092c565b906115ef565b6000806000613f3d84613f3887600161467a565b61272d565b9250613f47614783565b15613f6057613f56848661272d565b9150819050613f9f565b613f686147a7565b15613f8157829150613f7a848661272d565b9050613f9f565b613f9084613f3887600061467a565b9150613f9c848661272d565b90505b9250925092565b6000670de0b6b3a76400008210613fbe576000610cc1565b50670de0b6b3a76400000390565b60008180602001905181019061157c9190615bdf565b60606000613ff0838561288f565b9050845167ffffffffffffffff8111801561400a57600080fd5b50604051908082528060200260200182016040528015614034578160200160208202803683370190505b50915060005b8551811015614088576140698287838151811061405357fe5b6020026020010151612ff090919063ffffffff16565b83828151811061407557fe5b602090810291909101015260010161403a565b50509392505050565b600061157c83836001613218565b600255565b600060606140b1856139bd565b905060006140be85613bf5565b905060006140cb85613bf5565b905060006140d7612031565b50905060006140e6828661272d565b90508a15614108576140fc828686868e866147cb565b955050505050506117ed565b6140fc828686868e86614856565b6000606060008060606141288861354a565b9150915060008061413a838a8a613583565b91509150600061414a8584613610565b9050801561415b5761415b816131e1565b9390930199919850919650945050505050565b6000806060875167ffffffffffffffff8111801561418b57600080fd5b506040519080825280602002602001820160405280156141b5578160200160208202803683370190505b509050888188815181106141c557fe5b60200260200101818152505060006141e8878a8489896141e3610d2a565b6148e9565b90506142108a8a8a815181106141fa57fe5b60200260200101516115ef90919063ffffffff16565b89898151811061421c57fe5b6020908102919091010152600061423387836115ef565b919b919a509098505050505050505050565b60008060006142608689898c898961425b610d2a565b614b79565b9050614272818989815181106141fa57fe5b88888151811061427e57fe5b60209081029190910101526000614295868b6115ef565b919a91995090975050505050505050565b60008060006142c18689898c89896142bc610d2a565b614c68565b90506142e9818989815181106142d357fe5b60200260200101516121b390919063ffffffff16565b8888815181106142f557fe5b60209081029190910101526000614295868b6121b3565b6000806060875167ffffffffffffffff8111801561432957600080fd5b50604051908082528060200260200182016040528015614353578160200160208202803683370190505b5090508881888151811061436357fe5b6020026020010181815250506000614386878a848989614381610d2a565b614d35565b90506143988a8a8a815181106142d357fe5b8989815181106143a457fe5b6020908102919091010152600061423387836121b3565b60008282026143d584158061157557508385838161157257fe5b806143e457600091505061086a565b670de0b6b3a764000060001982016138ba565b6000610cc17f000000000000000000000000000000000000000000000000000000000000000060068401612b5d565b6000818152600a602052604090205461443e8161163d565b6000928352600a60205260409092209190915550565b6000610cc182614fb6565b600081806020019051810190610cc1919061589c565b6000606080600061448585614ff2565b915091506144958251885161240e565b6144a2826126e5886139bd565b60006144b48989858e8e6141e3610d2a565b90506144c48282111560cf6116aa565b9a91995090975050505050505050565b6000606060006144e384615015565b905060606136e1868884613fe2565b600060606000806145028561502b565b915091506145148651821060646116aa565b6060865167ffffffffffffffff8111801561452e57600080fd5b50604051908082528060200260200182016040528015614558578160200160208202803683370190505b50905061456c888884868e8e61425b610d2a565b81838151811061457857fe5b60209081029190910101529199919850909650505050505050565b600060608060006145a385615042565b915091506145b38751835161240e565b6145c0826126e5886139bd565b60006145d28989858e8e614381610d2a565b90506144c48282101560d06116aa565b6000606060006145f18461505a565b905060606136e1868389615070565b600060606000806146108561510c565b915091506146228651821060646116aa565b6060865167ffffffffffffffff8111801561463c57600080fd5b50604051908082528060200260200182016040528015614666578160200160208202803683370190505b50905061456c888884868e8e6142bc610d2a565b8151606090818167ffffffffffffffff8111801561469757600080fd5b506040519080825280602002602001820160405280156146c1578160200160208202803683370190505b50905060005b8281101561477a5760006146d961104c565b8210156146e657816146eb565b816001015b90506146f681612b35565b8061470d575085801561470d575061470d816143f7565b61472a5786828151811061471d57fe5b602002602001015161475a565b61475a87838151811061473957fe5b6020026020010151600a600084815260200190815260200160002054615123565b83838151811061476657fe5b6020908102919091010152506001016146c7565b50949350505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60006147dd838787815181106142d357fe5b8686815181106147e957fe5b60200260200101818152505060006148038888858861513e565b90508387878151811061481257fe5b60200260200101510387878151811061482757fe5b6020026020010181815250506148486001613f1e838a89815181106141fa57fe5b9150505b9695505050505050565b6000614868838786815181106141fa57fe5b86858151811061487457fe5b602002602001018181525050600061488e8888858961513e565b90508387868151811061489d57fe5b6020026020010151018786815181106148b257fe5b60200260200101818152505061484860016128018989815181106148d257fe5b6020026020010151846115ef90919063ffffffff16565b600080805b87518110156149275761491d88828151811061490657fe5b6020026020010151836121b390919063ffffffff16565b91506001016148ee565b506060865167ffffffffffffffff8111801561494257600080fd5b5060405190808252806020026020018201604052801561496c578160200160208202803683370190505b5090506000805b8951811015614a395760006149a4858c848151811061498e57fe5b602002602001015161387890919063ffffffff16565b90506149e68b83815181106149b557fe5b60200260200101516149e08c85815181106149cc57fe5b60200260200101518e86815181106141fa57fe5b90613878565b8483815181106149f257fe5b602002602001018181525050614a2e614a2782868581518110614a1157fe5b60200260200101516143bb90919063ffffffff16565b84906121b3565b925050600101614973565b506060895167ffffffffffffffff81118015614a5457600080fd5b50604051908082528060200260200182016040528015614a7e578160200160208202803683370190505b50905060005b8a51811015614b49576000848281518110614a9b57fe5b6020026020010151841115614b02576000614ac4614ab886613fa6565b8e858151811061405357fe5b90506000614ad8828e86815181106141fa57fe5b9050614af9614af282670de0b6b3a76400008d9003613878565b83906121b3565b92505050614b19565b8a8281518110614b0e57fe5b602002602001015190505b614b29818d84815181106141fa57fe5b838381518110614b3557fe5b602090810291909101015250600101614a84565b506000614b568c8361272d565b90506000614b64828a61288f565b9050613179614b7282613fa6565b8b906143bb565b600080614b9484614b8e876149e0818b6115ef565b906143bb565b90506000614ba48a8a848b61513e565b90506000614bb8828b8b815181106141fa57fe5b90506000805b8b51811015614be057614bd68c828151811061490657fe5b9150600101614bbe565b506000614c09828d8d81518110614bf357fe5b602002602001015161288f90919063ffffffff16565b90506000614c1682613fa6565b90506000614c2485836143bb565b90506000614c3286836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003612ff0565b82906121b3565b98505050505050505050979650505050505050565b600080614c7d84614b8e876149e0818b6121b3565b90506000614c8d8a8a848b61513e565b90506000614cb78a8a81518110614ca057fe5b6020026020010151836115ef90919063ffffffff16565b90506000805b8b51811015614cdf57614cd58c828151811061490657fe5b9150600101614cbd565b506000614cf2828d8d81518110614bf357fe5b90506000614cff82613fa6565b90506000614d0d85836143bb565b90506000614d1b86836115ef565b9050614c53614c4c83670de0b6b3a76400008d9003613878565b600080805b8751811015614d5c57614d5288828151811061490657fe5b9150600101614d3a565b506060865167ffffffffffffffff81118015614d7757600080fd5b50604051908082528060200260200182016040528015614da1578160200160208202803683370190505b5090506000805b8951811015614e3b576000614dc3858c8481518110614bf357fe5b9050614e058b8381518110614dd457fe5b6020026020010151614dff8c8581518110614deb57fe5b60200260200101518e86815181106142d357fe5b9061288f565b848381518110614e1157fe5b602002602001018181525050614e30614a278286858151811061405357fe5b925050600101614da8565b506060895167ffffffffffffffff81118015614e5657600080fd5b50604051908082528060200260200182016040528015614e80578160200160208202803683370190505b50905060005b8a51811015614f4157600083858381518110614e9e57fe5b60200260200101511115614efa576000614ec3614ab886670de0b6b3a76400006115ef565b90506000614ed7828e86815181106141fa57fe5b9050614ef1614af282670de0b6b3a76400008d9003612ff0565b92505050614f11565b8a8281518110614f0657fe5b602002602001015190505b614f21818d84815181106142d357fe5b838381518110614f2d57fe5b602090810291909101015250600101614e86565b506000614f4e8c8361272d565b90506000614f5c828a61288f565b9050670de0b6b3a7640000811115614fa757614f9a8a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c00008301612ff0565b965050505050505061484c565b6000965050505050505061484c565b6000614fe17ff4b7964d00000000000000000000000000000000000000000000000000000000611082565b821480610cc15750610cc1826152fb565b606060008280602001905181019061500a91906158b7565b909590945092505050565b60008180602001905181019061157c91906158fc565b6000808280602001905181019061500a9190615928565b606060008280602001905181019061500a91906159bb565b60008180602001905181019061157c91906159d9565b6060600061507e8484613878565b90506060855167ffffffffffffffff8111801561509a57600080fd5b506040519080825280602002602001820160405280156150c4578160200160208202803683370190505b50905060005b8651811015615102576150e383888381518110614a1157fe5b8282815181106150ef57fe5b60209081029190910101526001016150ca565b5095945050505050565b6000808280602001905181019061500a91906159f5565b600061157c61513584613cce85612a11565b6127c684612a03565b60008084518602905060008560008151811061515657fe5b60200260200101519050600086518760008151811061517157fe5b60200260200101510290506000600190505b87518110156151d7576151bc6151b66151af848b85815181106151a257fe5b6020026020010151611558565b8a51611558565b88613628565b91506151cd88828151811061274d57fe5b9250600101615183565b508685815181106151e457fe5b60200260200101518203915060006151fc8788611558565b9050600061522861521c61521484610b688988611558565b6103e8611558565b8a89815181106151a257fe5b9050600061524361523c6152148b89613628565b86906121b3565b905060008061525f61525586866121b3565b610b688d866121b3565b905060005b60ff8110156152df57819250615294615281866128018586611558565b610b688e613f1e88612801886002611558565b9150828211156152bd576001838303116152b8575097506115e79650505050505050565b6152d7565b6001828403116152d7575097506115e79650505050505050565b600101615264565b506152eb6101426128e0565b5050505050505050949350505050565b60006153267f2f1a0bc900000000000000000000000000000000000000000000000000000000611082565b82148061535a57506153577feb0f24d600000000000000000000000000000000000000000000000000000000611082565b82145b80610cc15750610cc182600061538f7f38e9922e00000000000000000000000000000000000000000000000000000000611082565b8214806153c357506153c07f50dd6ed900000000000000000000000000000000000000000000000000000000611082565b82145b80610cc157506000610cc1565bfe5b803561086a81615f59565b600082601f8301126153ed578081fd5b81356154006153fb82615f39565b615f12565b81815291506020808301908481018184028601820187101561542157600080fd5b60005b8481101561288457813584529282019290820190600101615424565b600082601f830112615450578081fd5b815161545e6153fb82615f39565b81815291506020808301908481018184028601820187101561547f57600080fd5b60005b8481101561288457815184529282019290820190600101615482565b600082601f8301126154ae578081fd5b813567ffffffffffffffff8111156154c4578182fd5b6154d76020601f19601f84011601615f12565b91508082528360208285010111156154ee57600080fd5b8060208401602084013760009082016020015292915050565b80516003811061086a57600080fd5b80516004811061086a57600080fd5b80356002811061086a57600080fd5b600060208284031215615545578081fd5b813561157c81615f59565b60008060408385031215615562578081fd5b823561556d81615f59565b9150602083013561557d81615f59565b809150509250929050565b60008060006060848603121561559c578081fd5b83356155a781615f59565b925060208401356155b781615f59565b929592945050506040919091013590565b600080600080600080600060e0888a0312156155e2578283fd5b87356155ed81615f59565b965060208801356155fd81615f59565b95506040880135945060608801359350608088013561561b81615f6e565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561564a578182fd5b823561565581615f59565b946020939093013593505050565b600080600060608486031215615677578081fd5b835167ffffffffffffffff8082111561568e578283fd5b818601915086601f8301126156a1578283fd5b81516156af6153fb82615f39565b80828252602080830192508086018b8283870289010111156156cf578788fd5b8796505b848710156156fa5780516156e681615f59565b8452600196909601959281019281016156d3565b508901519097509350505080821115615711578283fd5b5061571e86828701615440565b925050604084015190509250925092565b600060208284031215615740578081fd5b8151801515811461157c578182fd5b600080600080600080600060e0888a031215615769578081fd5b87359650602088013561577b81615f59565b9550604088013561578b81615f59565b9450606088013567ffffffffffffffff808211156157a7578283fd5b6157b38b838c016153dd565b955060808a0135945060a08a0135935060c08a01359150808211156157d6578283fd5b506157e38a828b0161549e565b91505092959891949750929550565b600060208284031215615803578081fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461157c578182fd5b600060208284031215615843578081fd5b815161157c81615f59565b60008060408385031215615860578182fd5b823561586b81615f59565b9150602083013567ffffffffffffffff811115615886578182fd5b6158928582860161549e565b9150509250929050565b6000602082840312156158ad578081fd5b61157c8383615507565b6000806000606084860312156158cb578081fd5b6158d58585615507565b9250602084015167ffffffffffffffff8111156158f0578182fd5b61571e86828701615440565b6000806040838503121561590e578182fd5b6159188484615507565b9150602083015190509250929050565b60008060006060848603121561593c578081fd5b6159468585615507565b925060208401519150604084015190509250925092565b60006020828403121561596e578081fd5b61157c8383615516565b6000806040838503121561598a578182fd5b6159948484615516565b9150602083015167ffffffffffffffff8111156159af578182fd5b61589285828601615440565b6000806000606084860312156159cf578081fd5b6158d58585615516565b600080604083850312156159eb578182fd5b6159188484615516565b600080600060608486031215615a09578081fd5b6159468585615516565b60008060008060808587031215615a28578182fd5b843567ffffffffffffffff80821115615a3f578384fd5b818701915061012080838a031215615a55578485fd5b615a5e81615f12565b9050615a6a8984615525565b8152615a7989602085016153d2565b6020820152615a8b89604085016153d2565b6040820152606083013560608201526080830135608082015260a083013560a0820152615abb8960c085016153d2565b60c0820152615acd8960e085016153d2565b60e08201526101008084013583811115615ae5578687fd5b615af18b82870161549e565b828401525050809650506020870135915080821115615b0e578384fd5b50615b1b878288016153dd565b949794965050505060408301359260600135919050565b600060208284031215615b43578081fd5b5035919050565b600060208284031215615b5b578081fd5b5051919050565b60008060408385031215615b74578182fd5b50508035926020909101359150565b60008060008060808587031215615b98578182fd5b8451935060208501519250604085015191506060850151615bb881615f59565b939692955090935050565b600060208284031215615bd4578081fd5b815161157c81615f6e565b60008060408385031215615bf1578182fd5b8251615bfc81615f6e565b6020939093015192949293505050565b6000815180845260208085019450808401835b83811015615c3b57815187529582019590820190600101615c1f565b509495945050505050565b60008151808452815b81811015615c6b57602081850181015186830182015201615c4f565b81811115615c7c5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015615d5c5783516001600160a01b031683529284019291840191600101615d37565b50909695505050505050565b60006020825261157c6020830184615c0c565b600060408252615d8e6040830185615c0c565b82810360208401526117ed8185615c0c565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526115e76040830184615c46565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261157c6020830184615c46565b6000838252604060208301526115e76040830184615c0c565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715615f3157600080fd5b604052919050565b600067ffffffffffffffff821115615f4f578081fd5b5060209081020190565b6001600160a01b0381168114610bdf57600080fd5b60ff81168114610bdf57600080fdfea2646970667358221220dcc30bf1aa1b16ae6ad0c83c0807514f1e6fdbe66d9e246a013ce46ba54d53bf64736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a" +} \ No newline at end of file diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/index.ts b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/index.ts similarity index 90% rename from pkg/deployments/tasks/20220906-composable-stable-pool/index.ts rename to pkg/deployments/tasks/20221122-composable-stable-pool-v2/index.ts index 096d7f31d4..ebcab7212f 100644 --- a/pkg/deployments/tasks/20220906-composable-stable-pool/index.ts +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/index.ts @@ -5,6 +5,6 @@ import { ComposableStablePoolDeployment } from './input'; export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { const input = task.input() as ComposableStablePoolDeployment; - const args = [input.Vault, input.ProtocolFeePercentagesProvider]; + const args = [input.Vault, input.ProtocolFeePercentagesProvider, input.FactoryVersion, input.PoolVersion]; await task.deployAndVerify('ComposableStablePoolFactory', args, from, force); }; diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/input.ts b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/input.ts new file mode 100644 index 0000000000..44e57b04b4 --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/input.ts @@ -0,0 +1,21 @@ +import Task, { TaskMode } from '../../src/task'; + +export type ComposableStablePoolDeployment = { + Vault: string; + ProtocolFeePercentagesProvider: string; + FactoryVersion: string; + PoolVersion: string; +}; + +const Vault = new Task('20210418-vault', TaskMode.READ_ONLY); +const ProtocolFeePercentagesProvider = new Task('20220725-protocol-fee-percentages-provider', TaskMode.READ_ONLY); + +const BaseVersion = { version: 2, deployment: '20221122-composable-stable-pool-v2' }; + +export default { + Vault, + ProtocolFeePercentagesProvider, + + FactoryVersion: JSON.stringify({ name: 'ComposableStablePoolFactory', ...BaseVersion }), + PoolVersion: JSON.stringify({ name: 'ComposableStablePool', ...BaseVersion }), +}; diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/readme.md b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/readme.md new file mode 100644 index 0000000000..2111926dfc --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/readme.md @@ -0,0 +1,14 @@ +# 2022-11-22 - Composable Stable Pool V2 + +Redeployment of `ComposableStablePoolFactory`, which allows creating Stable Pools that are suitable to be included in other Pools. This version adds proportional joins and exits, to improve the front-end UX. + +## Useful Files + +- [Ethereum addresses](./output/mainnet.json) +- [Polygon addresses](./output/polygon.json) +- [Arbitrum addresses](./output/arbitrum.json) +- [Optimism addresses](./output/optimism.json) +- [BSC addresses](./output.bsc.json) +- [Gnosis addresses](./output.gnosis.json) +- [`ComposableStablePool` ABI](./abi/ComposableStablePool.json) +- [`ComposableStablePoolFactory` ABI](./abi/ComposableStablePoolFactory.json) diff --git a/pkg/deployments/tasks/20221122-composable-stable-pool-v2/test/test.fork.ts b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/test/test.fork.ts new file mode 100644 index 0000000000..22bade5cc7 --- /dev/null +++ b/pkg/deployments/tasks/20221122-composable-stable-pool-v2/test/test.fork.ts @@ -0,0 +1,333 @@ +import hre from 'hardhat'; +import { expect } from 'chai'; +import { BigNumber, Contract } from 'ethers'; + +import * as expectEvent from '@balancer-labs/v2-helpers/src/test/expectEvent'; +import { describeForkTest } from '../../../src/forkTests'; +import Task, { TaskMode } from '../../../src/task'; +import { getForkedNetwork } from '../../../src/test'; +import { getSigner, impersonate } from '../../../src/signers'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; + +import { MAX_UINT256, ZERO_ADDRESS } from '@balancer-labs/v2-helpers/src/constants'; +import { bn, fp } from '@balancer-labs/v2-helpers/src/numbers'; +import { BasePoolEncoder, StablePoolEncoder, SwapKind } from '@balancer-labs/balancer-js'; +import { actionId } from '@balancer-labs/v2-helpers/src/models/misc/actions'; +import { expectEqualWithError } from '@balancer-labs/v2-helpers/src/test/relativeError'; + +describeForkTest('ComposableStablePool', 'mainnet', 16000000, function () { + let task: Task; + + let factory: Contract; + let owner: SignerWithAddress; + let whale: SignerWithAddress; + let govMultisig: SignerWithAddress; + let vault: Contract; + let authorizer: Contract; + let busd: Contract; + let usdt: Contract; + + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + const LARGE_TOKEN_HOLDER = '0x47ac0fb4f2d84898e4d9e7b4dab3c24507a6d503'; + const USDT_SCALING = bn(1e12); // USDT has 6 decimals, so its scaling factor is 1e12 + + const USDT = '0xdac17f958d2ee523a2206206994597c13d831ec7'; + const BUSD = '0x4Fabb145d64652a948d72533023f6E7A623C7C53'; + + const tokens = [BUSD, USDT]; + const amplificationParameter = bn(400); + const swapFeePercentage = fp(0.01); + const initialBalanceBUSD = fp(1e6); + const initialBalanceUSDT = fp(1e6).div(USDT_SCALING); + const initialBalances = [initialBalanceBUSD, initialBalanceUSDT]; + + before('run task', async () => { + task = new Task('20221122-composable-stable-pool-v2', TaskMode.TEST, getForkedNetwork(hre)); + await task.run({ force: true }); + factory = await task.deployedInstance('ComposableStablePoolFactory'); + }); + + before('load signers', async () => { + owner = await getSigner(); + whale = await impersonate(LARGE_TOKEN_HOLDER, fp(100)); + + govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + }); + + before('load vault and tokens', async () => { + const vaultTask = new Task('20210418-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); + vault = await vaultTask.instanceAt('Vault', await factory.getVault()); + authorizer = await new Task('20210418-authorizer', TaskMode.READ_ONLY, getForkedNetwork(hre)).deployedInstance( + 'Authorizer' + ); + + busd = await task.instanceAt('ERC20', BUSD); + usdt = await task.instanceAt('ERC20', USDT); + + await busd.connect(whale).approve(vault.address, MAX_UINT256); + await usdt.connect(whale).approve(vault.address, MAX_UINT256); + }); + + async function createPool(tokens: string[], initialize = true): Promise { + const rateProviders: string[] = Array(tokens.length).fill(ZERO_ADDRESS); + const cacheDurations: BigNumber[] = Array(tokens.length).fill(bn(0)); + const exemptFlags: boolean[] = Array(tokens.length).fill(false); + + const tx = await factory.create( + 'CSP', + 'CSBPT', + tokens, + amplificationParameter, + rateProviders, + cacheDurations, + exemptFlags, + swapFeePercentage, + owner.address + ); + + const event = expectEvent.inReceipt(await tx.wait(), 'PoolCreated'); + const pool = await task.instanceAt('ComposableStablePool', event.args.pool); + expect(await factory.isPoolFromFactory(pool.address)).to.be.true; + + if (initialize) { + const bptIndex = await pool.getBptIndex(); + const poolId = await pool.getPoolId(); + + const registeredBalances = getRegisteredBalances(bptIndex, initialBalances); + const { tokens: registeredTokens } = await vault.getPoolTokens(poolId); + + const userData = StablePoolEncoder.joinInit(registeredBalances); + // Use this for maxAmountsIn + registeredBalances[bptIndex] = MAX_UINT256; + + await vault.connect(whale).joinPool(poolId, whale.address, owner.address, { + assets: registeredTokens, + maxAmountsIn: registeredBalances, + fromInternalBalance: false, + userData, + }); + } + + return pool; + } + + function getRegisteredBalances(bptIndex: number, balances: BigNumber[]): BigNumber[] { + return Array.from({ length: balances.length + 1 }).map((_, i) => + i == bptIndex ? bn(0) : i < bptIndex ? balances[i] : balances[i - 1] + ); + } + + describe('getters', () => { + it('check factory version', async () => { + const expectedFactoryVersion = { + name: 'ComposableStablePoolFactory', + version: 2, + deployment: '20221122-composable-stable-pool-v2', + }; + + expect(await factory.version()).to.equal(JSON.stringify(expectedFactoryVersion)); + }); + + it('check pool version', async () => { + const pool = await createPool(tokens); + + const expectedPoolVersion = { + name: 'ComposableStablePool', + version: 2, + deployment: '20221122-composable-stable-pool-v2', + }; + + expect(await pool.version()).to.equal(JSON.stringify(expectedPoolVersion)); + }); + }); + + describe('pool operations', () => { + const amount = fp(500); + + let pool: Contract; + let poolId: string; + let bptIndex: number; + + context('swap', () => { + before('deploy a composable stable pool', async () => { + expect(await factory.isPoolFromFactory(ZERO_ADDRESS)).to.be.false; + + pool = await createPool(tokens); + + poolId = pool.getPoolId(); + const [registeredAddress] = await vault.getPool(poolId); + expect(registeredAddress).to.equal(pool.address); + + bptIndex = await pool.getBptIndex(); + }); + + it('performs a swap', async () => { + await busd.connect(whale).transfer(owner.address, amount); + await busd.connect(owner).approve(vault.address, amount); + + await vault + .connect(owner) + .swap( + { kind: SwapKind.GivenIn, poolId, assetIn: BUSD, assetOut: USDT, amount, userData: '0x' }, + { sender: owner.address, recipient: owner.address, fromInternalBalance: false, toInternalBalance: false }, + 0, + MAX_UINT256 + ); + + // Assert pool swap + const expectedUSDT = amount.div(USDT_SCALING); + expectEqualWithError(await busd.balanceOf(owner.address), 0, 0.0001); + expectEqualWithError(await usdt.balanceOf(owner.address), bn(expectedUSDT), 0.1); + }); + }); + + context('proportional join', () => { + before('deploy a composable stable pool', async () => { + expect(await factory.isPoolFromFactory(ZERO_ADDRESS)).to.be.false; + + pool = await createPool(tokens); + + poolId = pool.getPoolId(); + const [registeredAddress] = await vault.getPool(poolId); + expect(registeredAddress).to.equal(pool.address); + + bptIndex = await pool.getBptIndex(); + }); + + it('joins proportionally', async () => { + const ownerBptBalance = await pool.balanceOf(owner.address); + const bptOut = ownerBptBalance.div(5); + + const { tokens: registeredTokens } = await vault.getPoolTokens(poolId); + // Given the bptOut, the max amounts in should be slightly more than 1/5. Decimals make it a bit complicated. + const adjustedBalances = [ + initialBalanceBUSD.div(fp(4.99)).mul(fp(1)), + initialBalanceUSDT.div(bn(4.99e6)).mul(1e6), + ]; + const maxAmountsIn = getRegisteredBalances(bptIndex, adjustedBalances); + + const tx = await vault.connect(whale).joinPool(poolId, whale.address, whale.address, { + assets: registeredTokens, + maxAmountsIn: maxAmountsIn, + fromInternalBalance: false, + userData: StablePoolEncoder.joinAllTokensInForExactBptOut(bptOut), + }); + const receipt = await (await tx).wait(); + const { deltas: amountsIn } = expectEvent.inReceipt(receipt, 'PoolBalanceChanged').args; + + // Amounts in should be ~ 1/5 the initial balances + expect(amountsIn).to.equalWithError(maxAmountsIn, 0.01); + + // Make sure received BPT is close to what we expect + const currentBptBalance = await pool.balanceOf(whale.address); + expect(currentBptBalance).to.be.equalWithError(bptOut, 0.001); + }); + }); + + context('proportional exit', () => { + before('deploy a composable stable pool', async () => { + expect(await factory.isPoolFromFactory(ZERO_ADDRESS)).to.be.false; + + pool = await createPool(tokens); + + poolId = pool.getPoolId(); + const [registeredAddress] = await vault.getPool(poolId); + expect(registeredAddress).to.equal(pool.address); + + bptIndex = await pool.getBptIndex(); + }); + + it('exits proportionally', async () => { + const previousBptBalance = await pool.balanceOf(owner.address); + const bptIn = previousBptBalance.div(4); + + const { tokens: registeredTokens, balances: registeredBalances } = await vault.getPoolTokens(poolId); + + const tx = await vault.connect(owner).exitPool(poolId, owner.address, owner.address, { + assets: registeredTokens, + minAmountsOut: Array(registeredTokens.length).fill(0), + fromInternalBalance: false, + userData: StablePoolEncoder.exitExactBptInForTokensOut(bptIn), + }); + const receipt = await (await tx).wait(); + const { deltas } = expectEvent.inReceipt(receipt, 'PoolBalanceChanged').args; + const amountsOut = deltas.map((x: BigNumber) => x.mul(-1)); + + const expectedAmountsOut = (registeredBalances as BigNumber[]).map((b) => b.div(4)); + expectedAmountsOut[bptIndex] = bn(0); + + // Amounts out should be 1/4 the initial balances + expect(amountsOut).to.equalWithError(expectedAmountsOut, 0.00001); + + // Make sure sent BPT is close to what we expect + const currentBptBalance = await pool.balanceOf(owner.address); + expect(currentBptBalance).to.be.equalWithError(bn(previousBptBalance).sub(bptIn), 0.001); + }); + }); + }); + + describe('recovery mode', () => { + let pool: Contract; + let poolId: string; + + before('deploy and initialize a composable stable pool', async () => { + pool = await createPool(tokens); + poolId = await pool.getPoolId(); + }); + + before('enter recovery mode', async () => { + await authorizer.connect(govMultisig).grantRole(await actionId(pool, 'enableRecoveryMode'), govMultisig.address); + await pool.connect(govMultisig).enableRecoveryMode(); + expect(await pool.inRecoveryMode()).to.be.true; + }); + + it('can exit via recovery mode', async () => { + const bptBalance = await pool.balanceOf(owner.address); + expect(bptBalance).to.gt(0); + + const vaultUSDTBalanceBeforeExit = await usdt.balanceOf(vault.address); + const ownerUSDTBalanceBeforeExit = await usdt.balanceOf(owner.address); + + const { tokens: registeredTokens } = await vault.getPoolTokens(poolId); + + const userData = BasePoolEncoder.recoveryModeExit(bptBalance); + await vault.connect(owner).exitPool(poolId, owner.address, owner.address, { + assets: registeredTokens, + minAmountsOut: Array(registeredTokens.length).fill(0), + fromInternalBalance: false, + userData, + }); + + const remainingBalance = await pool.balanceOf(owner.address); + expect(remainingBalance).to.equal(0); + + const vaultUSDTBalanceAfterExit = await usdt.balanceOf(vault.address); + const ownerUSDTBalanceAfterExit = await usdt.balanceOf(owner.address); + + expect(vaultUSDTBalanceAfterExit).to.lt(vaultUSDTBalanceBeforeExit); + expect(ownerUSDTBalanceAfterExit).to.gt(ownerUSDTBalanceBeforeExit); + }); + }); + + describe('factory disable', () => { + it('the factory can be disabled', async () => { + await authorizer.connect(govMultisig).grantRole(await actionId(factory, 'disable'), govMultisig.address); + await factory.connect(govMultisig).disable(); + + expect(await factory.isDisabled()).to.be.true; + await expect( + factory.create( + 'CSP', + 'CSBPT', + tokens, + amplificationParameter, + Array(tokens.length).fill(ZERO_ADDRESS), + Array(tokens.length).fill(0), + Array(tokens.length).fill(false), + swapFeePercentage, + owner.address + ) + ).to.be.revertedWith('BAL#211'); + }); + }); +}); diff --git a/pkg/deployments/tasks/deprecated/20211208-stable-phantom-pool/readme.md b/pkg/deployments/tasks/deprecated/20211208-stable-phantom-pool/readme.md index df3794ac61..20d16ab8c7 100644 --- a/pkg/deployments/tasks/deprecated/20211208-stable-phantom-pool/readme.md +++ b/pkg/deployments/tasks/deprecated/20211208-stable-phantom-pool/readme.md @@ -2,7 +2,7 @@ > ⚠️ **DEPRECATED: do not use** ⚠️ > -> This factory and associated Pools have been deprecated due to numerical issues when one of the token depegs. Use this [updated version](../../20220906-composable-stable-pool) instead. +> This factory and associated Pools have been deprecated due to numerical issues when one of the token depegs. Use this [updated version](../../20221122-composable-stable-pool-v2) instead. Deployment of the `StablePhantomPoolFactory`, for Meta Stable Pools with preminted BPT of up to 4 tokens. diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/artifact/ComposableStablePoolFactory.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/artifact/ComposableStablePoolFactory.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/artifact/ComposableStablePoolFactory.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/artifact/ComposableStablePoolFactory.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/build-info/ComposableStablePoolFactory.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/build-info/ComposableStablePoolFactory.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/build-info/ComposableStablePoolFactory.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/build-info/ComposableStablePoolFactory.json diff --git a/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/index.ts b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/index.ts new file mode 100644 index 0000000000..c6a9264e53 --- /dev/null +++ b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/index.ts @@ -0,0 +1,10 @@ +import Task from '../../../src/task'; +import { TaskRunOptions } from '../../../src/types'; +import { ComposableStablePoolDeployment } from './input'; + +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as ComposableStablePoolDeployment; + + const args = [input.Vault, input.ProtocolFeePercentagesProvider]; + await task.deployAndVerify('ComposableStablePoolFactory', args, from, force); +}; diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/input.ts b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/input.ts similarity index 87% rename from pkg/deployments/tasks/20220906-composable-stable-pool/input.ts rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/input.ts index e13b794f33..b0cdca1070 100644 --- a/pkg/deployments/tasks/20220906-composable-stable-pool/input.ts +++ b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/input.ts @@ -1,4 +1,4 @@ -import Task, { TaskMode } from '../../src/task'; +import Task, { TaskMode } from '../../../src/task'; export type ComposableStablePoolDeployment = { Vault: string; diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/output/arbitrum.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/arbitrum.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/output/arbitrum.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/arbitrum.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/output/bsc.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/bsc.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/output/bsc.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/bsc.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/output/goerli.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/goerli.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/output/goerli.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/goerli.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/output/mainnet.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/mainnet.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/output/mainnet.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/mainnet.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/output/optimism.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/optimism.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/output/optimism.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/optimism.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/output/polygon.json b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/polygon.json similarity index 100% rename from pkg/deployments/tasks/20220906-composable-stable-pool/output/polygon.json rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/output/polygon.json diff --git a/pkg/deployments/tasks/20220906-composable-stable-pool/readme.md b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/readme.md similarity index 67% rename from pkg/deployments/tasks/20220906-composable-stable-pool/readme.md rename to pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/readme.md index 8a48dec5f8..4ad13d944e 100644 --- a/pkg/deployments/tasks/20220906-composable-stable-pool/readme.md +++ b/pkg/deployments/tasks/deprecated/20220906-composable-stable-pool/readme.md @@ -1,5 +1,9 @@ # 2022-09-06 - Composable Stable Pool +> ⚠️ **DEPRECATED: do not use** ⚠️ +> +> This factory and associated Pools have been deprecated in favor of a new version that supports proportional joins and exits. Use this [updated version](../../20221122-composable-stable-pool-v2) instead. + Deployment of `ComposableStablePoolFactory`, which allows creating Stable Pools that are suitable to be included in other Pools. ## Useful Files diff --git a/pkg/interfaces/contracts/pool-stable/StablePoolUserData.sol b/pkg/interfaces/contracts/pool-stable/StablePoolUserData.sol index 5dcf72451e..3c66a1f1b1 100644 --- a/pkg/interfaces/contracts/pool-stable/StablePoolUserData.sol +++ b/pkg/interfaces/contracts/pool-stable/StablePoolUserData.sol @@ -15,8 +15,8 @@ pragma solidity >=0.7.0 <0.9.0; library StablePoolUserData { - enum JoinKind { INIT, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT } - enum ExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT, BPT_IN_FOR_EXACT_TOKENS_OUT } + enum JoinKind { INIT, EXACT_TOKENS_IN_FOR_BPT_OUT, TOKEN_IN_FOR_EXACT_BPT_OUT, ALL_TOKENS_IN_FOR_EXACT_BPT_OUT } + enum ExitKind { EXACT_BPT_IN_FOR_ONE_TOKEN_OUT, BPT_IN_FOR_EXACT_TOKENS_OUT, EXACT_BPT_IN_FOR_ALL_TOKENS_OUT } function joinKind(bytes memory self) internal pure returns (JoinKind) { return abi.decode(self, (JoinKind)); @@ -44,12 +44,20 @@ library StablePoolUserData { (, bptAmountOut, tokenIndex) = abi.decode(self, (JoinKind, uint256, uint256)); } + function allTokensInForExactBptOut(bytes memory self) internal pure returns (uint256 bptAmountOut) { + (, bptAmountOut) = abi.decode(self, (JoinKind, uint256)); + } + // Exits function exactBptInForTokenOut(bytes memory self) internal pure returns (uint256 bptAmountIn, uint256 tokenIndex) { (, bptAmountIn, tokenIndex) = abi.decode(self, (ExitKind, uint256, uint256)); } + function exactBptInForTokensOut(bytes memory self) internal pure returns (uint256 bptAmountIn) { + (, bptAmountIn) = abi.decode(self, (ExitKind, uint256)); + } + function bptInForExactTokensOut(bytes memory self) internal pure diff --git a/pkg/interfaces/contracts/pool-utils/IPoolVersion.sol b/pkg/interfaces/contracts/pool-utils/IPoolVersion.sol new file mode 100644 index 0000000000..56d3e4cf88 --- /dev/null +++ b/pkg/interfaces/contracts/pool-utils/IPoolVersion.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +pragma solidity >=0.7.0 <0.9.0; + +/** + * @notice Simple interface to retrieve the version of pools deployed by a pool factory. + */ +interface IPoolVersion { + /** + * @dev Returns a JSON representation of the deployed pool version containing name, version number and task ID. + * + * This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about + * each other. Note that this value will only be updated at factory creation time. + */ + function getPoolVersion() external view returns (string memory); +} diff --git a/pkg/pool-stable/contracts/ComposableStablePool.sol b/pkg/pool-stable/contracts/ComposableStablePool.sol index a1be4bd5e3..8556e7c5aa 100644 --- a/pkg/pool-stable/contracts/ComposableStablePool.sol +++ b/pkg/pool-stable/contracts/ComposableStablePool.sol @@ -19,6 +19,7 @@ import "@balancer-labs/v2-interfaces/contracts/pool-stable/StablePoolUserData.so import "@balancer-labs/v2-interfaces/contracts/solidity-utils/helpers/BalancerErrors.sol"; import "@balancer-labs/v2-interfaces/contracts/standalone-utils/IProtocolFeePercentagesProvider.sol"; import "@balancer-labs/v2-interfaces/contracts/pool-utils/IRateProvider.sol"; +import "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol"; import "@balancer-labs/v2-solidity-utils/contracts/math/FixedPoint.sol"; import "@balancer-labs/v2-solidity-utils/contracts/math/Math.sol"; @@ -50,6 +51,7 @@ import "./StableMath.sol"; */ contract ComposableStablePool is IRateProvider, + IVersion, BaseGeneralPool, StablePoolAmplification, ComposableStablePoolRates, @@ -64,6 +66,8 @@ contract ComposableStablePool is // We are preminting half of that value (rounded up). uint256 private constant _PREMINTED_TOKEN_BALANCE = 2**(111); + string private _version; + // The constructor arguments are received in a struct to work around stack-too-deep issues struct NewPoolParams { IVault vault; @@ -79,6 +83,7 @@ contract ComposableStablePool is uint256 pauseWindowDuration; uint256 bufferPeriodDuration; address owner; + string version; } constructor(NewPoolParams memory params) @@ -102,7 +107,7 @@ contract ComposableStablePool is ProviderFeeIDs({ swap: ProtocolFeeType.SWAP, yield: ProtocolFeeType.YIELD, aum: ProtocolFeeType.AUM }) ) { - // solhint-disable-previous-line no-empty-blocks + _version = params.version; } // Translate parameters to avoid stack-too-deep issues in the constructor @@ -133,6 +138,10 @@ contract ComposableStablePool is }); } + function version() external view override returns (string memory) { + return _version; + } + /** * @notice Return the minimum BPT balance, required to avoid minimum token balances. * @dev This amount is minted and immediately burned on pool initialization, so that the total supply @@ -715,7 +724,7 @@ contract ComposableStablePool is } /** - * @dev Support single- and multi-token joins, but not explicit proportional joins. + * @dev Support single- and multi-token joins, plus explicit proportional joins. */ function _doJoin( uint256[] memory balances, @@ -736,6 +745,8 @@ contract ComposableStablePool is scalingFactors, userData ); + } else if (kind == StablePoolUserData.JoinKind.ALL_TOKENS_IN_FOR_EXACT_BPT_OUT) { + return _joinAllTokensInForExactBptOut(preJoinExitSupply, balances, userData); } else if (kind == StablePoolUserData.JoinKind.TOKEN_IN_FOR_EXACT_BPT_OUT) { return _joinTokenInForExactBPTOut(preJoinExitSupply, preJoinExitInvariant, currentAmp, balances, userData); } else { @@ -743,6 +754,20 @@ contract ComposableStablePool is } } + /** + * @dev Proportional join. Pays no swap fees. + */ + function _joinAllTokensInForExactBptOut( + uint256 actualSupply, + uint256[] memory balances, + bytes memory userData + ) private pure returns (uint256, uint256[] memory) { + uint256 bptAmountOut = userData.allTokensInForExactBptOut(); + uint256[] memory amountsIn = StableMath._computeProportionalAmountsIn(balances, bptAmountOut, actualSupply); + + return (bptAmountOut, amountsIn); + } + /** * @dev Multi-token join. Joins with proportional amounts will pay no protocol fees. */ @@ -811,8 +836,8 @@ contract ComposableStablePool is // Exit Hooks /** - * @dev Support single- and multi-token exits, but not explicit proportional exits, which are - * supported through Recovery Mode. + * @dev Support single- and multi-token exits, plus explicit proportional exits (in addition to the + * recovery mode exit). */ function _doExit( uint256[] memory balances, @@ -833,6 +858,8 @@ contract ComposableStablePool is scalingFactors, userData ); + } else if (kind == StablePoolUserData.ExitKind.EXACT_BPT_IN_FOR_ALL_TOKENS_OUT) { + return _exitExactBPTInForTokensOut(preJoinExitSupply, balances, userData); } else if (kind == StablePoolUserData.ExitKind.EXACT_BPT_IN_FOR_ONE_TOKEN_OUT) { return _exitExactBPTInForTokenOut(preJoinExitSupply, preJoinExitInvariant, currentAmp, balances, userData); } else { @@ -840,6 +867,22 @@ contract ComposableStablePool is } } + /** + * @dev Proportional exit. Pays no swap fees. This is functionally equivalent to the recovery mode exit, + * except this doesn't skip protocol fee collection, calling rate providers, etc., and doesn't require + * recovery mode to be enabled. + */ + function _exitExactBPTInForTokensOut( + uint256 actualSupply, + uint256[] memory balances, + bytes memory userData + ) private pure returns (uint256, uint256[] memory) { + uint256 bptAmountIn = userData.exactBptInForTokensOut(); + uint256[] memory amountsOut = StableMath._computeProportionalAmountsOut(balances, actualSupply, bptAmountIn); + + return (bptAmountIn, amountsOut); + } + /** * @dev Multi-token exit. Proportional exits will pay no protocol fees. */ diff --git a/pkg/pool-stable/contracts/ComposableStablePoolFactory.sol b/pkg/pool-stable/contracts/ComposableStablePoolFactory.sol index 9002e9f5ab..35f711dfc9 100644 --- a/pkg/pool-stable/contracts/ComposableStablePoolFactory.sol +++ b/pkg/pool-stable/contracts/ComposableStablePoolFactory.sol @@ -15,6 +15,8 @@ pragma solidity ^0.7.0; pragma experimental ABIEncoderV2; +import "@balancer-labs/v2-interfaces/contracts/pool-utils/IPoolVersion.sol"; +import "@balancer-labs/v2-interfaces/contracts/pool-utils/IVersion.sol"; import "@balancer-labs/v2-interfaces/contracts/vault/IVault.sol"; import "@balancer-labs/v2-pool-utils/contracts/factories/BasePoolFactory.sol"; @@ -22,11 +24,26 @@ import "@balancer-labs/v2-pool-utils/contracts/factories/FactoryWidePauseWindow. import "./ComposableStablePool.sol"; -contract ComposableStablePoolFactory is BasePoolFactory, FactoryWidePauseWindow { - constructor(IVault vault, IProtocolFeePercentagesProvider protocolFeeProvider) - BasePoolFactory(vault, protocolFeeProvider, type(ComposableStablePool).creationCode) - { - // solhint-disable-previous-line no-empty-blocks +contract ComposableStablePoolFactory is IVersion, IPoolVersion, BasePoolFactory, FactoryWidePauseWindow { + string private _version; + string private _poolVersion; + + constructor( + IVault vault, + IProtocolFeePercentagesProvider protocolFeeProvider, + string memory factoryVersion, + string memory poolVersion + ) BasePoolFactory(vault, protocolFeeProvider, type(ComposableStablePool).creationCode) { + _version = factoryVersion; + _poolVersion = poolVersion; + } + + function version() external view override returns (string memory) { + return _version; + } + + function getPoolVersion() public view override returns (string memory) { + return _poolVersion; } /** @@ -61,7 +78,8 @@ contract ComposableStablePoolFactory is BasePoolFactory, FactoryWidePauseWindow swapFeePercentage: swapFeePercentage, pauseWindowDuration: pauseWindowDuration, bufferPeriodDuration: bufferPeriodDuration, - owner: owner + owner: owner, + version: getPoolVersion() }) ) ) diff --git a/pkg/pool-stable/contracts/ComposableStablePoolProtocolFees.sol b/pkg/pool-stable/contracts/ComposableStablePoolProtocolFees.sol index 9c8e5814b3..d2a69d7283 100644 --- a/pkg/pool-stable/contracts/ComposableStablePoolProtocolFees.sol +++ b/pkg/pool-stable/contracts/ComposableStablePoolProtocolFees.sol @@ -256,14 +256,33 @@ abstract contract ComposableStablePoolProtocolFees is uint256 postJoinExitInvariant = StableMath._calculateInvariant(currentAmp, balances); - uint256 protocolFeeAmount = InvariantGrowthProtocolSwapFees.calcDueProtocolFees( - postJoinExitInvariant.divDown(preJoinExitInvariant), - preJoinExitSupply, - postJoinExitSupply, - getProtocolFeePercentageCache(ProtocolFeeType.SWAP) - ); + // Compute the portion of the invariant increase due to fees + uint256 supplyGrowthRatio = postJoinExitSupply.divDown(preJoinExitSupply); + uint256 feelessInvariant = preJoinExitInvariant.mulDown(supplyGrowthRatio); + + // The postJoinExitInvariant should always be greater than the feelessInvariant (since the invariant and total + // supply move proportionally outside of fees, which the postJoinInvariant includes and the feelessInvariant + // does not). However, in the unexpected case in which due to rounding errors this is not true, we simply skip + // further computation of protocol fees. + if (postJoinExitInvariant > feelessInvariant) { + uint256 invariantDeltaFromFees = postJoinExitInvariant - feelessInvariant; + + // To convert to a percentage of pool ownership, multiply by the rate, + // then normalize against the final invariant + uint256 protocolOwnershipPercentage = Math.divDown( + Math.mul(invariantDeltaFromFees, getProtocolFeePercentageCache(ProtocolFeeType.SWAP)), + postJoinExitInvariant + ); - _payProtocolFees(protocolFeeAmount); + if (protocolOwnershipPercentage > 0) { + uint256 protocolFeeAmount = ExternalFees.bptForPoolOwnershipPercentage( + postJoinExitSupply, + protocolOwnershipPercentage + ); + + _payProtocolFees(protocolFeeAmount); + } + } _updatePostJoinExit(currentAmp, postJoinExitInvariant); } diff --git a/pkg/pool-stable/contracts/StableMath.sol b/pkg/pool-stable/contracts/StableMath.sol index 692f707b0e..114747cca2 100644 --- a/pkg/pool-stable/contracts/StableMath.sol +++ b/pkg/pool-stable/contracts/StableMath.sol @@ -447,4 +447,54 @@ library StableMath { _revert(Errors.STABLE_GET_BALANCE_DIDNT_CONVERGE); } + + function _computeProportionalAmountsIn( + uint256[] memory balances, + uint256 bptAmountOut, + uint256 totalBPT + ) internal pure returns (uint256[] memory) { + /************************************************************************************ + // tokensInForExactBptOut // + // (per token) // + // aI = amountIn / bptOut \ // + // b = balance aI = b * | ------------ | // + // bptOut = bptAmountOut \ totalBPT / // + // bpt = totalBPT // + ************************************************************************************/ + + // Tokens in, so we round up overall. + uint256 bptRatio = bptAmountOut.divUp(totalBPT); + + uint256[] memory amountsIn = new uint256[](balances.length); + for (uint256 i = 0; i < balances.length; i++) { + amountsIn[i] = balances[i].mulUp(bptRatio); + } + + return amountsIn; + } + + function _computeProportionalAmountsOut( + uint256[] memory balances, + uint256 totalSupply, + uint256 bptAmountIn + ) internal pure returns (uint256[] memory amountsOut) { + /********************************************************************************************** + // exactBPTInForTokensOut // + // (per token) // + // aO = tokenAmountOut / bptIn \ // + // b = tokenBalance a0 = b * | --------------------- | // + // bptIn = bptAmountIn \ bptTotalSupply / // + // bpt = bptTotalSupply // + **********************************************************************************************/ + + // Since we're computing an amount out, we round down overall. This means rounding down on both the + // multiplication and division. + + uint256 bptRatio = bptAmountIn.divDown(totalSupply); + + amountsOut = new uint256[](balances.length); + for (uint256 i = 0; i < balances.length; i++) { + amountsOut[i] = balances[i].mulDown(bptRatio); + } + } } diff --git a/pkg/pool-stable/test/ComposableStablePool.test.ts b/pkg/pool-stable/test/ComposableStablePool.test.ts index 638b88f4ce..fa005e30d2 100644 --- a/pkg/pool-stable/test/ComposableStablePool.test.ts +++ b/pkg/pool-stable/test/ComposableStablePool.test.ts @@ -998,7 +998,7 @@ describe('ComposableStablePool', () => { function itJoinsExactBPTOutCorrectly() { it('fails if not initialized', async () => { - await expect(pool.joinGivenOut({ bptOut: fp(2), token })).to.be.revertedWith('UNINITIALIZED'); + await expect(pool.singleJoinGivenOut({ bptOut: fp(2), token })).to.be.revertedWith('UNINITIALIZED'); }); context('once initialized', () => { @@ -1010,9 +1010,9 @@ describe('ComposableStablePool', () => { const previousBptBalance = await pool.balanceOf(recipient); const bptOut = pct(previousBptBalance, 0.2); - await expect(pool.joinGivenOut({ from: recipient, recipient, bptOut, token: 100 })).to.be.revertedWith( - 'OUT_OF_BOUNDS' - ); + await expect( + pool.singleJoinGivenOut({ from: recipient, recipient, bptOut, token: 100 }) + ).to.be.revertedWith('OUT_OF_BOUNDS'); }); it('grants exact BPT for token in', async () => { @@ -1021,7 +1021,7 @@ describe('ComposableStablePool', () => { const bptOut = pct(previousBptBalance, 0.2); const expectedAmountIn = await pool.estimateTokenInGivenBptOut(token, bptOut); - const result = await pool.joinGivenOut({ from: recipient, recipient, bptOut, token }); + const result = await pool.singleJoinGivenOut({ from: recipient, recipient, bptOut, token }); // Only token in should be the one transferred expect(result.amountsIn[tokenIndexWithBpt]).to.be.equalWithError(expectedAmountIn, 0.001); @@ -1037,12 +1037,12 @@ describe('ComposableStablePool', () => { // 20% of previous balance const bptOut = pct(previousBptBalance, 0.2); - const queryResult = await pool.queryJoinGivenOut({ recipient, bptOut, token }); + const queryResult = await pool.querySingleJoinGivenOut({ recipient, bptOut, token }); expect(queryResult.bptOut).to.be.equal(bptOut); expect(queryResult.amountsIn.filter((_, i) => i != tokenIndexWithBpt)).to.be.zeros; - const result = await pool.joinGivenOut({ from: recipient, bptOut, token }); + const result = await pool.singleJoinGivenOut({ from: recipient, bptOut, token }); // Query and join should match exactly expect(result.amountsIn[tokenIndexWithBpt]).to.equal(queryResult.amountsIn[tokenIndexWithBpt]); }); @@ -1052,7 +1052,7 @@ describe('ComposableStablePool', () => { // 32.5% of previous balance const bptOut = pct(previousBptBalance, 0.325); - const queryResult = await pool.queryJoinGivenOut({ recipient, bptOut, token }); + const queryResult = await pool.querySingleJoinGivenOut({ recipient, bptOut, token }); const amountIn = await pool.querySwapGivenOut({ from: recipient, @@ -1068,13 +1068,65 @@ describe('ComposableStablePool', () => { itStoresThePostInvariantAndAmp(async () => { const previousBptBalance = await pool.balanceOf(recipient); const bptOut = pct(previousBptBalance, 0.2); - await pool.joinGivenOut({ from: recipient, recipient, bptOut, token }); + await pool.singleJoinGivenOut({ from: recipient, recipient, bptOut, token }); + }); + + it('reverts if paused', async () => { + await pool.pause(); + + await expect(pool.singleJoinGivenOut({ bptOut: fp(2), token })).to.be.revertedWith('PAUSED'); + }); + }); + } + }); + + describe('join all tokens in for exact BPT out', () => { + context('not in recovery mode', () => { + itJoinsGivenExactBPTOutCorrectly(); + }); + + context('in recovery mode', () => { + sharedBeforeEach('enable recovery mode', async () => { + await pool.enableRecoveryMode(admin); + }); + + itJoinsGivenExactBPTOutCorrectly(); + }); + + function itJoinsGivenExactBPTOutCorrectly() { + it('fails if not initialized', async () => { + await expect(pool.joinGivenOut({ recipient, bptOut: fp(1) })).to.be.revertedWith('UNINITIALIZED'); + }); + + context('once initialized', () => { + let bptOut: BigNumberish; + let expectedAmountsIn: BigNumberish[]; + let previousBptBalance: BigNumberish; + + sharedBeforeEach('initialize pool', async () => { + await pool.init({ recipient, initialBalances }); + bptIndex = await pool.getBptIndex(); + expectedAmountsIn = initialBalances.map((n, i) => (i != bptIndex ? bn(n).div(3) : 0)); + previousBptBalance = await pool.balanceOf(recipient); + + bptOut = previousBptBalance.div(3); + }); + + it('grants tokens for exact BPT', async () => { + const result = await pool.joinGivenOut({ bptOut, recipient, from: recipient }); + + // Amounts out should be 1/3 the initial balances + expect(result.amountsIn).to.equalWithError(expectedAmountsIn, 0.0000001); + + // Make sure received BPT is close to what we expect + const currentBptBalance = await pool.balanceOf(recipient); + expect(currentBptBalance).to.be.equalWithError(bn(previousBptBalance).add(bptOut), 0.001); }); it('reverts if paused', async () => { await pool.pause(); - await expect(pool.joinGivenOut({ bptOut: fp(2), token })).to.be.revertedWith('PAUSED'); + await expect(pool.joinGivenOut({ bptOut })).to.be.revertedWith('PAUSED'); }); }); } @@ -1295,6 +1347,43 @@ describe('ComposableStablePool', () => { }); } }); + + describe('exit exact BPT in for all tokens out', () => { + context('not in recovery mode', () => { + itExitsExactBptInForTokensOutProperly(); + }); + + context('in recovery mode', () => { + sharedBeforeEach('enable recovery mode', async () => { + await pool.enableRecoveryMode(admin); + }); + + itExitsExactBptInForTokensOutProperly(); + }); + + function itExitsExactBptInForTokensOutProperly() { + it('grants tokens for exact bpt', async () => { + // Request a third of the token balances + const expectedAmountsOut = initialBalances.map((balance) => bn(balance).div(3)); + // Exit with a third of the BPT balance + const expectedBptIn = previousBptBalance.div(3); + + const result = await pool.exitGivenIn({ from: lp, bptIn: expectedBptIn }); + + // Token balances should been reduced as requested + expect(result.amountsOut).to.be.equalWithError(expectedAmountsOut, 0.00001); + + // BPT balance should have been reduced to 2/3 because we are returning 1/3 of the tokens + expect(await pool.balanceOf(lp)).to.be.equalWithError(previousBptBalance.sub(expectedBptIn), 0.001); + }); + + it('reverts if paused', async () => { + await pool.pause(); + + await expect(pool.exitGivenIn({ from: lp, bptIn: previousBptBalance })).to.be.revertedWith('PAUSED'); + }); + } + }); }); }); @@ -1487,9 +1576,9 @@ describe('ComposableStablePool', () => { const bptOut = pct(previousBptBalance, 0.18); const query = async () => - (await pool.queryJoinGivenOut({ recipient: lp, bptOut, token })).amountsIn[tokenIndexWithBpt]; + (await pool.querySingleJoinGivenOut({ recipient: lp, bptOut, token })).amountsIn[tokenIndexWithBpt]; const actual = async () => - (await pool.joinGivenOut({ from: lp, recipient: lp, bptOut, token })).amountsIn[tokenIndexWithBpt]; + (await pool.singleJoinGivenOut({ from: lp, recipient: lp, bptOut, token })).amountsIn[tokenIndexWithBpt]; await expectScalingFactorsToBeUpdated(query, actual); }); diff --git a/pkg/pool-stable/test/ComposableStablePoolFactory.test.ts b/pkg/pool-stable/test/ComposableStablePoolFactory.test.ts index 110fdc8e90..e7a4fbad8c 100644 --- a/pkg/pool-stable/test/ComposableStablePoolFactory.test.ts +++ b/pkg/pool-stable/test/ComposableStablePoolFactory.test.ts @@ -27,6 +27,7 @@ describe('ComposableStablePoolFactory', function () { let createTime: BigNumber; let protocolFeeExemptFlags: boolean[]; + let factoryVersion: string, poolVersion: string; before('setup signers', async () => { [, owner] = await ethers.getSigners(); @@ -34,7 +35,19 @@ describe('ComposableStablePoolFactory', function () { sharedBeforeEach('deploy factory & tokens', async () => { vault = await Vault.create(); - factory = await deploy('ComposableStablePoolFactory', { args: [vault.address, vault.getFeesProvider().address] }); + factoryVersion = JSON.stringify({ + name: 'ComposableStablePoolFactory', + version: '1', + deployment: 'test-deployment', + }); + poolVersion = JSON.stringify({ + name: 'ComposableStablePool', + version: '0', + deployment: 'test-deployment', + }); + factory = await deploy('ComposableStablePoolFactory', { + args: [vault.address, vault.getFeesProvider().address, factoryVersion, poolVersion], + }); createTime = await currentTimestamp(); tokens = await TokenList.create(['baDAI', 'baUSDC', 'baUSDT'], { sorted: true }); @@ -70,10 +83,22 @@ describe('ComposableStablePoolFactory', function () { pool = await createPool(); }); + it('sets the factory version', async () => { + expect(await factory.version()).to.equal(factoryVersion); + }); + it('sets the vault', async () => { expect(await pool.getVault()).to.equal(vault.address); }); + it('sets the pool version', async () => { + expect(await pool.version()).to.equal(poolVersion); + }); + + it('gets pool version from the factory', async () => { + expect(await factory.getPoolVersion()).to.equal(poolVersion); + }); + it('registers tokens in the vault', async () => { const poolId = await pool.getPoolId(); const poolTokens = await vault.getPoolTokens(poolId); diff --git a/pvt/benchmarks/misc.ts b/pvt/benchmarks/misc.ts index 5e1180d6b7..3eafc9625b 100644 --- a/pvt/benchmarks/misc.ts +++ b/pvt/benchmarks/misc.ts @@ -216,7 +216,7 @@ async function deployPoolFromFactory( }); factory = await deploy('v2-pool-weighted/ControlledManagedPoolFactory', { args: [baseFactory.address] }); } else if (poolName == 'ComposableStablePool') { - factory = await deploy(`${fullName}Factory`, { args: [vault.address, vault.getFeesProvider().address] }); + factory = await deploy(`${fullName}Factory`, { args: [vault.address, vault.getFeesProvider().address, '', ''] }); } else { factory = await deploy(`${fullName}Factory`, { args: [vault.address, vault.getFeesProvider().address] }); } diff --git a/pvt/helpers/src/models/pools/stable/StablePool.ts b/pvt/helpers/src/models/pools/stable/StablePool.ts index 9eabd9155e..592ed437f2 100644 --- a/pvt/helpers/src/models/pools/stable/StablePool.ts +++ b/pvt/helpers/src/models/pools/stable/StablePool.ts @@ -9,7 +9,7 @@ import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { Account, NAry, TxParams } from '../../types/types'; import { MAX_UINT112, ZERO_ADDRESS, MAX_UINT256 } from '../../../constants'; import { GeneralSwap, ProtocolFee, QueryBatchSwap } from '../../vault/types'; -import { LastJoinExitData, RawStablePoolDeployment, SwapStablePool } from './types'; +import { LastJoinExitData, MultiExitGivenInStablePool, RawStablePoolDeployment, SwapStablePool } from './types'; import Vault from '../../vault/Vault'; import Token from '../../tokens/Token'; @@ -21,7 +21,8 @@ import * as expectEvent from '../../../test/expectEvent'; import { InitStablePool, JoinGivenInStablePool, - JoinGivenOutStablePool, + SingleJoinGivenOutStablePool, + MultiJoinGivenOutStablePool, JoinExitStablePool, JoinResult, JoinQueryResult, @@ -347,11 +348,19 @@ export default class StablePool extends BasePool { return this.queryJoin(this._buildJoinGivenInParams(params)); } - async joinGivenOut(params: JoinGivenOutStablePool): Promise { + async singleJoinGivenOut(params: SingleJoinGivenOutStablePool): Promise { + return this.join(this._buildSingleJoinGivenOutParams(params)); + } + + async querySingleJoinGivenOut(params: SingleJoinGivenOutStablePool): Promise { + return this.queryJoin(this._buildSingleJoinGivenOutParams(params)); + } + + async joinGivenOut(params: MultiJoinGivenOutStablePool): Promise { return this.join(this._buildJoinGivenOutParams(params)); } - async queryJoinGivenOut(params: JoinGivenOutStablePool): Promise { + async queryJoinGivenOut(params: MultiJoinGivenOutStablePool): Promise { return this.queryJoin(this._buildJoinGivenOutParams(params)); } @@ -406,6 +415,14 @@ export default class StablePool extends BasePool { return this.queryExit(this._buildSingleExitGivenInParams(params)); } + async exitGivenIn(params: MultiExitGivenInStablePool): Promise { + return this.exit(this._buildExitGivenInParams(params)); + } + + async queryExitGivenIn(params: MultiExitGivenInStablePool): Promise { + return this.queryExit(this._buildExitGivenInParams(params)); + } + async queryExit(params: JoinExitStablePool): Promise { const fn = this.instance.queryExit; return (await this._executeQuery(params, fn)) as ExitQueryResult; @@ -455,7 +472,7 @@ export default class StablePool extends BasePool { }; } - private _buildJoinGivenOutParams(params: JoinGivenOutStablePool): JoinExitStablePool { + private _buildSingleJoinGivenOutParams(params: SingleJoinGivenOutStablePool): JoinExitStablePool { return { from: params.from, recipient: params.recipient, @@ -466,6 +483,17 @@ export default class StablePool extends BasePool { }; } + private _buildJoinGivenOutParams(params: MultiJoinGivenOutStablePool): JoinExitStablePool { + return { + from: params.from, + recipient: params.recipient, + lastChangeBlock: params.lastChangeBlock, + currentBalances: params.currentBalances, + protocolFeePercentage: params.protocolFeePercentage, + data: StablePoolEncoder.joinAllTokensInForExactBptOut(params.bptOut), + }; + } + private _buildExitGivenOutParams(params: ExitGivenOutStablePool): JoinExitStablePool { const { amountsOut: amounts } = params; const amountsOut = Array.isArray(amounts) ? amounts : Array(this.tokens.length).fill(amounts); @@ -491,6 +519,17 @@ export default class StablePool extends BasePool { }; } + private _buildExitGivenInParams(params: MultiExitGivenInStablePool): JoinExitStablePool { + return { + from: params.from, + recipient: params.recipient, + lastChangeBlock: params.lastChangeBlock, + currentBalances: params.currentBalances, + protocolFeePercentage: params.protocolFeePercentage, + data: StablePoolEncoder.exitExactBptInForTokensOut(params.bptIn), + }; + } + private _buildQuerySwapParams(kind: number, allTokens: string[], params: SwapStablePool): QueryBatchSwap { const swapStep: BatchSwapStep = { poolId: this.poolId, diff --git a/pvt/helpers/src/models/pools/stable/StablePoolDeployer.ts b/pvt/helpers/src/models/pools/stable/StablePoolDeployer.ts index b4a98def62..044f53326a 100644 --- a/pvt/helpers/src/models/pools/stable/StablePoolDeployer.ts +++ b/pvt/helpers/src/models/pools/stable/StablePoolDeployer.ts @@ -36,6 +36,7 @@ export default { bufferPeriodDuration, amplificationParameter, from, + version, } = params; const owner = TypesConverter.toAddress(params.owner); @@ -56,6 +57,7 @@ export default { pauseWindowDuration, bufferPeriodDuration, owner, + version: version, }, ], from, diff --git a/pvt/helpers/src/models/pools/stable/types.ts b/pvt/helpers/src/models/pools/stable/types.ts index 45793b1eb0..52c3a0cadb 100644 --- a/pvt/helpers/src/models/pools/stable/types.ts +++ b/pvt/helpers/src/models/pools/stable/types.ts @@ -45,7 +45,7 @@ export type JoinGivenInStablePool = { lastChangeBlock?: BigNumberish; }; -export type JoinGivenOutStablePool = { +export type SingleJoinGivenOutStablePool = { token: number | Token; bptOut: BigNumberish; from?: SignerWithAddress; @@ -55,6 +55,15 @@ export type JoinGivenOutStablePool = { lastChangeBlock?: BigNumberish; }; +export type MultiJoinGivenOutStablePool = { + bptOut: BigNumberish; + from?: SignerWithAddress; + recipient?: Account; + currentBalances?: BigNumberish[]; + protocolFeePercentage?: BigNumberish; + lastChangeBlock?: BigNumberish; +}; + export type ExitGivenOutStablePool = { amountsOut: NAry; maximumBptIn?: BigNumberish; @@ -125,6 +134,7 @@ export type RawStablePoolDeployment = { from?: SignerWithAddress; vault?: Vault; mockedVault?: boolean; + version?: string; }; export type StablePoolDeployment = { @@ -134,6 +144,7 @@ export type StablePoolDeployment = { rateProviders: Account[]; tokenRateCacheDurations: BigNumberish[]; exemptFromYieldProtocolFeeFlags: boolean[]; + version: string; pauseWindowDuration?: BigNumberish; bufferPeriodDuration?: BigNumberish; owner?: SignerWithAddress; diff --git a/pvt/helpers/src/models/types/TypesConverter.ts b/pvt/helpers/src/models/types/TypesConverter.ts index d6c5160c9b..f28faf7d6b 100644 --- a/pvt/helpers/src/models/types/TypesConverter.ts +++ b/pvt/helpers/src/models/types/TypesConverter.ts @@ -135,6 +135,7 @@ export default { swapFeePercentage, pauseWindowDuration, bufferPeriodDuration, + version, } = params; if (!tokens) tokens = new TokenList(); @@ -145,6 +146,7 @@ export default { if (!pauseWindowDuration) pauseWindowDuration = 3 * MONTH; if (!bufferPeriodDuration) bufferPeriodDuration = MONTH; if (!exemptFromYieldProtocolFeeFlags) exemptFromYieldProtocolFeeFlags = Array(tokens.length).fill(false); + if (!version) version = 'test'; return { tokens, @@ -156,6 +158,7 @@ export default { pauseWindowDuration, bufferPeriodDuration, owner: params.owner, + version, }; },